我设置了一个测试群集并按照documentation。
我使用命令ceph-deploy new node1
创建了群集。之后,ceph配置文件出现在当前目录中,其中包含有关主机名为node1
的节点上的监视器的信息。然后我在群集中添加了两个OSD。
所以现在我有一个带有1个显示器和2个OSD的集群。 ceph status
命令表示状态为HEALTH_OK
。
遵循所有相同的文档,我转到“扩展您的群集”部分,并添加了两个带有命令ceph-deploy mon add node2
和ceph-deploy mon add node3
的新监视器。现在我在仲裁和状态HEALTH_OK
中有三个监视器的群集,但是我有一点差异。 ceph.conf
仍然是一样的。它包含仅有一个监视器的旧信息。为什么ceph-deploy mon add {node-name}
命令没有更新配置文件?主要问题是为什么ceph status
显示有关3个监视器的新群集状态的正确信息,而ceph.conf
不包含此信息。真正的配置文件在哪里以及为什么ceph-deploy
知道它但我没有?
即使重启后也能正常工作。所有ceph守护进程都启动,读取错误的ceph.conf
(我用strace
检查了这一点)并忽略了这一点,使用新的配置工作正常。
最后一个问题。为什么ceph-deploy osd activate {ceph-node}:/path/to/directory
命令也没有更新配置文件?毕竟,如果我们现在有这么聪明的ceph.conf
,为什么我们需要ceph-deploy
文件?
答案 0 :(得分:0)
这里有多个问题。
1)对于要运行的所有节点,ceph.conf并不需要完全相同。例如。 OSD只需要他们关心的osd配置,MON只需要配置mon care(除非你在同一节点上运行所有内容也不建议)所以也许你的MON1有MON1 MON2有MON2 MON3有MON3
2)当MON被创建然后添加时,MON地图正在更新,因此MON本身已经知道哪个其他MON需要具有法定人数。所以MON并不指望ceph.conf获取仲裁信息,而是改变运行时配置。
3)ceph-deploy只是一个python脚本来为你准备和运行ceph命令。如果您阅读详细信息ceph-deploy使用例如ceph-disk zap准备激活。 一旦你准备好并激活,一旦它是ceph分区的格式,udev知道在哪里安装。然后systemd ceph-osd.server将在启动时激活ceph-osd。这就是为什么它在ceph.conf中根本不需要OSD信息的原因