手动部署ceph jewel

一、配置说明

1、 硬件配置

(1) 3台相同配置的ceph存储节点物理机,配置如下: 

CPU  :   Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
内存  :   8G 
网卡  :  1G网卡一个
磁盘3块:

[1] 500G 安装OS 
[2] 500G 磁盘作如下安排: 

  • 一个50G分区,存储osd journal信息
  • 一个20G分区,存储mds元数据信息

[3] 2T 存储ceph的数据

2、 软件

3台存储节点安装centos 7.4(官方桌面版镜像以minimal方式安装) 

3、架构 

  • mon节点数量为3,分布在3台服务器上 
  • osd节点数量为3,分布在3台服务器上 
  • mds节点数量为3,分布在3台服务器上 
  • 每台服务器都包含一个mon节点,一个osd节点,一个mds节点(每台服务器可以有多个osd服务,但只能有一个mon服务和一个mds服务)。

二、安装ceph

(一)安装ceph前配置所有物理机器 

注:每台ceph节点机器可按需执行防火墙相关步骤

1、在所有节点物理机设定相同的时间同步服务器 

(1)打开文件/etc/chrony.conf,将原来的server相关行屏蔽或删掉,添加如下内容:

注:可以根据需要修改为其它时间同步服务器

server time4.aliyun.com iburst

(2)重启时间同步守护进程

service chronyd restart

(3)在所有存储节点物理机上执行下述命令查看同步的时间源是否相同

  • 注:若未显示任何时间源,查看一下DNS服务器有没有正确配置
chronyc sources

2、打开防火墙端口 

(1)在mon服务所在物理机上执行下述命令获取相关网卡所在区域

firewall-cmd --get-active-zones

(2)在mon服务所在物理机上执行下述命令在相关区域为mon服务打开防火墙

