我最近建立了一个3节点的ceph集群。每个节点都有7个1tb的OSD硬盘。我总共有21 tb的存储空间用于ceph。
但是,当我运行一个工作负载以继续向其写入数据时 Ceph
,它变成了 Err
状态,不能再向其中写入任何数据。
输出 ceph -s
是:
cluster:
id: 06ed9d57-c68e-4899-91a6-d72125614a94
health: HEALTH_ERR
1 full osd(s)
4 nearfull osd(s)
7 pool(s) full
services:
mon: 1 daemons, quorum host3
mgr: admin(active), standbys: 06ed9d57-c68e-4899-91a6-d72125614a94
osd: 21 osds: 21 up, 21 in
rgw: 4 daemons active
data:
pools: 7 pools, 1748 pgs
objects: 2.03M objects, 7.34TiB
usage: 14.7TiB used, 4.37TiB / 19.1TiB avail
pgs: 1748 active+clean
根据我的理解,由于还有4.37 tb的空间, Ceph
它本身应该注意如何平衡工作负载,使每个osd不处于最佳状态 full
或者 nearfull
状态。但结果并不像我预期的那样, 1 full osd
以及 4 nearfull osd
出现了,健康 HEALTH_ERR
.
我不能和你一起去ceph hdfs
或者 s3cmd
所以问题来了:
1、对当前问题有何解释?
2、我怎样才能从中恢复过来?直接用ceph admin删除ceph节点上的数据,然后重新启动ceph?
2条答案
按热度按时间w46czmvw1#
三天没有得到答案,我取得了一些进展,让我在这里分享我的发现。
1、不同osd有尺寸差距是正常的。如果你把osd列为
ceph osd df
,你会发现不同的osd有不同的使用率。2.要从这个问题中恢复,这里的问题是指由于osd已满而导致的群集崩溃。按照下面的步骤,它主要来自redhat。
获取ceph群集运行状况信息
ceph health detail
. 这是不必要的,但你可以得到失败的osd的id。使用
ceph osd dump | grep full_ratio
以获取当前的完整比率。不要使用上面链接列出的语句,它已经过时了。输出可以是full_ratio 0.95 backfillfull_ratio 0.9 nearfull_ratio 0.85
将osd完整比率设置为稍高一点ceph osd set-full-ratio <ratio>
. 一般来说,我们把比率设为0.97现在,群集状态将从health\u err更改为health\u warn或health\u ok。删除一些可以发布的数据。
将osd完全比率更改回以前的比率。不可能是0.97,因为这有点冒险。
希望这篇文章对遇到同样问题的人有所帮助。有关osd配置的详细信息,请参阅ceph。
5us2dqdw2#
ceph需要空闲的磁盘空间来在不同的磁盘之间移动存储块(称为pgs)。由于这个空闲空间对底层功能非常关键,ceph将进入
HEALTH_WARN
一旦任何osd到达near_full
比率(通常为85%已满),并将通过输入HEALTH_ERR
一旦osd到达full_ratio
.但是,除非您的集群在所有osd之间完全平衡,否则很可能会有更多的可用容量,因为osd的利用率通常是不均衡的。要检查总体利用率和可用容量,可以运行
ceph osd df
.输出示例:
正如您在上面的输出中所看到的,使用的osd从56.98%(osd19)到82.92%(osd14)不等,这是一个显著的差异。
因为只有一个osd
full
,21个osd中只有4个是nearfull
集群中可能还有大量可用的存储空间,这意味着现在是执行重新平衡操作的时候了。这可以通过重新调整osd的权重来手动完成,也可以通过运行命令让ceph尽最大努力重新平衡ceph osd reweight-by-utilization
. 一旦重新平衡完成(即没有对象放错位置)ceph status
)您可以再次检查变化(使用ceph osd df
)如果需要,触发另一个再平衡。如果你在夜光或更新,你可以启用平衡器插件来处理osd自动倒带。