一个集群可以只有一个 monitor,我们推荐生产环境至少部署 3 个。 Ceph 使用 Paxos 算法的一个变种对各种 map 、以及其它对集群来说至关重要的信息达成共识。建议(但不是强制)部署奇数个 monitor 。Ceph 需要 mon 中的大多数在运行并能够互相通信,比如单个 mon,或 2 个中的 2 个,3 个中的 2 个,4 个中的 3 个等。初始部署时,建议部署 3 个 monitor。后续如果要增加,请一次增加 2 个。
{mon-id}
一般取为节点的 hostname 。ssh {new-mon-host}
sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
mkdir {tmp}
ceph auth get mon. -o {tmp}/{key-filename}
ceph mon getmap -o {tmp}/{map-filename}
fsid
)和 keyring 文件的路径。sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
--public-addr {ip:port}
选择指定,或在 ceph.conf
文件中进行配置 mon addr
。ceph-mon -i {mon-id} --public-addr {ip:port}
还可以通过 ceph-deploy
工具很方便地增加 MON。
ceph-deploy
工具所在的 Ceph admin 节点,进入工作目录。ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
ceph-deploy mon create {host-name [host-name]...}
注意: 在某一主机上新增 Mon 时,如果它不是由 ceph-deploy new
命令所定义的,那就必须把 public network
加入 ceph.conf
配置文件。
当你想要删除一个 mon 时,需要考虑删除后剩余的 mon 个数是否能够达到法定人数。
stop ceph-mon id={mon-id}
ceph mon remove {mon-id}
本小节介绍了如何从一个不健康的集群(比如集群中的 monitor 无法达成法定人数)中删除 ceph-mon
守护进程。
ceph-mon
守护进程。ssh {mon-host}
service ceph stop mon || stop ceph-mon-all
# and repeat for all mons
ssh {mon-host}
ceph-mon -i {mon-id} --extract-monmap {map-path}
# in most cases, that's
ceph-mon -i `hostname` --extract-monmap /tmp/monmap
mon.a
、mon.b
和 mon.c
,现在仅有 mon.a
存活,执行下列步骤:monmaptool {map-path} --rm {mon-id}
# for example,
monmaptool /tmp/monmap --rm b
monmaptool /tmp/monmap --rm c
mon.a
,执行下列步骤:ceph-mon -i {mon-id} --inject-monmap {map-path}
# for example,
ceph-mon -i a --inject-monmap /tmp/monmap
ceph -s
)。/var/lib/ceph/mon
归档到一个安全的位置。或者,如果你确定剩下的 monitor 是健康的且数量足够,也可以直接删除数据目录。ceph-deploy
工具所在的 Ceph admin 节点,进入工作目录。ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
destroy
选项。ceph-deploy mon destroy {host-name [host-name]...}
注意: 确保你删除某个 Mon 后,其余 Mon 仍能达成一致。如果不可能,删除它之前可能需要先增加一个。