firewall-cmd --zone=[NIC's zone] --add-service=ceph-mon --permanent 
firewall-cmd --reload

例如:

firewall-cmd --zone=public --add-service=ceph-mon --permanent 
firewall-cmd --reload

(3)在osd 和mds 服务所在物理机执行下述命令获取网卡所在区域

firewall-cmd --get-active-zones

(4)在osd 和mds 服务所在物理机执行下述命令在相关区域为osd和mds服务打开防火

firewall-cmd --zone=[NIC's zone] --add-service=ceph --permanent 
firewall-cmd --reload

例如:

firewall-cmd --zone=public --add-service=ceph --permanent 
firewall-cmd --reload

3、关闭全部ceph节点物理机的selinux(也可以按需自己配制selinux) 

打开文件/etc/selinux/config,修改如下内容为:  

SELINUX=disabled

4、创建文件夹

mkdir /etc/ceph

5、关闭NetworkManager

systemctl stop NetworkManager;systemctl disable NetworkManager

6、编辑文件/etc/resolv.conf,写入下述内容(或其它合适的dns域名)

nameserver 8.8.8.8

7、修改主机名

  • 步骤1:使用命令修改主机名(注:NEW_HOSTNAME是新的主机名,每台物理机使用不同的主机名)
hostnamectl set-hostname [NEW_HOSTNAME]

  示例:

hostnamectl set-hostname ceph-1
  • 步骤2:修改主机名配置文件/etc/hosts,添加如下行
127.0.0.1   [NEW_HOSTNAME]

  示例:

127.0.0.1   ceph-1

8、重启机器

(二)配置初始的mon节点服务器(任选一台服务器做为初始节点)

1、创建配置文件ceph.conf 

(1)使用vim命令新建文件/etc/ceph/ceph.conf,写入下述内容

注:HOST_NAME是初始mon节点物理机的主机名,HOST_IP是对应物理机的ip

[global]
fsid = 
mon_initial_members = [HOST_NAME]
mon_host = [HOST_IP]
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

(2)执行下述命令获取uuid

uuidgen

(3)将产生的uuid填入/etc/ceph/ceph.conf文件中fsid处

文件/etc/ceph/ceph.conf 内容示例:

[global]
fsid = 722d96fc-5cbc-4de2-b707-e72ceb83b7ac
mon_initial_members = ceph2-osd1
mon_host = 192.168.122.229
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

2、安装ceph相关软件包 

(1)将下述内容保存到/etc/yum.repos.d/ceph.repo 

注:用ceph版本代号替换ceph-release(小写字母),用linux发行版名替换distro,相应ceph版本支持的linux发行版名可以到http://download.ceph.com/rpm-{ceph-release}/寻找

[ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

以ceph版本10.2 jewel示例:

[ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

(2)执行下述命令安装软件

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y snappy leveldb gdisk python-argparse gperftools-libs
yum install -y ceph ceph-common

3、搭建初始的mon节点 

(1)执行下述命令创建keyring

ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring   
chown ceph:ceph /tmp/ceph.mon.keyring

(2)执行下述命令创建monmap

注:HOST_NAME、HOST_IP及UUID是前述ceph.conf中的对应值

monmaptool --create --add {HOST_NAME} {HOST_IP} --fsid {UUID} /tmp/monmap

示例:

monmaptool --create --add ceph2-osd1 192.168.122.229 --fsid 722d96fc-5cbc-4de2-b707-e72ceb83b7ac  /tmp/monmap

(3)生成mon

注:cluster-name是集群名,HOST_NAME是前述ceph.conf中对应值

sudo -u ceph mkdir /var/lib/ceph/mon/{cluster-name}-{HOST_NAME}
sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {HOST_NAME} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

示例:

sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph2-osd1
sudo -u ceph ceph-mon --cluster ceph --mkfs -i ceph2-osd1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

(4)启动mon节点服务

注:HOST_NAME是前述ceph.conf中对应值

systemctl start ceph-mon@HOST_NAME
systemctl enable ceph-mon@HOST_NAME

示例:

systemctl start ceph-mon@ceph2-osd1
systemctl enable ceph-mon@ceph2-osd1

(5)现在,初始的mon节点创建成功了,使用下述命令查看其状态

注:因为还没添加osd节点,不用理会出现的health error

ceph -s

 (三)添加其它的mon节点(以后新增mon节点时,重复这一步骤即可

1、新mon节点需先执行前述步骤 二(一)安装ceph前配置机器

2、配置ceph安装源

  • 在初始mon节点上执行下述命令将前述初始的mon节点上的文件/etc/yum.repos.d/ceph.repo复制到新mon节点服务器相同位置下

注:new_mon_host表示新mon节点ip

scp /etc/yum.repos.d/ceph.repo root@[new_mon_host]:/etc/yum.repos.d/ceph.repo

3、配置新的mon节点服务器

(1)修改初始mon节点上的文件/etc/ceph/ceph.conf,将新mon节点的hostname及ip添加进去。相关修改行如下

  • 注:hostnameN表示已有的第N个mon节点的主机名,ipN表示第N个已有mon主机的ip,new_hostname和new_ip分别表示新mon节点的主机名及ip
mon_initial_members = hostname1,...,hostnameN,new_hostname
mon_host = ip1,...,ipN,new_ip

(2)在初始的mon节点上执行下述命令

  • 注:mon_host_ip表示已有的或新的mon节点ip,new_mon_host_ip表示新mon节点的ip。ceph.conf文件需复制到已有的mon节点和新mon节点的/etc/ceph/目录下
scp /etc/ceph/ceph.client.admin.keyring root@[new_mon_host_ip]:/etc/ceph/
scp /etc/ceph/ceph.conf root@[mon_host_ip]:/etc/ceph/

示例:

scp /etc/ceph/ceph.client.admin.keyring [email protected]:/etc/ceph/
scp /etc/ceph/ceph.conf [email protected]:/etc/ceph/

注:从这里开始,下述的步骤是在新的mon节点上执行

(3)安装ceph相关软件包

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y snappy leveldb gdisk python-argparse gperftools-libs
yum install -y ceph ceph-common

(4)创建新mon节点的文件夹

  • 注:new-mon-id使用新mon节点主机名即可
sudo -u ceph mkdir /var/lib/ceph/mon/{cluster-name}-{new-mon-id}

示例:

sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph2-osd2

(5)导出key文件及map文件

mkdir ~/tmp
ceph auth get mon. -o ~/tmp/keyring
ceph mon getmap -o ~/tmp/mapfile

(6)创建mon节点

  • 注:new-mon-id使用新mon节点主机名即可,map-filename和key-filename是上述导出的对应文件,ip是新mon节点主机的ip
ceph-mon -i {new-mon-id} --mkfs --monmap {map-filename} --keyring {key-filename}
ceph-mon -i {new-mon-id} --public-addr {ip:port}

示例:

ceph-mon -i ceph2-osd2 --mkfs --monmap ~/tmp/mapfile --keyring ~/tmp/keyring
ceph-mon -i ceph2-osd2 --public-addr 192.168.122.96:6789

(7)启动新的mon节点服务

注:new-mon-id使用主机名即可

chown -R ceph:ceph /var/lib/ceph/mon/
systemctl enable ceph-mon@{new-mon-id}
systemctl start ceph-mon@{new-mon-id}

示例:

chown -R ceph:ceph /var/lib/ceph/mon/
systemctl enable ceph-mon@ceph2-osd2
systemctl start ceph-mon@ceph2-osd2

(8)查看新mon节点状态

ceph mon stat

(四)添加osd节点(可以重复这一步骤新增osd节点

1、新osd节点需先执行前述步骤 二(一)安装ceph前配置机器

2、安装ceph相关软件

  • 将前述初始的mon节点上的文件/etc/yum.repos.d/ceph.repo复制到新osd节点服务器相同位置下。在初始mon节点上执行下述命令

注:new_osd_host表示新osd节点ip

scp /etc/yum.repos.d/ceph.repo roo@[new_osd_host]:/etc/yum.repos.d/ceph.repo
  • 在新osd节点上执行下述命令安装软件
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y snappy leveldb gdisk python-argparse gperftools-libs
yum install -y ceph ceph-common

 3、配置新的osd节点服务器

(1)建立新分区并创建文件系统(这一步创建的是数据盘)

  • 注:vdx是未使用的一块磁盘(这里使用的是2T的磁盘),vdxN是创建出来的分区(使用了整个2T的磁盘)。若执行完fdisk命令后未在主机上看到新的分区,执行命令partprobe
fdisk /dev/{vdx}
mkfs.xfs /dev/{vdxN}

示例:

fdisk /dev/vdb
mkfs.xfs /dev/vdb1

(2)创建osd

  • 注:此命令会产生osd-number,记住这一数字,后续会用
ceph osd create

(3)创建osd目录并挂载刚刚创建的新分区 

  • 注:osd-number是命令`ceph osd create`生成的数字,vdxN是前述步骤创建出来的分区
mkdir /var/lib/ceph/osd/ceph-{osd-number}/
mount -o rw,noatime,attr2,inode64,noquota /dev/{vdxN} /var/lib/ceph/osd/ceph-{osd-number}

示例: 

mkdir /var/lib/ceph/osd/ceph-0/
mount -o rw,noatime,attr2,inode64,noquota /dev/vdb1 /var/lib/ceph/osd/ceph-0

(4)修改文件/etc/fstab添加下述内容,以便持久化挂载分区 

  • 注:osd-number是命令`ceph osd create`生成的数字,vdxN是前述步骤创建出来的分区
/dev/{vdxN} /var/lib/ceph/osd/ceph-{osd-number} xfs rw,noatime,attr2,inode64,noquota 0 0

 示例:

/dev/vdb1 /var/lib/ceph/osd/ceph-0 xfs rw,noatime,attr2,inode64,noquota 0 0

(5)配置osd 

  • 注:osd-number是前述命令`ceph osd create`生成的数字;cluster-name是前述配置mon节点时使用的名称;hostname是新osd节点服务器主机名;id-or-name是osd.{osd-number};weight是权重,一般容量为1T时权重为1
chown -R ceph:ceph /var/lib/ceph/osd/
sudo -u ceph ceph-osd -i {osd-number} --mkfs --mkkey
ceph auth add osd.{osd-number} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-number}/keyring
ceph [--cluster {cluster-name}] osd crush add-bucket {hostname} host
ceph osd crush move {hostname} root=default
ceph [--cluster {cluster-name}] osd crush add {id-or-name} {weight} host={hostname}

示例:

chown -R ceph:ceph /var/lib/ceph/osd/
sudo -u ceph ceph-osd -i 0 --mkfs --mkkey
ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring
ceph --cluster ceph osd crush add-bucket ceph2-osd1 host
ceph osd crush move ceph2-osd1 root=default
ceph osd crush add osd.0 1.0 host=ceph2-osd1

(6)配置osd journal

  • 注:vdy是未用的一块磁盘(这里使用的是500G的磁盘),vdyN是fdisk命令新创建的分区。按ceph官方说法,osd的journal盘和osd data盘,即和挂载到/var/lib/ceph/osd/ceph-{osd-number}的盘最好分开。journal盘一般设置为10G,具体的可以参考这里。若执行完fdisk命令后未在主机上看到新的分区,执行命令partprobe 
fdisk /dev/{vdy}
ceph-osd -i {osd-number} --osd-journal /dev/{vdyN} --mkjournal
rm /var/lib/ceph/osd/ceph-{osd-number}/journal
ln -s /dev/{vdyN} /var/lib/ceph/osd/ceph-{osd-number}/journal
chown ceph:ceph /dev/{vdyN}
chown -R ceph:ceph /var/lib/ceph/osd/

示例:

fdisk /dev/vdc
ceph-osd -i 0 --osd-journal /dev/vdc1 --mkjournal
rm /var/lib/ceph/osd/ceph-0/journal
ln -s /dev/vdc1 /var/lib/ceph/osd/ceph-0/journal
chown ceph:ceph /dev/vdc1
chown -R ceph:ceph /var/lib/ceph/osd/

(7)设置开机时修改journal对应磁盘分区的属组为ceph:ceph

注:vdyN是journal对应的分区

   将下述内存写入文件/lib/udev/rules.d/98-udev-ceph.rules

SUBSYSTEM=="block", KERNEL=="{vdyN}", NAME="{vdyN}", GROUP="ceph", OWNER="ceph"

示例: 

SUBSYSTEM=="block", KERNEL=="vdc1", NAME="vdc1", GROUP="ceph", OWNER="ceph"

(8)启动osd服务 

systemctl enable ceph-osd@{osd-number}
systemctl start ceph-osd@{osd-number}

示例: 

systemctl enable ceph-osd@0
systemctl start ceph-osd@0

(9)若启动osd服务后执行命令ceph -s时显示新osd的状态不是up或不是in,重启机器

(五)添加mds服务(可重复这一步骤添加其它mds服务)

1、创建数据文件夹

  • 注:cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),host_name是新mds节点服务器主机名
sudo -u ceph mkdir -p /var/lib/ceph/mds/{cluster-name}-{host_name}

示例:

sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-ceph2-osd1

2、为mds服务创建数据分区 

  • 注:vdy是一块磁盘,这里使用的与前述osd journal使用的是同一块磁盘,vdyN是创建出来的分区。若执行完fdisk命令后未在主机上看到新的分区,执行命令partprobe
fdisk /dev/{vdy}
mkfs.xfs /dev/{vdyN}

示例:

fdisk /dev/vdc
mkfs.xfs /dev/vdc2

3、在/etc/fstab文件中添加如下内容:

  • 注:vdyN是上述步骤为mds服务创建的数据分区,cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),host_name是新mds节点服务器主机名 
/dev/{vdyN} /var/lib/ceph/mds/{cluster-name}-{host_name}/  xfs rw,noatime,attr2,inode64,noquota 0 0

示例:

/dev/vdc2 /var/lib/ceph/mds/ceph-ceph2-osd1/  xfs rw,noatime,attr2,inode64,noquota 0 0

4、修改权限

  • 注:cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),host_name是新mds节点服务器主机名 
mount -a
chown ceph:ceph /var/lib/ceph/mds/{cluster-name}-{host_name}/

示例:

mount -a
chown ceph:ceph /var/lib/ceph/mds/ceph-ceph2-osd1/

5、mds授权

  • 注:cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),id是新mds节点服务器主机名 
sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}
ceph auth add mds.{id} osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyring

