基于ceph源码的rpm编译、部署、升级、清理说明

在之前写的《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部署。

其他遇到的问题后续慢慢补充。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值