修改 Ceph 集群(主要是monitor)的 IP 地址

1. 背景同步

现有 Ceph 集群两台服务器idv-masteridv-node1当前接入的是192.168.140.0/24网段,现在需要通过网线连接至X机房对应的交换机,接入192.168.136.0/24网段。两个网段内部都是千兆环境,而互相之间则只有百兆,因此服务器的 IP 地址需要修改,Ceph Monitor 的 IP 地址也要对应进行修改

主机名 idv-master idv-node1
Ceph Mon idv-master
原 IP 地址 192.168.140.79/24 192.168.140.76/24
原网关地址 192.168.140.254 192.168.140.254
新 IP 地址 192.168.136.51/24 192.168.136.47/24
新网关地址 192.168.136.126 192.168.136.126

另外,两台服务器上分别做了网卡的bonding

  • idv-master:em1、em2、em3、em4 -> bond0
  • idv-node1:em1、em2 、em3、em4-> bond0

因此只需将idv-masterem1em2em3em4idv-node1em1em2em3em4这八个网卡通过网线换插到X机房的交换机上,并修改bond0的网络配置信息。

2. 换插网线之前的准备

:以下所有操作在换插网线之前完成,此时 Ceph 集群应处于HEALTH_OK状态

2.1 修改 ifcfg-bond0

首先修改两台服务器bond0的配置文件/etc/sysconfig/network-scripts/ifcfg-bond0,在其中额外添加一个192.168.136.0/24网段的 IP 地址:

idv-masterifcfg-bond0修改如下:

DEVICE=bond0
TYPE=Bond
NAME=bond0
BOOTPROTO=none
ONBOOT=yes
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPADDR=192.168.140.79
PREFIX=24
IPADDR1=192.168.136.51
PREFIX1=24
GATEWAY=192.168.140.254
DNS1=xxx.xxx.xxx.xxx
BONDING_MASTER=yes
BONDING_OPTS="mode=6 miimon=100"

idv-node1ifcfg-bond0修改如下:

DEVICE=bond0
TYPE=Bond
NAME=bond0
BOOTPROTO=none
ONBOOT=yes
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPADDR=192.168.140.76
PREFIX=24
IPADDR1=192.168.136.47
PREFIX1=24
GATEWAY=192.168.140.254
DNS1=xxx.xxx.xxx.xxx
BONDING_MASTER=yes
BONDING_OPTS="mode=6 miimon=100"

之后重启网络,测试两台服务器是否可以通过新的 IP 地址通信:

[root@idv-master ~] systemctl restart network
[root@idv-master ~] nmcli
bond0: connected to bond0
        "bond0"
        bond, 18:66:DA:F3:97:10, sw, mtu 1500
        ip4 default, ip6 default
        inet4 192.168.136.51/24
        inet4 192.168.140.79/24
        route4 192.168.140.0/24
        route4 192.168.136.0/24
        route4 0.0.0.0/0
......

[root@idv-master ~] ping 192.168.136.47
PING 192.168.136.47 (192.168.136.47) 56(84) bytes of data.
64 bytes from 192.168.136.47: icmp_seq=1 ttl=64 time=0.204 ms
64 bytes from 192.168.136.47: icmp_seq=2 ttl=64 time=0.192 ms
64 bytes from 192.168.136.47: icmp_seq=3 ttl=64 time=0.167 ms
^C

2.2 准备 monmap

进入idv-master/root/ceph-deploy目录,首先查看当前 Ceph 集群的 monitor 信息:

[root@idv-master ~] cd ceph-deploy

[root@idv-master ~] ls -hl
total 216K
-rw-------. 1 root root  113 Jun 15 18:13 ceph.bootstrap-mds.keyring
-rw-------. 1 root root  113 Jun 15 18:13 ceph.bootstrap-mgr.keyring
-rw-------. 1 root root  113 Jun 15 18:13 ceph.bootstrap-osd.keyring
-rw-------. 1 root root  113 Jun 15 18:13 ceph.bootstrap-rgw.keyring
-rw-------. 1 root root  151 Jun 15 18:13 ceph.client.admin.keyring
-rw-r--r--  1 root root  320 Jun 19 10:55 ceph.conf
-rw-r--r--. 1 root root 188K Jun 16 11:27 ceph-deploy-ceph.log
-rw-------. 1 root root   73 Jun 15 18:10 ceph.mon.keyring

