1. 介紹
一個集群可以只有一個 monitor,我們推薦生產(chǎn)環(huán)境至少部署 3 個。 Ceph 使用 Paxos 算法的一個變種對各種 map 暴浦、以及其它對集群來說至關(guān)重要的信息達成共識捷枯。建議(但不是強制)部署奇數(shù)個 monitor 。Ceph 需要 mon 中的大多數(shù)在運行并能夠互相通信,比如單個 mon奈偏,或 2 個中的 2 個坞嘀,3 個中的 2 個,4 個中的 3 個等霎苗。初始部署時姆吭,建議部署 3 個 monitor。后續(xù)如果要增加唁盏,請一次增加 2 個内狸。
2. 增加 Monitor(手動)
- 在目標節(jié)點上,新建 mon 的默認目錄厘擂。
{mon-id}
一般取為節(jié)點的 hostname 昆淡。
ssh {new-mon-host}
sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
- 創(chuàng)建一個臨時目錄(和第 1 步中的目錄不同,添加 mon 完畢后需要刪除該臨時目錄)刽严,來存放新增 mon 所需的各種文件昂灵。
mkdir {tmp}
- 獲取 mon 的 keyring 文件,保存在臨時目錄下舞萄。
ceph auth get mon. -o {tmp}/{key-filename}
- 獲取集群的 mon map 并保存到臨時目錄下眨补。
ceph mon getmap -o {tmp}/{map-filename}
- 格式化在第 1 步中建立的 mon 數(shù)據(jù)目錄。需要指定 mon map 文件的路徑(獲取法定人數(shù)的信息和集群的
fsid
)和 keyring 文件的路徑倒脓。
sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
- 啟動節(jié)點上的 mon 進程撑螺,它會自動加入集群。守護進程需要知道綁定到哪個 IP 地址崎弃,可以通過
--public-addr {ip:port}
選擇指定甘晤,或在ceph.conf
文件中進行配置mon addr
。
ceph-mon -i {mon-id} --public-addr {ip:port}
3. 增加 Monitor( ceph-deploy )
還可以通過 ceph-deploy
工具很方便地增加 MON饲做。
- 登入
ceph-deploy
工具所在的 Ceph admin 節(jié)點线婚,進入工作目錄。
ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
- 執(zhí)行下列命令盆均,新增 Monitor:
ceph-deploy mon create {host-name [host-name]...}
注意: 在某一主機上新增 Mon 時塞弊,如果它不是由 ceph-deploy new
命令所定義的,那就必須把 public network
加入 ceph.conf
配置文件泪姨。
4. 刪除 Monitor(手動)
當你想要刪除一個 mon 時游沿,需要考慮刪除后剩余的 mon 個數(shù)是否能夠達到法定人數(shù)。
- 停止 mon 進程驴娃。
stop ceph-mon id={mon-id}
- 從集群中刪除 monitor奏候。
ceph mon remove {mon-id}
- 從 ceph.conf 中移除 mon 的入口部分(如果有)。
5. 刪除 Monitor(從不健康的集群中)
本小節(jié)介紹了如何從一個不健康的集群(比如集群中的 monitor 無法達成法定人數(shù))中刪除 ceph-mon
守護進程唇敞。
- 停止集群中所有的
ceph-mon
守護進程蔗草。
ssh {mon-host}
service ceph stop mon || stop ceph-mon-all
# and repeat for all mons
- 確認存活的 mon 并登錄該節(jié)點咒彤。
ssh {mon-host}
- 提取 mon map。
ceph-mon -i {mon-id} --extract-monmap {map-path}
# in most cases, that's
ceph-mon -i `hostname` --extract-monmap /tmp/monmap
- 刪除未存活或有問題的的 monitor咒精。比如镶柱,有 3 個 monitors,
mon.a
模叙、mon.b
和mon.c
歇拆,現(xiàn)在僅有mon.a
存活,執(zhí)行下列步驟:
monmaptool {map-path} --rm {mon-id}
# for example,
monmaptool /tmp/monmap --rm b
monmaptool /tmp/monmap --rm c
- 向存活的 monitor(s) 注入修改后的 mon map范咨。比如故觅,把 mon map 注入
mon.a
,執(zhí)行下列步驟:
ceph-mon -i {mon-id} --inject-monmap {map-path}
# for example,
ceph-mon -i a --inject-monmap /tmp/monmap
啟動存活的 monitor渠啊。
確認 monitor 是否達到法定人數(shù)(
ceph -s
)输吏。你可能需要把已刪除的 monitor 的數(shù)據(jù)目錄
/var/lib/ceph/mon
歸檔到一個安全的位置√骝龋或者贯溅,如果你確定剩下的 monitor 是健康的且數(shù)量足夠,也可以直接刪除數(shù)據(jù)目錄躲查。
6. 刪除 Monitor( ceph-deploy )
- 登入
ceph-deploy
工具所在的 Ceph admin 節(jié)點它浅,進入工作目錄。
ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
- 如果你想刪除集群中的某個 Mon 镣煮,可以用
destroy
選項姐霍。
ceph-deploy mon destroy {host-name [host-name]...}
注意: 確保你刪除某個 Mon 后,其余 Mon 仍能達成一致怎静。如果不可能邮弹,刪除它之前可能需要先增加一個黔衡。