修改 Ceph 集群(主要是
monitor
)的 IP 地址
1. 背景同步
现有 Ceph 集群两台服务器idv-master
和idv-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 -> bond0idv-node1
:em1、em2 、em3、em4-> bond0
因此只需将idv-master
的em1
、em2
、em3
、em4
和idv-node1
的em1
、em2
、em3
、em4
这八个网卡通过网线换插到X
机房的交换机上,并修改bond0
的网络配置信息。
2. 换插网线之前的准备
注:以下所有操作在换插网线之前完成,此时 Ceph 集群应处于
HEALTH_OK
状态
2.1 修改 ifcfg-bond0
首先修改两台服务器bond0
的配置文件/etc/sysconfig/network-scripts/ifcfg-bond0
,在其中额外添加一个192.168.136.0/24
网段的 IP 地址:
idv-master
的ifcfg-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-node1
的ifcfg-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