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节点机器可按需执行防火墙相关步骤
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}
如果安装完后执行ceph -s显示ceph的health状态为HEALTH_WARN并且显示active+undersized+degraded,确认一下各个存储池pool的pg数设置的是否合适。存储池的pg数可参考这里设置