示例: 

sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph2-osd1/keyring --gen-key -n mds.ceph2-osd1
ceph auth add mds.ceph2-osd1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph2-osd1/keyring

6、启动mds服务

systemctl start ceph-mds@{host_name}
systemctl enable ceph-mds@{host_name}

示例:

systemctl start ceph-mds@ceph2-osd1
systemctl enable ceph-mds@ceph2-osd1

7、检查mds状态

ceph mds stat

 

(六)创建基于mds的ceph fs

1、创建ceph fs

(1)创建ceph存储池

  • 注:cephfs_metadata_pool_name是存储文件系统元数据的池名称,cephfs_data_pool_name是存储文件系统数据的池名称,data_pool_pg和metadata_pool_pg是存储池的pg数。存储池的pg数可参考这里设置
ceph osd pool create {cephfs_data_pool_name} {data_pool_pg}
ceph osd pool create {cephfs_metadata_pool_name} {metadata_pool_pg}

示例:

ceph osd pool create cephfs_data 32
ceph osd pool create cephfs_metadata 32

(2)创建fs

  • 注:ceph版本jewel目前只支持一个文件系统
  • 注:cephfs_name是文件系统名称,cephfs_metadata_pool_name是存储文件系统元数据的池名称,cephfs_data_pool_name是存储文件系统数据的池名称
ceph fs new {cephfs_name} {cephfs_metadata_pool_name} {cephfs_data_pool_name}

示例:

ceph fs new cephfs_name1 cephfs_metadata cephfs_data

2、挂载ceph文件系统 

注:mon_node_ip是任一mon节点的ip;mount_point是挂载点;USER是用户名;SECRET是密钥文本(/etc/ceph/ceph.client.admin.keyring文件中的key值是密钥文本)

mount -t ceph {mon_node_ip}:6789:/ {mount_point} -o name=USER,secret=SECRET

示例:

mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secret=AQAmuRNbMxu+ERAAe6M1HvTh6PoSTnPakB5B1g==

若将/etc/ceph/ceph.conf文件中的相关变量设置为如下值

auth_cluster_required = none
auth_service_required = none
auth_client_required = none

则可以直接挂载ceph文件系统

mount -t ceph {mon_node_ip}:6789:/ {mount_point}

三、troubleshooting

如果安装完后执行ceph -s显示ceph的health状态为HEALTH_WARN并且显示active+undersized+degraded,确认一下各个存储池pool的pg数设置的是否合适。存储池的pg数可参考这里设置

 

 

 

 

 

你可能感兴趣的:(云计算)