[root@idv-master ceph-deploy] ceph mon dump
dumped monmap epoch 3
epoch 3
fsid 37b37488-4f34-4ddd-bd28-ac4a5267c261
last_changed 2020-06-15 21:19:38.124439
created 2020-06-15 18:13:19.250180
min_mon_release 14 (nautilus)
0: [v2:192.168.140.79:3300/0,v1:192.168.140.79:6789/0] mon.idv-master

之后获取当前 Ceph 集群的monmap文件,可通过ceph mon getmap命令从当前集群动态获取(需要集群处于运行状态),或者通过monmaptool根据配置文件ceph.conf静态生成(无需集群处于运行状态):

# 从当前集群动态获取
[root@idv-master ceph-deploy] ceph mon getmap -o ./monmap
[root@idv-master ceph-deploy] monmaptool --print ./monmap
monmaptool: monmap file ./monmap
epoch 3
fsid 37b37488-4f34-4ddd-bd28-ac4a5267c261
last_changed 2020-06-15 21:19:38.124439
created 2020-06-15 18:13:19.250180
min_mon_release 14 (nautilus)
0: [v2:192.168.140.79:3300/0,v1:192.168.140.79:6789/0] mon.idv-master

# 或者根据配置文件 ceph.conf 静态生成
[root@idv-master ceph-deploy] monmaptool --create --generate -c ./ceph.conf ./monmap

获取完monmap之后,接下来需要手动修改 monitor 的 IP 地址及端口。首先删除旧的 monitor,之后添加新的 monitor。此处由于只有idv-master一个 monitor,因此只需对该 monitor 进行操作。当 Ceph 集群中存在多个 monitor 时,需要对所有的 monitor 进行相同的操作。

# 删除旧的 monitor
[root@idv-master ceph-deploy] monmaptool --rm idv-master ./monmap
monmaptool: monmap file ./monmap
monmaptool: removing idv-master
monmaptool: writing epoch 3 to ./monmap (0 monitors)

# 查看删除后的 monmap,此时已经没有 mon.idv-master
[root@idv-master ceph-deploy] monmaptool --print ./monmap 
monmaptool: monmap file ./monmap
epoch 3
fsid 37b37488-4f34-4ddd-bd28-ac4a5267c261
last_changed 2020-06-15 21:19:38.124439
created 2020-06-15 18:13:19.250180
min_mon_release 14 (nautilus)

# 添加新的 monitor,使用新的 IP 地址
[root@idv-master ceph-deploy] monmaptool --add idv-master 192.168.136.51:6789 ./monmap
monmaptool: monmap file ./monmap
monmaptool: writing epoch 3 to ./monmap (1 monitors)

# 查看新的 monmap,此时 monitor 的 IP 地址已修改
[root@idv-master ceph-deploy] monmaptool --print ./monmap 
monmaptool: monmap file ./monmap
epoch 3
fsid 37b37488-4f34-4ddd-bd28-ac4a5267c261
last_changed 2020-06-15 21:19:38.124439
created 2020-06-15 18:13:19.250180
min_mon_release 14 (nautilus)
0: v1:192.168.136.51:6789/0 mon.idv-master

2.3 修改 ceph.conf

修改ceph.conf中的配置信息,方便在换插网线之后通过ceph-deploy推送到各个节点:

# 查看修改前的配置文件
[root@idv-master ceph-deploy] cat ./ceph.conf 
[global]
fsid = 37b37488-4f34-4ddd-bd28-ac4a5267c261
mon_initial_members = idv-master
mon_host = 192.168.140.79
auth_cluster_required = none
auth_service_required = none
auth_client_required = none

public_network=192.168.140.0/24
cluster_network=192.168.140.0/24
mon_clock_drift_allowed = 2

