Loading... 机架整体迁移到新机房后,IP 地址发生变更,所有 ceph 节点都需要更新 IP 地址。由于操作时未能一一记录,只能凭记忆大致还原整个过程。本 Ceph 集群使用 `cephadm` 进行管理。 <div class="tip inlineBlock warning"> 仅作个人折腾记录,生产环境请谨慎 </div> 原网络如下: - public network:`10.182.65.0/24` - cluster network: `10.90.90.0/24` cluster network 在一个单独 vlan 中,可以不动,只需要修改 public network。 最开始的思路是,`10.182.65.0/24` 网段保留(由于该网段无法公开访问,放在一个 vlan 中),增加新的 public network,这样假如可以访问到 `10.182.65.0/24` 网段,直接用该网段即可(因为该 vlan 所在链路带宽更大),无法访问到该网段则使用新的 public network。但是实际操作下来发现,虽然 osd 节点监听在 `0.0.0.0`,但实际上报给 `MON` 的只有一个 IP(可以通过 `ceph osd dump` 看到具体 IP),由于原网段和新网段无法互联,导致可能出现 ceph 客户端无法访问 osd 的情况。 所以,最后只能全部替换掉原 public network,迁移后网络如下: - public network: - `10.184.17.0/24` - `10.184.18.0/24` - cluster network: `10.90.90.0/24` ## 环境准备 1. 将集群中所有主机原 public network 接口放入同一个 vlan 中,然后新增一个接口,配置新的 public network 网段 IP 地址 2. 启动 cluster,确保集群正常启动 ## 修改 HOST 地址 将 host 的地址更新为新 IP 段 ```shell ceph orch host set-addr <hostname> <new-addr> ``` ## MON 节点 MON 节点涉及到的 IP 地址配置文件主要有 3 个: - `/etc/ceph/ceph.conf` - `/var/lib/ceph/{fsid}/config/ceph.conf` - `/var/lib/ceph/{fsid}/{mon.id}/config` 迁移后比较棘手的就是 MON 节点,主要问题点: 1. 直接修改上述三个文件中的 IP 地址,然后启动 MON 节点,发现会有问题,主要原因是 MON 节点的节点信息维护在 monmap 中,直接修改配置文件不会改变 monmap 中的节点信息; 2. 尝试通过 `monmaptool` 工具来直接修改 monmap 中的节点信息,但是由于集群是通过 cephadm 管理的(podman 容器),monmap 注入时需要停止 mon 节点,但停止了 mon(容器)又无法进行进行注入了 [官方文档](https://docs.ceph.com/en/reef/cephadm/services/mon/#moving-monitors-to-a-different-network)建议,通过新增一个 MON 节点再移除一个旧的 MON 节点的方式来迁移网络。由于不想新增虚拟机,所以决定接受集群短暂出现 HEALTH WARN 状态,每次移除一个 MON 后,再新增一个新 IP 的 MON 节点。 删除和部署 MON 过程如下: ```shell # 取消 MON 节点的自动部署 ceph orch apply mon --unmanaged # 移除一个 MON 节点 ceph orch daemon rm mon.<hostname> # 新增一个 MON 节点,指定 IP 为新的 IP 地址 ceph orch daemon add mon <hostname>:<new_ipaddr> ``` 注意每替换一个,确认集群恢复正常后(`ceph -s`)再进行下一步操作。 MON 节点更新完之后,使用 `ceph mon stat/dump` 确认所有 MON 节点都符合预期: ```shell root@ceph-mon-01:/# ceph mon dump epoch 26 fsid 5e08383c-18d1-11ee-a099-005056a354fb last_changed 2025-05-27T11:41:34.580004+0000 created 2023-07-02T12:10:07.025273+0000 min_mon_release 19 (squid) election_strategy: 1 0: [v2:10.184.18.34:3300/0,v1:10.184.18.34:6789/0] mon.ceph-mon-01 1: [v2:10.184.17.111:3300/0,v1:10.184.17.111:6789/0] mon.ceph-mon-02 2: [v2:10.184.17.121:3300/0,v1:10.184.17.121:6789/0] mon.ceph-mon-03 dumped monmap epoch 26 ``` 设置 public network,注意需先保留原 public network,以保证 OSD 等节点的 network 在列表内: ``` ceph config set mon public_network 10.182.65.0/24,10.184.17.0/24,10.184.18.0/24 ``` 重新开启自动部署,由 label 进行管理: ```shell ceph orch apply mon --placement "label:ceph-mon" ``` 部署 MON 节点后,会自动对 daemon 进行 reconfig,更新配置文件,可以检查下配置是否正确 ## OSD/MGR/MDS 节点 这几个节点的配置文件存放目录: - OSD: `/var/lib/ceph/{fsid}/osd.<id>/config` - MGR: `/var/lib/ceph/{fsid}/mgr.<name>/config` - MDS: `/var/lib/ceph/{fsid}/mds.<name>/config` 正常情况下,重新部署 MON 后,会自动 reconfig,更新这些配置文件,若遇到问题,可以检查下这些配置。 这些节点更改起来就比较容易了,操作都类似,这里仅以 OSD 节点为例进行说明。 更改 OSD 节点的 public network: ```shell ceph config set osd public_network 10.184.17.0/14,10.184.18.0/24 ``` 然后重启所有的 OSD 节点,这样,OSD 节点将监听在指定网段的 IP 地址上: ![[Ceph 集群迁移(修改 IP 地址)记录-1748435896243.jpeg]] 所有节点重启完毕后,确认所有节点上报的 OSD IP 地址都是正确的: ```shell ceph osd dump --format json | jq '.osds[] | {osd: .osd, up: .up, in: .in, public_addr: .public_addr, cluster_addr: .cluster_addr}' ``` 然后可以去掉 OSD 的 public network 设置: ```shell ceph config rm osd public_network ``` MGR/OSD/MDS 改完之后,可以将 MON 的 public network 中的原网段去掉: ```shell ceph config set mon public_network 10.184.17.0/24,10.184.18.0/24 ``` ## NFS 导出 NFS 主要分为两部分: - NFS daemon 配置:`/var/lib/ceph/{fsid}/nfs.{name}/config` - NFS ingress 配置:主要是 virtual ip 配置 修改操作如下: ```shell # 先导出 nfs 和 ingress.nfs 的配置 ceph orch ls --service-type nfs --export > /tmp/nfs.yaml ceph orch ls --service-type ingress --export > /tmp/ingress.yaml # 按照需求更改,主要是 virtual_ip # 修改后重新部署 ceph orch apply -i /tmp/nfs.yaml ceph orch apply -i /tmp/ingress.yaml ``` 最后修改:2026 年 01 月 16 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