Ceph集群添加ceph-mon¶
在 安装 ceph-mon 我们已经安装部署了1个 ceph-mon
。虽然这样也能工作,Ceph monitor可以使用Pasos算法来建立一致性映射以及集群的其他关键信息。但是,对应稳定的集群,需要一个奇数数量的monitor,所以,推荐至少3个 ceph-mon
,为了在出现更多失效能够继续服务,可以部署更多 monitor ,如5个 ceph-mon
。
备注
虽然 ceph-mon
是非常轻量级的监控服务,可以运行在OSD相同的服务器上。但是,对于生产集群,特别是高负载集群,建议将 ceph-mon
和 ceph-osd
分开服务器运行。这是因为高负载下,有可能 ceph-osd
压力过大影响 ceph-mon
的稳定性(响应延迟),从而导致系统误判而出现雪崩。
部署monitor¶
登陆需要部署monitor的服务器,例如,我这里部署到
z-b-data-2
服务器上,执行以下命令创建mon默认目录:mon_id="z-b-data-2" sudo mkdir /var/lib/ceph/mon/ceph-${mon_id}
将 192.168.6.204 (
z-b-data-1
) 管理密钥复制到需要部署ceph-mon
的配置目录下:scp 192.168.6.204:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ scp 192.168.6.204:/etc/ceph/ceph.conf /etc/ceph/
在
ceph-mon
的主机z-b-data-1
上执行以下命令获取monitors的keyring(需要读取本机的/etc/ceph/ceph.client.admin.keyring
认证来获取ceph-mon
的keyring):sudo ceph auth get mon. -o /tmp/ceph.mon.keyring
显示输出:
exported keyring for mon.
此时获取到的monitor key存储在 /tmp/ceph.mon.keyring
,这个key文件实际上就是初始服务器 z-b-data-1
在 /var/lib/ceph/mon/ceph-z-b-data-1/keyring
内容。
获取monitor map:
sudo ceph mon getmap -o /tmp/monmap
但是需要注意,这里从集群中获得的 monmap
只包含了第一台服务器 z-b-data-1
,我们还需要添加增加的 z-b-data-2
和 z-b-data-3
monmaptool --add z-b-data-2 192.168.6.205 --fsid 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17 /tmp/monmap
monmaptool --add z-b-data-3 192.168.6.206 --fsid 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17 /tmp/monmap
现在我们的 /tmp/monmap
是最新的最全的monmap,但是我们在 z-b-data-1
上没有添加过节点2和节点3的 monmap ,我们需要把这个 /tmp/monmap
插入到 z-b-data-1
的监控目录中。所以把这个最新 /tmp/monmap
复制到 z-b-data-1
上,再执行以下命令更新:
sudo ceph-mon -i z-b-data-1 --inject-monmap /tmp/monmap
备注
注意,在更新 z-b-data-1
的 monmap
之前,需要先停止 ceph-mon
sudo systemctl stop ceph-mon@z-b-data-1
否则会报错无法拿到db的锁:
2021-12-02T22:37:23.236+0800 7f8227f17540 -1 rocksdb: IO error: While lock file: /var/lib/ceph/mon/ceph-z-b-data-1/store.db/LOCK: Resource temporarily unavailable
2021-12-02T22:37:23.236+0800 7f8227f17540 -1 error opening mon data directory at '/var/lib/ceph/mon/ceph-z-b-data-1': (22) Invalid argument
停止 ceph-mon
之后再执行:
sudo ceph-mon -i z-b-data-1 --inject-monmap /tmp/monmap
我发现导入命令似乎应该使用 ceph
用户身份执行,否则会把文件属主设置成root,需要执行 chown -R ceph:ceph /var/lib/ceph/mon/ceph-z-b-data-1
来修复。
就不再报错。等导入更新了 monmap
之后,再次启动服务:
sudo systemctl start ceph-mon@z-b-data-1
警告
当配置了3个 ceph-mon
的 monmap
,如果只启动 z-b-data-1
而没有启动其他节点的 ceph-mon
,则会发现虽然 z-b-data-
的 ceph-mon
启动 ( systemctl status ceph-mon@z-b-data-1
正常 ),但是 /var/log/ceph/ceph-mon.z-b-data-1.log
日志报错:
2021-12-02T23:02:15.980+0800 7f16d5c02700 1 mon.z-b-data-1@0(probing) e3 handle_auth_request failed to assign global_id
2021-12-02T23:02:16.184+0800 7f16d5c02700 1 mon.z-b-data-1@0(probing) e3 handle_auth_request failed to assign global_id
此时:
ceph -s
无响应
不过,只要再启动 z-b-data-2
上的 ceph-mon@z-b-data-2
,则立即恢复正常响应。
准备monitor的数据目录,这里必须指定monitor map路径,这样才能够获取监控的quorum信息以及
fsid
,而且还需要提供 monitor keyring的路径:sudo ceph-mon --mkfs -i z-b-data-2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
备注
仔细对比一下,就可以看出第二个以及今后节点的 ceph-mon
部署方法和 安装 ceph-mon 差不多,只是证书是从第一台服务器导入过来不需要重新生成。
启动服务:
sudo systemctl start ceph-mon@z-b-data-2 sudo systemctl enable ceph-mon@z-b-data-2
备注
如果启动失败,可以尝试通过终端执行命令 ceph-mon -f --cluster ceph --id z-b-data-2 --setuser ceph --setgroup ceph
查看终端输出信息。我遇到失败的原因是 /var/lib/ceph/mon/z-b-data-2
目录权限错误,可以根据提示信息检查
部署第三个 ceph-mon
节点¶
有了上述部署 z-b-data-2
的 ceph-mon
的经验,我们现在来快速完成第三个 z-b-data-3
的 ceph-mon
部署
将 192.168.6.204 (
z-b-data-1
) 管理密钥复制到z-b-data-3
部署 ceph-mon 的配置目录下:scp 192.168.6.204:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ scp 192.168.6.204:/etc/ceph/ceph.conf /etc/ceph/
在
z-b-data-3
上执行以下命令获取ceph-mon
的keyring:sudo ceph auth get mon. -o /tmp/ceph.mon.keyring
获取 monitor map:
sudo ceph mon getmap -o /tmp/monmap
备注
注意,这里获得的 monmap
已经包含了3台主机的 monitor map ,所以不需要再修订
准备monitor数据目录:
sudo ceph-mon --mkfs -i z-b-data-3 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
修订 ceph monitor数据目录权限:
sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-z-b-data-3
启动服务:
sudo systemctl start ceph-mon@z-b-data-3 sudo systemctl enable ceph-mon@z-b-data-3
最小化配置 ceph-mon
¶
参考 Ceph Monitor Config Reference#Minimum Configuration 修订 /etc/ceph/ceph.conf
:
1[global]
2fsid = 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17
3mon initial members = z-b-data-1
4mon host = 192.168.6.204
5public network = 192.168.6.0/24
6auth cluster required = cephx
7auth service required = cephx
8auth client required = cephx
9osd journal size = 1024
10osd pool default size = 3
11osd pool default min size = 2
12osd pool default pg num = 128
13osd pool default pgp num = 128
14osd crush chooseleaf type = 1
15
16[mon.z-b-data-1]
17host = z-b-data-1
18mon addr = 192.168.6.204:6789
19
20[mon.z-b-data-2]
21host = z-b-data-2
22mon addr = 192.168.6.205:6789
23
24[mon.z-b-data-3]
25host = z-b-data-3
26mon addr = 192.168.6.206:6789
27
28[mds.z-b-data-1]
29host = 192.168.6.204
30
31[mds.z-b-data-2]
32host = 192.168.6.205
33
34[mds.z-b-data-3]
35host = 192.168.6.206
添加的 [mon.<id>]
段落可选,我实践下来似乎不配置也没有影响运行,待后续运维观察。
检查¶
完成部署
ceph-mon
到z-b-data-1
/z-b-data-2
/z-b-data-3
之后,集群就具备了3个监控观察 Ceph Dashboard 管控面板 可以看到启动了3个 mon :