• 10. 修改 MON IP
    • 10.1 修改 MON IP(正确的方法)
    • 10.2 修改 MON IP(不太友好的方法)

    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 。