注:因为公司最近在搞分布式存储,而Ceph在开源分布式存储方面有很多优势,于是自己参照资料在测试环境尝试大家拿了一套分布式Ceph集群,并整理了整个部署过程,文档如下,也希望熟悉Ceph的大牛能多多指正。
一、基于 ceph-deploy部署Ceph
1.1 环境准备
1.1.1 系统配置
推荐选用Linux 7操作系统,建议升级操作系统内核到可支持最高版本。
本次部署选用Centos 7.9,并将操作系统内核升级到5.19.0-1.el7.elrepo.x86_64。
1.1.2 配置主机名解析
本次部署选用9台虚拟机,一台作为管理节点,三台作为MON角色节点,两台作为MGR角色节点,三台用于OSD角色节点。
IP地址 | 主机名 | 主机别名 |
---|---|---|
10.110.3.243 | admin.ceph.org | admin |
10.110.3.244 | mon01.ceph.org | mon01 |
10.110.3.245 | mon02.ceph.org | mon02 |
10.110.3.246 | mon03.ceph.org | mon03 |
10.110.3.247 | mgr01.ceph.org | mgr01 |
10.110.3.248 | mgr02.ceph.org | mgr02 |
10.110.3.249 | store01.ceph.org | strore01 |
10.110.3.250 | store02.ceph.org | strore02 |
10.110.3.251 | store03.ceph.org | strore03 |
1.1.3 网络设置
部署Ceph集群推荐配置双网卡,其中一个网卡用于外部通讯,承载业务数据流量,另外一个网卡用于集群内部数据交换,防止在进行内部数据交换的时候占用业务通道,影响业务通讯。
本次测试10.110.3.0/24为业务使用,192.168.78.0/24为集群内部使用,并为10.110.3.0/24配置默认路由。
1.1.4 硬件设置
除部署OSD节点的三台主机每台额外配置两块硬盘,其余节点只需部署安装操作系统盘。
1.1.5 时间同步设置
Ceph对时间同步要求很高,默认各节点时间误差不能超过50ms。
如各节点可以访问互联网,只需直接启用chronyd服务即可,使用root用户在每个节点执行如下操作。
# systemctl enable chronyd && systemctl start chronyd
# timedatectl set-timezone Asia/Shanghai
如无法访问互联网,推荐使用本地服务器,修改每个节点/etc/chrony.conf配置文件,将server后配置修改为指定时间服务器地址即可,如有多个,可指定多个server,server后面跟时间服务器的地址,如
server admin.ceph.org iburst
可通过chronyc sources -v命令查询时间同步信息。
1.1.6 防火墙和Selinux设置
# 所有节点都需关闭防火墙
systemctl stop firewalld.service
systemctl disable --now firewalld
systemctl status firewalld
# 关闭Selinux
sed -i "/^SELINUX/s@enforcing@disabled@" /etc/sysconfig/selinux
getenforce
1.1.7 配置Ceph管理用户
1.1.7.1 创建集群管理cephadm管理用户
# 使用root用户在admin节点创建脚本
cat > create_cephadm.sh <<EOF
#!/bin/bash
useradd -m -s /bin/bash cephadm
echo cephadm:cephadm | chpasswd
echo "cephadm ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm
EOF
# 然后在admin节点批量执行
for i in {243..251}; do ssh root@10.110.3.$i bash < create_cephadm.sh ; done
1.1.7.2 所有主机通过cephadm用户免密认证
# 在admin节点使用root用户执行如下命令
su - cephadm
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
PASS=cephadm
for i in {243..251};do
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no cephadm@10.110.3.$i
done
1.1.8 配置YUM源
# 使用root用户在admin管理节点主备配置YUM源
cat > /etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-octopus/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-octopus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-octopus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
EOF
# 然后使用root用户通过ansible分发到其余节点
# 此处已在admin节点/etc/ansible/hosts配置了ceph组
ansible ceph -m copy -a 'src=/etc/yum.repos.d/ceph.repo dest=/etc/yum.repos.d/ceph.repo'
1.2 集群安装配置
1.2.1 安装ceph-deploy
在admin节点安装ceph-deploy工具。
# 使用cephadm用户在admin节点执行操作
[cephadm@admin]$ sudo mkdir /usr/local/ceph-cluster && cd /usr/local/ceph-cluster
[cephadm@admin]$ sudo chmod 777 /usr/local/ceph-cluster/
[cephadm@admin ceph-cluster]$ sudo yum install -y ceph-deploy
[cephadm@admin ceph-cluster]$ ceph-deploy --version
1.5.25
1.2.2 安装MON节点
1.2.2.1 MON节点初始化
使用cephadm用户在admin节点操作创建第一个MON节点。
[cephadm@admin ~]$ cd /usr/local/ceph-cluster
[cephadm@admin ceph-cluster]$ ceph-deploy new --public-network 10.110.3.0/24 --cluster-network 192.168.78.0/24 mon01:mon01.ceph.org
===========================================================================================================================================================================================================================================================================================================================================================================================================================================
产生了报错,报错信息如下,根据网上资料显示报错问题与ceph-deploy版本有关,建议指令添加参数“–no-ssh-copykey”。
推荐将ceph-deploy程序升级到2.0.1。
wget https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.9/el7/noarch/ceph-deploy-2.0.1-0.noarch.rpm
rpm -Uvh ceph-deploy-2.0.1-0.noarch.rpm
===========================================================================================================================================================================================================================================================================================================================================================================================================================================
# 添加--no-ssh-copykey参数
[cephadm@admin ceph-cluster]$ ceph-deploy new --public-network 10.110.3.0/24 --cluster-network 192.168.78.0/24 mon01:mon01.ceph.org --no-ssh-copykey
1.2.2.2 MON节点安装软件
使用ceph-deploy命令在admin节点远程完成MON软件包安装。
# admin节点以cephadm用户远程安装mon01节点软件包
[cephadm@admin ceph-cluster]$ ceph-deploy install --no-adjust-repos --nogpgcheck --mon mon01
执行完毕后可登陆mon01节点查看到ceph进程,以及自动创建了ceph用户。
1.2.2.3 MON节点初始化生成配置信息
使用ceph-deploy命令在admin节点远程完成mon01节点初始化。
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf mon create-initial
命令执行完毕后,在admin节点/usr/local/ceph-cluster下生成了许多配置文件,如下所示:
- ceph.bootstrap-mds.keyring 引导启动mds的秘钥文件
- ceph.bootstrap-mgr.keyring 引导启动mgr的秘钥文件
- ceph.bootstrap-osd.keyring 引导启动osd的秘钥文件
- ceph.bootstrap-rgw.keyring 引导启动rgw的秘钥文件
- ceph.client.admin.keyring Ceph客户端和管理端通信的认证秘钥,非常重要
此时在mon01节点上已自动开启了mon的守护进程。
1.2.3 推送秘钥实现集群管理
为方便后续监控环境认证操作,在admin主机上,需把配置文件和admin秘钥拷贝到Ceph集群各个监控角色节点上。
现在还未安装mon02及mon03节点,此时先将秘钥拷贝到mon01节点。
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf config push mon01
此时登陆mon01节点执行ceph -s 会报如下信息:
以上报错原因是因为虽把认证文件传递给了对应的mon01监控角色主机,但服务是通过普通用户cephadm进行交流的,默认情况下,传递过去的认证文件cephadm普通用户是无法正常读取的,需要为其赋权。
# 登陆mon01节点操作
[cephadm@mon01 ~]$ sudo chown cephadm:cephadm /etc/ceph/ceph.client.admin.keyring
此时mon01节点再执行ceph -s 就不再报错,如下图所示。
1.2.4 部署集群管理节点实现远程管理
如果想实现在admin节点来对远程主机进行状态查询,需要安装ceph-common软件。
[cephadm@admin ceph-cluster]$ sudo yum install -y ceph-common [cephadm@admin ceph-cluster]$ ceph-deploy admin admin [cephadm@admin ceph-cluster]$ sudo chown cephadm:cephadm /etc/ceph/ceph.client.admin.keyring [cephadm@admin ceph-cluster]$ ceph -s
1.2.5 部署MGR节点
1.2.5.1 安装MGR软件
在admin节点使用cephadm用户远程安装mgr软件到mgr01节点。
[cephadm@admin ceph-cluster]$ ceph-deploy install --mgr mgr01
1.2.5.2 配置MGR节点启动ceph-mgr进程
在admin节点使用cephadm用户创建mgr节点并生成相关配置。
[cephadm@admin ceph-cluster]$ ceph-deploy mgr create mgr01
修改mgr01节点上/etc/ceph/ceph.client.admin.keyring文件属组和权限以便cephadm查看状态。
# 在admin节点使用cephadm通过ansible将ceph.client.admin.keyring上传到mgr01节点/etc/ceph目录下,并赋权
# 通过ansible拷贝文件
[cephadm@admin ceph-cluster]$ sudo ansible 10.110.3.247 -m copy -a 'src=/etc/ceph/ceph.client.admin.keyring dest=/etc/ceph/ceph.client.admin.keyring'
# mgr01节点上为cephadm用户赋权
[cephadm@mgr01 ~]$ sudo chown cephadm:cephadm /etc/ceph/ceph.client.admin.keyring
# mgr01节点查看集群状态
[cephadm@mgr01 ~]$ ceph -s
1.2.6 部署OSD节点
1.2.6.1 OSD节点安装软件
在admin节点使用cephadm用户远程安装osd软件到store01节点。
[cephadm@admin ceph-cluster]$ ceph-deploy install --release octopus --osd store01
================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
执行ceph-deploy install --release octopus --osd store01报如下错:
原因是因为ceph-deploy升级到2.0.1,在安装octopus版本时会报错:
解决办法如下:
# 使用root用户在admin节点执行
cd /usr/lib/python2.7/site-packages/ceph_deploy/hosts/centos
修改install.py文件 '{url}noarch/ceph-release-1-0.{dist}.noarch.rpm'.format(url=url, dist=dist) 替换为'{url}noarch/ceph-release-1-1.{dist}.noarch.rpm'.format(url=url, dist=dist)
然后重新执行 ceph-deploy install --release octopus --osd store01
================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
admin节点查看store01所有可用的osd盘。
[cephadm@admin ceph-cluster]$ ceph-deploy disk list store01
1.2.6.2 配置OSD存储节点
如果磁盘之前被使用过,可以通过如下命令来格式化磁盘,类似于执行dd格式化磁盘。
[cephadm@admin ceph-cluster]$ for i in {1..3};do ceph-deploy disk zap store01 /dev/sdc /dev/sdd;done
创建OSD存储盘。
# 在admin节点使用cephadm用户先创建一块OSD存储盘。
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create store01 --data /dev/sdc
# 通过ansible拷贝文件
[cephadm@admin ceph-cluster]$ sudo ansible 10.110.3.249 -m copy -a 'src=/etc/ceph/ceph.client.admin.keyring dest=/etc/ceph/ceph.client.admin.keyring'
# store01节点上为cephadm用户赋权
[cephadm@mgr01 ~]$ sudo chown cephadm:cephadm /etc/ceph/ceph.client.admin.keyring
# mgr01节点查看集群状态
[cephadm@mgr01 ~]$ ceph -s
[cephadm@mgr01 ~]$ ps aux |grep ceph
# 将store01第二块磁盘也加入到OSD
# 在admin节点使用cephadm用户操作
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create store01 --data /dev/sdd
# 查看当前osd状态信息
[cephadm@admin ceph-cluster]$ ceph-deploy osd list store01
此时查询store01上的ceph状态,显示是在做Rebalance。
通过如下以下信息可以查看store01上的相关信息:
[root@store01 ~]# pvs
[root@store01 ~]# lvs
[root@store01 ~]# lsblk
[root@store01 ~]# systemctl status ceph-osd@0
1.3 扩展集群实现高可用
1.3.1 实现MON节点高可用
此时集群只有一个MON节点,会导致单点故障,需添加新MON节点实现高可用。
1.3.1.1 安装MON软件
为mon02、mon03两台MON节点安装MON软件。
# 在admin节点使用cephadm用户操作
# 为mon02节点安装MON软件
[cephadm@admin ceph-cluster]$ ceph-deploy install --mon mon02
# 为mon03节点安装MON软件
[cephadm@admin ceph-cluster]$ ceph-deploy install --mon mon03
1.3.1.2 添加MON新节点
将mon02、mon03添加至集群。
# 在admin节点使用cephadm用户操作
# 添加mon02节点
[cephadm@admin ceph-cluster]$ ceph-deploy mon add mon02
# 添加mon03节点
[cephadm@admin ceph-cluster]$ ceph-deploy mon add mon03
1.3.1.3 修改配置添加新加入MON节点
在admin节点使用cephadm用户修改ceph.conf文件。
[cephadm@admin ~]$ cd /usr/local/ceph-cluster
[cephadm@admin ceph-cluster]$ vim ceph.conf
# 修改mon_host,将mon02、mon03两个节点publicIP添加进去,如下,然后保存
mon_host = 10.110.3.244,10.110.3.245,10.110.3.246
1.3.2 实现MGR节点高可用
此时集群只有一个MGR节点,存在单点故障,现将mgr02节点添加至集群。
1.3.2.1 安装MGR软件
通过admin节点实现远程为mgr02节点安装MGR软件。
# 在admin节点使用cephadm用户操作
[cephadm@admin ceph-cluster]$ ceph-deploy install --mgr mgr02
1.3.2.2 添加MGR新节点
通过admin节点远程操作将mgr02节点添加至集群。
# 在admin节点使用cephadm用户操作
[cephadm@admin ceph-cluster]$ ceph-deploy mgr create mgr02
1.3.3 实现OSD节点高可用
将mon02、mon03节点添加至集群。
1.3.3.1 安装OSD软件
通过admin节点实现远程安装mon02、mon03两节点上的OSD软件。
# 在admin节点使用cephadm用户操作
[cephadm@admin ceph-cluster]$ ceph-deploy install --release octopus --osd store02 store03
=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
在安装store02和store03时报如下错误。
原因是因为store02和store03两个节点未按照如下python36相关rpm包导致
需为其安装相应RPM包,我手工下载相关rpm包并执行安装,相应rpm包下载方法如下:
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-cryptography-2.3-2.el7.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-six-1.14.0-3.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-cffi-1.9.1-3.el7.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-requests-2.14.2-2.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/aarch64/Packages/p/python36-prettytable-0.7.2-19.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-pycparser-2.14-2.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-urllib3-1.25.6-2.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-chardet-3.0.4-1.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-dateutil-2.4.2-5.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-ply-3.9-2.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-pysocks-1.6.8-7.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-pyOpenSSL-17.3.0-1.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-PyYAML-3.13-1.el7.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-idna-2.10-1.el7.noarch.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-bcrypt-3.1.6-2.el7.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python36-asn1crypto-0.24.0-7.el7.noarch.rpm
# 然后执行rpm安装
rpm -ivh python36*.rpm --nodeps
=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
然后重新在admin节点执行ceph-deploy install --release octopus --osd store02 store03安装即可。
然后分别格式化store02、store03上的磁盘。
[cephadm@admin ceph-cluster]$ for i in {1..3};do ceph-deploy disk zap store02 /dev/sdc /dev/sdd;done
[cephadm@admin ceph-cluster]$ for i in {1..3};do ceph-deploy disk zap store03 /dev/sdc /dev/sdd;done
1.3.3.2 添加OSD新节点磁盘到OSD
通过admin节点实现远程操作将store02、store03上的磁盘添加到OSD。
# 在admin节点使用cephadm用户操作
# 添加store02的磁盘到OSD
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create store02 --data /dev/sdc
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create store02 --data /dev/sdd
# 添加store03的磁盘到OSD
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create store03 --data /dev/sdc
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf osd create store03 --data /dev/sdd
1.3.4 同步Ceph配置文件到所有主机节点
通过admin节点实现远程操作将Ceph配置文件同步到所有主机节点。
# 在admin节点使用cephadm用户操作
[cephadm@admin ceph-cluster]$ ceph-deploy --overwrite-conf config push admin mon0{1,2,3} mgr0{1,2} store0{1,2,3}
在admin节点使用cephadm通过ansible将ceph.client.admin.keyring上传到所有主机节点,并批量修改用户属组和权限。
[cephadm@admin ceph-cluster]$ sudo ansible ceph -m copy -a 'src=/etc/ceph/ceph.client.admin.keyring dest=/etc/ceph/ceph.client.admin.keyring'
[cephadm@admin ceph-cluster]$ sudo ansible ceph -m file -a "dest=/etc/ceph/ceph.client.admin.keyring mode=644 owner=cephadm group=cephadm"
1.3.5 禁用不安全模式
此时使用ceph -s 查看集群健康状况,显示为 HEALTH_WARN。
使用ceph health detail查看详细信息如下:
可以看到下面有句提示:HEALTH_WARN mons are allowing insecure global_id reclaim
解决办法就是要禁用不安全模式,方法如下:
# 在admin节点使用cephadm执行
[cephadm@admin ceph-cluster]$ ceph config set mon auth_allow_insecure_global_id_reclaim false
再次查看集群状态信息,显示正常。
1.3 启用管理界面
要启用ceph-dashboard图形界面,需要启用dashboard模块。
[cephadm@mgr01 ~]$ ceph mgr module enable dashboard
发现有报错,报错信息如下:
目前,该问题还未解决,待后续学习再解决。