在之前写的《ceph-ansible安装部署指南(centos-7.6)》中,主要是直接使用社区发布的release版本,进行部署与安装。但大部分情况是,开发人员自己进行了二次开发或其他代码修改,那每次部署时还使用社区发布的版本部署后再手动替换就很不方便。所以本文档针对这种自编译的Ceph工程提供编译和部署的方式和说明。
首先确定环境可以正常编译Ceph代码,确定方法就是直接在Ceph代码中运行:
bash install-deps.sh
将所有需要安装的依赖都装成后,运行:
bash do_cmake.sh
生成build目录未报错,说明依赖均已安装完成,可以开始下面的rpm编译和部署过程。
部署的版本号是拿社区v14.2.20为例,实际编译时版本号可以修改为其它,主要是需要ceph.spec文件。
<一> 编译rpm包
一、 获取版本信息
下载:
wget https://download.ceph.com/tarballs/ceph-14.2.20.tar.gz
解压后,获取ceph.spec文件。
二、 获取源码
源码可以直接使用我们自己维护的Ceph代码:
git clone XXXXX
三、 安装依赖
安装rpmbuild需要的依赖:
yum install gcc make python-devel openssl-devel graphviz autoconf automake rpm-build redhat-rpm-config libtool
四、 创建rpmbuild目录结构
mkdir rpmbuild/{BUILD,SOURCES,SPECS,RPMS,BUILDROOT} –pv
或直接rpmdev-setuptree
。
五、 压缩代码为bz2包
tar jcvf ceph-14.2.20.tar.bz2 ceph-14.2.20/
六、 拷贝ceph.spec到rpmbuild/SPEC中
七、 拷贝ceph-14.2.20.tar.bz2到rpmbuild/SOURCE中
八、 开始编译及生成rpm包
rpmbuild -ba ~/rpmbuild/SPECS/ceph.spec
生成的rpm包均在rpmbuild/RPMS下。
<二> 使用ceph-ansible部署自编译rpm包
一、 挂载源目录
A、在某个非ceph节点的机器根目录下,新建mgtv_ceph_source等一系列目录:
mkdir –p /mgtv_ceph_source/rpm-nautilus/el7
B、将编译好的rpm包,放到/mgtv_ceph_source/rpm-nautilus/el7下:
1、 将rpmbuild/RPMS/下的noarch和x86_64拷入。
2、 将rpmbuild/下的SRPMS拷入。
C、分别在/mgtv_ceph_source/rpm-nautilus/el7/noarch、/mgtv_ceph_source/rpm-nautilus/el7/x86_64、/mgtv_ceph_source/rpm-nautilus/el7/SRPMS下执行:
createrepo /mgtv_ceph_source/rpm-nautilus/el7/noarch
createrepo /mgtv_ceph_source/rpm-nautilus/el7/x86_64
createrepo /mgtv_ceph_source/rpm-nautilus/el7/SRPMS
生成相应的repodata目录。
D、开启nfsd服务,如没有nfs,通过yum install –y nfs-utils安装。
在/etc/exports中加入:
/mgtv_ceph_source 10.4.128.0/24(rw,no_root_squash,no_all_squash,sync)
启动rpcbind和nfs服务:
service rpcbind start
service nfs start
在集群的每一个节点上,查看挂载点:
showmount –e 10.4.128.193
Export list for 10.4.128.193:
/mgtv_ceph_source 10.4.128.0/24
无误后,每个节点挂载源:
mount –t nfs4 10.4.128.193:/mgtv_ceph_source /mnt
二、 添加ceph本地源
在每个节点中进行配置本地源:
vim /etc/yum.repo.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=file:///mnt/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=file:///mnt/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
priority=1
[ceph-source]
name=Ceph source packages
baseurl=file:///mnt/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
priority=1
然后yum clean all && yum makecache
。
三、 修改ceph-ansible配置
在文档《ceph-ansible安装部署指南(centos-7.6)》中各项ansible配置的基础上,将group_vars/all.yml中找到ceph_mirror配置项修改为:
ceph_mirror: file:///mnt
ceph_stable_key可以注释掉,其余不变。
四、 执行ansible部署
安装指令ansible-playbook -vv -i hosts site.yml
装好即可使用。
<三> 集群升级
一、 全部组件升级
集群需要进行全部升级时,同第二章前面的处理方式一样,先进行源挂载,再添加ceph源,然后执行ansible升级指令:
ansible-playbook -vv -i hosts infrastructure-playbooks/rolling_update.yml
然后等待升级完成即可。
二、 部分组件升级
集群需要进行部分组件升级时,采用rpm包安装的方法进行即可,将要升级的版本rpm包编译好之后,拷贝到每个节点下,先停用待升级组件:
systemctl stop xxxxx.service
然后执行安装:
rpm –ivh –force XXX.rpm
即可安装成功,再重新启动该组件即可。
例如,升级rgw组件:
systemctl stop ceph-radosgw@rgw.ceph1.rgw0.service
rpm –ivh -–force ceph-radosgw-14.2.20-0.el7.x86_64.rpm
rpm –ivh –-force librados2-14.2.20-0.el7.x86_64.rpm
systemctl reset-failed ceph-radosgw@rgw.ceph1.rgw0.service
systemctl start ceph-radosgw@rgw.ceph1.rgw0.service
<四> 卸载和清理ceph
当需要销毁集群时,可通过如下步骤进行:
一、 删除ceph
ceph-deploy purge ceph1 ceph2 ceph3 …
ceph-deploy purgedata ceph1 ceph2 ceph3 …
如没有ceph-deploy工具,则直接yum install ceph-deploy
即可。
二、 卸载osd,删除对应目录
umount /var/lib/ceph/osd/*
rm -rf /var/lib/ceph /var/run/ceph /etc/ceph
三、 卸载vg
pvscan & vgremove ceph-…… -y
四、 清理磁盘等设备(根据需要进行)
sgdisk --zap-all /dev/sdA
dd if=/dev/zero of="A" bs=1M count=100 oflag=direct,dsync
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
rm -rf /dev/ceph-*
<五> Q&A
一、报repomd.xml错误问题
报错具体为:
file:///root/mgtv-ceph-source/rpm-nautilus/el7/x86_64/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /root/mgtv-ceph-source/rpm-nautilus/el7/x86_64/repodata/repomd.xml"
原因及解决:这个错误多数是源中未找到repodata。但是经查看,是有repodata的,所以一般是未挂载导致。执行部署章节中第一节:挂载源目录即可。
二、报安装版本冲突问题
报错具体为类似:
Error: Package: 2:ceph-common-14.2.20-0.el7.x86_64 (Ceph)
Requires: librbd1 = 2:14.2.20-0.el7
Installed: 2:librbd1-14.2.21-0.el7.x86_64 (@Ceph)
librbd1 = 2:14.2.21-0.el7
Available: 2:librbd1-14.2.20-0.el7.x86_64 (Ceph)
librbd1 = 2:14.2.20-0.el7
原因及解决:这个一般是集群中之前通过yum安装过更新或更旧版本的包,但是卸载集群后未删除干净,导致再次安装不同版本时冲突。解决方法是根据给出的所有冲突包名称手动卸载,yum remove XXX
。
三、设置开机自启动参数无效问题
报错具体为:
Unable to enable service ceph-mon@ceph3: Failed to execute operation: Invalid argument.
原因及解决:一般是systemctl enable的bug,可能是之前修改过/etc/systemd/system/下的软链接文件,导致未能成功建立软链接。解决方法是手动建立软链接:
ln -s /usr/lib/systemd/system/ceph-mon\@.service /etc/systemd/system/ceph-mon.target.wants/ceph-mon\@ceph3.service
四、其他参数无效问题
有时报的一些莫名其妙的参数无效问题,多是因为上次执行ansible部署时失败过,但未能成功回滚,导致再次直接部署时某些组件部署冲突,这种情况参考上面第四章节:清理ceph,清理后再重新ansible部署。
其他遇到的问题后续慢慢补充。