目录
准备工作
所需资源:
本地yum源搭建
其它准备工作:
关闭selinux
修改主机名、添加host
确保时间同步开启
yum 安装相关的包
一些ceph 的命令
关于第一次部署ceph,之前的话,只是新建用户,分配空间,没有自己的部署过,实际的生产运维经验也比较少,最多的也就是之前做过一次ceph到阿里云OSS的数据迁移。
因为是内网环境,除了可以上传一些包之外,与外网基本是隔绝的,而且操作界面也是很不适应,本来以为很快就可以搞定的,但实际用了几乎一下午的时间才搞定,遇到了一些坑,还好在周五下班前搞定了。
这篇文章简单记录下,有同样疑问的,可以直接私信。
♦️
准备工作
准备工作其实做的比较多,因为新别的部门提供的主机,所以一些基础初始化操作都没有做,用户也只提供了一个普通用户。
主机清单 | 部署组件 |
192.168.20.2 | ceph-mon,ceph-mgr |
192.168.20.3 | ceph-mon,ceph-mgr,ceph-osd |
192.168.20.4 | ceph-mon,ceph-osd |
除了主机资源外,还有就是部署包了,因为是内网环境,无法访问外网的yum源,所以需要自己下好对应的包,然后去服务器上部署自己的yum源,涉及到的包,主要有两部分,一个是安装节点上需要部署ceph-deploy,另外一个是ceph的其它包。
我这边下载这些rpm包的话,是用的阿里云的源,除了要下rpm包的话,还需要下对应的repodata,这里面包含了一些rpm包之间的依赖关系,建自己的本地源的话,是需要的。
我是在自己的笔记本上用gitbash下的,下面两条命令,可以把对应的包准备好:
#ceph rpm包
for i in `curl http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ | awk -F '"' '{print $4}' | gerp '14.2.22|'grep rpm`;do curl -O http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64//$i ;done
# ceph repodata
for i in `curl http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ | awk -F '"' '{print $4}' | gerp '14.2.22|'grep rpm`;do curl -O http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64//$i ;done
另外ceph-deploy的准备的话,是另外一个路径,如下:
同样需要准备rpm包和repodata包,ceph-deploy用的是2.0.1,也可以直接在服务器上看下目前有哪个包 yum list|grep ceph-deploy
for i in `curl http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ | awk -F '"' '{print $4}' | gerp '14.2.22|'grep rpm`;do curl -O http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64//$i ;done
看到很多之前的文章,都是用ng做代理来转发的,这里的话,直接采用本地文件作为yum源,虽然每台主机上,都需要操作,不想再搞ng了。
vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=file:///data/mirrors/ceph
gpgcheck=0
priority=1
需要在这个文件夹下面放置刚才下的rpm包以及repodata文件夹,配置好后执行:
yum clean all
yum makecache
yum repolist
执行没有报错,可以看下yum list|grep ceph,是否有了对应的包,有的话,就没有问题了,三台需要做同样的操作,稍微有点麻烦。
另外在部署ceph-deploy的主机上,还需要再加上,ceph-deploy的yum源,步骤同样的。
到这步的话,yum源基本建立好了。
关闭防火墙,在之前的话,这步基本是不需要做的,因为内部镜像、或者一些云主机的话, 基本都是关闭的,所以一开始没注意,后面就遇到坑了。
systemctl stop firewalld
systemctl disable firewalld
#一般也是关闭的,没关的话下面两步都要做
#重启后生效,防止主机异常重启
sed -i 's/enforcing/disabled/' /etc/selinux/config
#即时生效
setenforce 0
#修改主机名
hostnamectl set-hostname ceph1
#添加host
cat >> /etc/hosts << EOF
192.168.20.2 ceph1
192.168.20.3 ceph2
192.168.20.4 ceph3
EOF
这玩意也是后面遇到的坑,导致mon服务一直异常,因为是内网环境,内部也没有时间同步服务,所以以主节点作为服务端,其余两台作为客户端,最开始同步虽然配置了,但是没有生效,建议把时间调乱,然后观察时间是否同步,确实是否配置成功了。
#可以使用ntp或者chrony
#安装chrony服务
yum install chrony -y
#主节点配置文件修改
vim /etc/chrony.conf
server 192.168.20.2 iburst
allow 192.168.20.0/24
local stratum 10
#ceph2、ceph3配置
server 192.168.20.2 iburst
#三台重启chrongyd服务
systemctl restart chrongyd
systemctl enable chronyd
#其它命令
chronyc -a makestep
chronyc sourcestats
chronyc sources -v
在执行了 chronyc sources -v 命令后,查看返回的结果中开头,是否是 ^* ,如果是^?,说明时间同步是有问题的, 需要查看。
到这里的话,基本的准备工作就算完成了,后面开始完整的部署流程。
♦️
集群部署
ceph1执行
yum install python-setuptools ceph-deploy -y
#注意查看 ceph-deploy 的版本 ceph-deploy --version
ceph1、ceph2、ceph3执行
yum install -y ceph ceph-mon ceph-osd ceph-mds ceph-radosgw ceph-mgr
相关包在部署完成后,先进行集群初始化
mkdir /data/my-cluster
cd /data/my-cluster
ceph-deploy new ceph1
确保执行过程中没有异常报错
#mon服务的初始化
ceph-deploy mon create-initial
#将配置文件拷贝到对应的节点
ceph-deploy admin ceph2 ceph3
#如果想部署高可用的monitor ,可以将ceph2也加入mon集群
ceph-deploy mon add ceph2
# 复制ceph 相关文件,执行后可以使用ceph -s
cp ceph.client.admin.keyring /etc/ceph/
#到这里确保几个信息,这个是确保部署,可以继续往下走的条件
1.ceph -s集群是HEALTH OK状态
2.mon进程是否有了
3.mon服务查看是否是runing
上述3步,其实是一个意思,health ok的话,后面两步其实不需要看下
如果不是health ok的话,大概会有两个异常,一个是时间同步异常的报错,一个是安全模式问题
#时间同步异常报错
clock skew detected on mon.node2
#禁用不 安全模式 报错“mon is allowing insecure global_id reclaim”
ceph config set mon auth_allow_insecure_global_id_reclaim false
mon确认健康后,继续进行mgr的部署
ceph-deploy mgr create ceph1
#如果想部署高可用mgr,可以将ceph2、ceph3也添加进来
ceph-deploy mgr create ceph2
部署好后,同样确认ceph -s中状态是否正常,相关进程及服务是否正常
ps -ef|grep mgr 进程是否有
在这里我遇到问题就是,初始化没有问题,但是mgr进程始终没有正常起来,查看了 服务启动的日志,发现是 /var下面的mgr 的目录权限root,服务启动是ceph用户,需要chown修改下权限
然后重启服务后,进程正常有了。
mgr结束后,继续进行osd的初始化,在这步之前,需要提前准备好磁盘,最好是还没有进行格式化的,不然需要做个清理的步骤
ceph-deploy disk zap ceph1 /dev/sda3
#然后添加 osd
ceph-deploy osd create --data /dev/sda3 ceph2
ceph-deploy osd create --data /dev/sda3 ceph3
添加好后,同样确认进程服务是否都是正常的
#检查集群状态命令
ceph -s
# 查看osd状态
ceph osd status
#列出所有ceph服务
systemctl status ceph\*.service ceph\*.target
#启动所有服务的守护进程
systemctl start ceph.target
#停止所有服务的守护进程
systemctl stop ceph.target
#按照服务类型启动服务守护进程
systemctl start ceph-osd.target
systemctl start ceph-mon.target
systemctl start ceph-mds.target
如果你在部署过程中遇到问题想要回滚的话,可以使用下面的命令,我这次部署的话,回滚了2次,第三次终于部署成功了。
#这步 部署的yum包也会删除
ceph-deploy purge ceph1 ceph2 ceph3
ceph-deploy forgetkeys
到这里的话,基本的部署就结束了,但正式使用,已经后面的维护的话,才刚刚开始,具体的话,后面继续更新。