ceph节点迁移
前置知识
-
ceph组件
mon、mgr、osd、rgw
其中非常重要且有数据存储的为mon和osd组件
对于mon和osd来说,迁移比较麻烦,但是对于其他组件来说因为是无状态的,因此迁移比较容易
mon节点的迁移
更换mon ip
- 获取mon map
-
如果集群的ip还没有进行更换,那么可以将ceph mon map打印出来,记得ceph.conf需要修改
ceph mon getmap -o monmap
monmaptool --print monmap
查看对应的mon map信息monmaptool: monmap file map epoch 2 fsid 35c74e3c-3dfd-4e55-b585-3409fc490112 last_changed 2021-12-22T15:57:47.417657+0800 created 2021-12-22T15:52:15.227984+0800 min_mon_release 15 (octopus) 0: v1:10.20.20.43:6789/0 mon.server166 1: v1:10.20.20.45:6789/0 mon.server168 2: v1:10.20.20.47:6789/0 mon.server171
-
删除mon节点
monmaptool --rm server166 --rm server168 --rm server171 monmap
-
添加新的mon节点
monmaptool --add server43 10.20.20.44:6789 --add server46 10.20.20.45:6789 --add server47 10.20.20.48:6789 /etc/ceph/monmap
-
-
或者通过修改ceph.conf配置文件进行获取ceph mon map
monmaptool --create --generate -c /etc/ceph/ceph.conf monmap
monmaptool: monmap file monmap epoch 0 fsid 35c74e3c-3dfd-4e55-b585-3409fc490112 last_changed 2022-04-06T22:24:58.825188+0800 created 2022-04-06T22:24:58.825188+0800 min_mon_release 0 (unknown) 0: [v2:10.20.20.43:3300/0,v1:10.20.20.43:6789/0] mon.noname-a 1: [v2:10.20.20.45:3300/0,v1:10.20.20.45:6789/0] mon.noname-b 2: [v2:10.20.20.47:3300/0,v1:10.20.20.47:6789/0] mon.noname-c
这样的有一个缺陷:
即看到mon的名字不是我们想要的,那么这时候可以进行修改
-
删除自动生成的mon节点
monmaptool --rm noname-a --rm noname-b --rm noname-c monmap
-
添加新的mon节点
monmaptool --add server43 10.20.20.44:6789 --add server45 10.20.20.46:6789 --add server47 10.20.20.48:6789 /etc/ceph/monmap
-
-
将mon map推送到各个节点上
-
暂停各个mon的服务
systemctl stop ceph-mon@*.service
-
各个节点注入mon map
ceph-mon -i {node name} --inject-monmap monmap
-
重启各个节点的mon服务
更换mon节点名称
这种情况比较特殊,需要对mon的节点名称修改,比如说之前是server166,现在我想改成server43,但是ip不变
首先我们需要明确一个前提,即mon节点里面存储了什么?
cd /var/lib/ceph/mon/ceph-server166
可以看到组成为
-
一个秘钥
-
kv存储引擎名称 (rocksdb)
-
mon支持的版本 (o版)
-
rocksdb存储的文件
这个文件夹相当重要,里面包含了分发给mon、mgr、osd等等组件的keyring
-
mon map进行修改,参照前一步更换mon节点名称
-
复制mon文件,并且将复制的文件夹名称改为自己想要的文件名
cp -r ceph-server166/ ceph-server43/
因为是使用root权限对文件夹进行复制的,因此
ceph-server43/
文件夹的权限为root,但是需要进行调整
可以看到运行的用户是ceph,因此我们需要将ceph-server43/
的权限改为ceph
chown +R ceph:ceph ceph-server43
注意文件夹里面的文件都需要将权限赋给ceph用户
-
将原来的mon进程停掉
systemctl stop ceph-mon@server166
-
启动新的mon进程
systemctl restart ceph-mon@server34
注意:如果进程一直拉不起来,可以利用journalctl -b -u "ceph-mon@*.service"
,查看进程的日志
mgr节点的迁移
-
暂停mgr进程
sudo systemctl stop ceph-mgr@{mgr-name}
sudo systemctl disable ceph-mgr@{mgr-name}
-
删除对应的文件
sudo rm -rf /var/lib/ceph/mgr/ceph-{mgr-name}
-
重新安装mgr
因为mgr是无状态的,因此不需要担心数据丢失问题