Ceph集群添加ceph-mon

安装 ceph-mon 我们已经安装部署了1个 ceph-mon 。虽然这样也能工作,Ceph monitor可以使用Pasos算法来建立一致性映射以及集群的其他关键信息。但是,对应稳定的集群,需要一个奇数数量的monitor,所以,推荐至少3个 ceph-mon ,为了在出现更多失效能够继续服务,可以部署更多 monitor ,如5个 ceph-mon

备注

虽然 ceph-mon 是非常轻量级的监控服务,可以运行在OSD相同的服务器上。但是,对于生产集群,特别是高负载集群,建议将 ceph-monceph-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-2z-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-1monmap 之前,需要先停止 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-monmonmap ,如果只启动 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-2ceph-mon 的经验,我们现在来快速完成第三个 z-b-data-3ceph-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 :

/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-monz-b-data-1 / z-b-data-2 / z-b-data-3 之后,集群就具备了3个监控

  • 观察 Ceph Dashboard 管控面板 可以看到启动了3个 mon :

../../../_images/ceph-mon_3.png

参考