[mgr]
mgr modules = dashboard

# 修改配置文件中的网络信息
[root@idv-master ceph-deploy] vim ./ceph.conf

# 查看修改后的配置文件
[root@idv-master ceph-deploy] cat ./ceph.conf
[global]
fsid = 37b37488-4f34-4ddd-bd28-ac4a5267c261
mon_initial_members = idv-master
mon_host = 192.168.136.51
auth_cluster_required = none
auth_service_required = none
auth_client_required = none

public_network=192.168.136.0/24
cluster_network=192.168.136.0/24
mon_clock_drift_allowed = 2

[mgr]
mgr modules = dashboard

2.4 修改 /etc/hosts

修改两台服务器/etc/hosts文件中的主机名和 IP 地址的对应规则:

# 192.168.140.79 idv-master
192.168.136.51 idv-master
# 192.168.140.76 idv-node1
192.168.136.47 idv-node1

2.5 停止 Ceph 相关服务

在两台服务器上分别执行以下命令,停止 Ceph 相关服务的运行:

systemctl stop ceph.target

至此换插网线之前的准备工作已经完成,现在可以将网线换插至新的交换机设备。

3. 换插网线之后的恢复

:以下所有操作在换插网线之前完成

3.1 修改 bond0 网关地址

换插网线后,首先需要做的就是恢复网络的连通状态。由于bond0已经配置了两个 IP 地址,因此只需要修改bond0中的GATEWAY,并重启网络服务:

# 在 idv-master 上执行
[root@idv-master ~] sed -i '/GATEWAY/c GATEWAY=192.168.136.126' /etc/sysconfig/
network-scripts/ifcfg-bond0
[root@idv-master ~] systemctl restart network

# 在 idv-node1 上执行
[root@idv-node1 ~] sed -i '/GATEWAY/c GATEWAY=192.168.136.126' /etc/sysconfig/
network-scripts/ifcfg-bond0
[root@idv-node1 ~] systemctl restart network

之后尝试访问网关地址和外部网络,测试网络的连通状态:

[root@idv-master ~] ping idv-node1
[root@idv-master ~] ping 192.168.136.126
[root@idv-master ~] ping baidu.com

3.2 推送新的 ceph.conf

idv-master/root/ceph-deploy目录下,使用ceph-deploy将新的配置文件推送至所有节点上:

[root@idv-master ceph-deploy] ceph-deploy --overwrite-conf config push idv-master idv-node1

3.3 将 monmap 注入到集群

由于本文中只有idv-master一个 monitor,因此只需在idv-master上注入monmap。对于有多个 monitor 的 Ceph 集群,需要在所有的 monitor 节点上进行下列操作:

[root@idv-master ceph-deploy] ceph-mon -i idv-master --inject-monmap ./monmap

修改目录权限:

[root@idv-master ceph-deploy] chown ceph:ceph /var/lib/ceph/mon/ceph-idv-master/store.db/*

之后启动 Ceph 集群,检查集群是否恢复运行:

# 在所有节点上启动 Ceph 相关服务
[root@idv-master ~] systemctl start ceph.target
[root@idv-node1 ~] systemctl start ceph.target

# 检查集群是否恢复运行
[root@idv-master ~] ceph -s

修改 Ceph Dashboard 至新的地址:

[root@idv-master ceph-deploy] ceph config set mgr mgr/dashboard/server_addr 192.168.136.51
[root@idv-master ceph-deploy] systemctl restart ceph-mgr@idv-master.service

参考资料

  1. Ceph 集群更换 IP(更换 IP 前的防范和更换 IP 后的恢复)- 勤学996 | CSDN
  2. Ceph 集群更改 IP 地址 - 夜雨狂歌如梦| CSDN
  3. Ceph 集群修改 IP 地址 - Andriy_dangli | CSDN
  4. 解决 Ceph 集群 Mon 和 OSD 网络变更或者 IP (主要是 mon)变换后,集群不能正常工作问题 - 擎正义之旗 | CSDN