问题现象: Ceph集群(filestore版本)使用一段时间,有时候会产生告警如下:

    cluster 79d9b290-3261-4607-9a16-858e78d776b5
     health HEALTH_WARN
            mon.node-1 store is getting too big! 15360 MB >= 15360 MB

主要原因: 1.一方面集群使用时间过久,mon有大量的数据更新,导致mon的数据库leveldb超过15G大小。 2.另一方面leveldb的数据存储机制本身结构化问题,当mon有大量的更新时,数据库文件确认处理的效率不高导致。 解决途径: node节点的leveldb数据库过大,超过默认的15G大小所致。可以采用数据库压缩的方法进行压缩,并同时修改该数据大小为20G(根据以往的经验,压缩只能暂时的解决告警,为了长远考虑,调整数据库总的可用空间大小)。 操作步骤 以node-1节点数据库too big为例:

  1. 切换mon节点(node-1),执行ceph –s 查看当前告警如下: mon.node-1 store is getting too big!
  2. 查看当前集群的容量大小,进行记录。 du -sh /var/lib/ceph/mon/ceph-node-1/
  3. 执行数据库压缩命令操作,该步骤会会费一段时间,等待执行完毕即可。 ceph tell mon.node-1 compact
  4. 再次执行步骤2,查看mon下的数据量大小,进行记录。
  5. 执行以下调整命令(确保node-1节点容量足够)。 ceph tell mon.node-1 injectargs "--mon-data-size-warn 21474836480"
  6. 查看配置生效,切换node-1节点,执行: ceph daemon ‬‬‬/var/run/ceph/ceph-mon.node-1.asok config show | grep mon_data_size_warn
  7. 添加node-1配置文件/etc/ceph/ceph.conf,保证即使node-1 mon重启依然生效。在global下边添加: mon_data_size_warn = 21474836480
  8. 重新执行ceph –s 进行检查,告警消失,变更完成。

变更后问题现象: 通过上述的操作,node-1节点的/var/log/ceph/ceph.log 中不再输出告警,但是ceph -s持续观察依然可以捕捉告警。

问题分析: get_health函数中调用,这里g_conf->mon_data_size_warn的配置信息获取,可能获取到所有mon节点的配置,这个是集群的配置信息,ceph -s 获取的是集群的信息,有可能读到其他mon的配置,所以ceph -s中可能还会告警。而针对/var/log/ceph/ceph.log 中不再输出信息,是因为该文件在某个mon节点下,动态修改后,输出到该文件里的内容需要读取本节点的mon的asok文件,而某个节点的mon.asok我们修改了,所以不再输出到该结点的日志中(生效)。

侧面解释: 在非mon节点执行ceph -s, 该节点没有mon.asok及mon进程,那么这时候执行ceph -s 调用get_health函数,调用的g_conf->mon_data_size_warn配置信息就可能来自所有的mon节点的其中一个。 验证: 我把所有mon节点,该配置统一进行修改,ceph -s 持续观察,不再输出告警信息 总结: 关于此参数,所有的mon节点都要进行修改配置。