10. 修改 MON IP


Ceph 客户端和其他 Ceph 守护进程通过 ceph.conf 来发现 monitor。但是 monitor 之间是通过 mon map 而非 ceph.conf 来发现彼此。

10.1 修改 MON IP(正确的方法)

仅修改 ceoh.conf 中 mon 的 IP 是不足以确保集群中的其他 monitor 收到更新的。要修改一个 mon 的 IP,你必须先新增一个使用新 IP 的 monitor(参考1.6 增加/删除 Monitor),确保这个新 mon 成功加入集群并形成法定人数。然后,删除使用旧 IP 的 mon。最后,更新 ceph.conf ,以便客户端和其他守护进程可以知道新 mon 的 IP。

比如,假设现有 3 个 monitors:

  1. [mon.a]
  2. host = host01
  3. addr = 10.0.0.1:6789
  4. [mon.b]
  5. host = host02
  6. addr = 10.0.0.2:6789
  7. [mon.c]
  8. host = host03
  9. addr = 10.0.0.3:6789

mon.c 变更为 mon.d 。按照本手册第一部分 6. 增加/删除 Monitor,增加一个 mon.d ,host 设为 host04,IP 地址设为 10.0.0.4。先启动 mon.d ,再按照 6. 增加/删除 Monitor 删除 mon.c ,否则会破坏法定人数。

10.2 修改 MON IP(不太友好的方法)

有时,monitor 需要迁移到一个新的网络中、数据中心的其他位置或另一个数据中心。这时,需要为集群中所有的 monitors 生成一个新的 mon map (指定了新的 MON IP),再注入每一个 monitor 中。

还以前面的 mon 配置为例。假定想把 monitor 从 10.0.0.x 网段改为 10.1.0.x 网段,这两个网段直接是不通的。执行下列步骤:

1、获取 mon map。

  1. ceph mon getmap -o {tmp}/{filename}

2、下面的例子说明了 monmap 的内容。

  1. $ monmaptool --print {tmp}/{filename}
  2. monmaptool: monmap file {tmp}/{filename}
  3. epoch 1
  4. fsid 224e376d-c5fe-4504-96bb-ea6332a19e61
  5. last_changed 2012-12-17 02:46:41.591248
  6. created 2012-12-17 02:46:41.591248
  7. 0: 10.0.0.1:6789/0 mon.a
  8. 1: 10.0.0.2:6789/0 mon.b
  9. 2: 10.0.0.3:6789/0 mon.c

3、删除已有的 monitors。

  1. $ monmaptool --rm a --rm b --rm c {tmp}/{filename}
  2. monmaptool: monmap file {tmp}/{filename}
  3. monmaptool: removing a
  4. monmaptool: removing b
  5. monmaptool: removing c
  6. monmaptool: writing epoch 1 to {tmp}/{filename} (0 monitors)

4、新增 monitor。

  1. $ monmaptool --add a 10.1.0.1:6789 --add b 10.1.0.2:6789 --add c 10.1.0.3:6789 {tmp}/{filename}
  2. monmaptool: monmap file {tmp}/{filename}
  3. monmaptool: writing epoch 1 to {tmp}/{filename} (3 monitors)

5、检查 monmap 的新内容。

  1. $ monmaptool --print {tmp}/{filename}
  2. monmaptool: monmap file {tmp}/{filename}
  3. epoch 1
  4. fsid 224e376d-c5fe-4504-96bb-ea6332a19e61
  5. last_changed 2012-12-17 02:46:41.591248
  6. created 2012-12-17 02:46:41.591248
  7. 0: 10.1.0.1:6789/0 mon.a
  8. 1: 10.1.0.2:6789/0 mon.b
  9. 2: 10.1.0.3:6789/0 mon.c

此时,我们假定 monitor 已在新位置安装完毕。下面的步骤就是分发新的 monmap 并注入到各新 monitor 中。

1、停止所有的 monitor 。必须停止 mon 守护进程才能进行 monmap 注入。

2、注入 monmap。

  1. ceph-mon -i {mon-id} --inject-monmap {tmp}/{filename}

3、重启各 monitors 。