我最近建立了一个3节点的Ceph集群。每个节点都有七个用于OSD的1TB HDD。总共,我有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
。
我再也无法用hdfs
或s3cmd
访问Ceph,所以问题来了:1,关于当前问题有什么解释吗?2,如何从中恢复?直接使用ceph-admin删除Ceph节点上的数据,然后重新启动Ceph吗?
[3天没有得到答案,我取得了一些进展,让我在这里分享我的发现。
1,不同的OSD具有尺寸间隙是正常的。如果用ceph osd df
列出OSD,则会发现不同的OSD具有不同的使用率。
2,要从此问题中恢复过来,这里的问题是指由于OSD已满而导致群集崩溃。请按照以下步骤操作,主要是从redhat开始。
ceph health detail
获取ceph集群的健康信息。不必要,但是您可以获取失败的OSD的ID。ceph osd dump | grep full_ratio
获得当前的全比率。不要使用上面链接中列出的语句,它已过时。输出可以像full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
ceph osd set-full-ratio <ratio>
稍高一些。通常,我们将比率设置为0.97希望此线程对遇到相同问题的人有所帮助。有关OSD配置的详细信息,请参见ceph。