资料(传送门)[http://bbs.ceph.org.cn/question/363]
#故障之后的现象
[root@ceph-osd-1 ~]# ceph -s
cluster 8ade9410-0ad8-4dbb-bd56-e1bf2f947009
health HEALTH_ERR
1 full osd(s)
2 near full osd(s)
monmap e1: 1 mons at {ceph-osd-1=10.10.200.163:6789/0}, election epoch 1, quorum 0 ceph-osd-1
osdmap e1514: 11 osds: 11 up, 11 in
flags full
pgmap v177918: 1628 pgs, 6 pools, 2548 GB data, 632 kobjects
7708 GB used, 4196 GB / 11905 GB avail
1625 active+clean
3 active+clean+scrubbing+deep
[root@ceph-osd-1 ~]# ceph health
HEALTH_ERR 1 full osd(s); 2 near full osd(s)
可以看到其中一个osd磁盘已经写满,另外还有两个osd已经接近爆满。 查看详细的健康情况
[root@ceph-osd-1 ~]# ceph health detail
...
recovery 7482/129081 objects degraded (5.796%)
osd.0 is full at 95%
osd.2 is near full at 93%
osd.1 is near full at 93%
这里能看到具体是哪个磁盘接近饱和。
#扩容解决 安装好ceph,配置好验证之后,进行新的osd的安装
[root@ceph-osd-1 ~]# ceph-deploy osd prepare 192.168.1.1:/osd3
[root@ceph-osd-1 ~]# ceph-deploy osd activate 192.168.1.1:/osd3
详细的增加osd的步骤可以参考这里:[传送门] 增加之后需要确认你的新osd是否在故障的数据区域 #更改数据区域 查看数据区域
[root@ceph-osd-1 ~]# ceph osd tree
-21 6.00000 root ssd
-11 3.00000 datacenter guangdong
-2 2.85999 host f207
1 0.25999 osd.1 up 1.00000 1.00000
2 0.25999 osd.2 up 1.00000 1.00000
3 0.25999 osd.3 up 1.00000 1.00000
4 0.25999 osd.4 up 1.00000 1.00000
5 0.25999 osd.5 up 1.00000 1.00000
6 0.25999 osd.6 up 1.00000 1.00000
7 0.25999 osd.7 up 1.00000 1.00000
8 0.25999 osd.8 up 1.00000 1.00000
9 0.25999 osd.9 up 1.00000 1.00000
-3 2.85999 host f208
11 0.25999 osd.11 up 1.00000 1.00000
12 0.25999 osd.12 up 1.00000 1.00000
13 0.25999 osd.13 up 1.00000 1.00000
14 0.25999 osd.14 up 1.00000 1.00000
15 0.25999 osd.15 up 1.00000 1.00000
16 0.25999 osd.16 up 1.00000 1.00000
17 0.25999 osd.17 up 1.00000 1.00000
18 0.25999 osd.18 up 1.00000 1.00000
19 0.25999 osd.19 up 1.00000 1.00000
-4 2.85999 host f209
22 0.25999 osd.22 up 1.00000 1.00000
23 0.25999 osd.23 up 1.00000 1.00000
24 0.25999 osd.24 up 1.00000 1.00000
25 0.25999 osd.25 up 1.00000 1.00000
26 0.25999 osd.26 up 1.00000 1.00000
27 0.25999 osd.27 up 1.00000 1.00000
28 0.25999 osd.28 up 1.00000 1.00000
29 0.25999 osd.29 up 1.00000 1.00000
30 0.25999 osd.30 up 1.00000 1.00000
-5 2.85999 host f214
74 1.81000 osd.74 up 1.00000 1.00000
75 1.81000 osd.75 up 1.00000 1.00000
76 1.81000 osd.76 up 1.00000 1.00000
77 1.81000 osd.77 up 1.00000 1.00000
78 1.81000 osd.78 up 1.00000 1.00000
79 1.81000 osd.79 up 1.00000 1.00000
80 1.81000 osd.80 up 1.00000 1.00000
81 1.81000 osd.81 up 1.00000 1.00000
82 1.81000 osd.82 up 1.00000 1.00000
83 1.81000 osd.83 up 1.00000 1.00000
这里能看到datacenter guangdong,可以在广东部署的数据区域情况 ####导出osd数据区域划分文件:
[root@ceph-osd-1 ~]# ceph osd getcrushmap -o crush.dump
####转意文件,变成人工可读的
[root@ceph-osd-1 ~]# crushtool -d crush.dump -o crush.map
####修改crush.map
...
#调整host所属的数据中心
#item这里修改,加上新加的host,注意host的磁盘权重和磁盘数量,移动item的话新的加完一定把老的删除了,尽量不要让一个机器同属于不同的数据中心
datacenter guangdong{
id -11 # do not change unnecessarily
# weight 11.440
alg straw
hash 0 # rjenkins1
item f207 weight 2.860
item f208 weight 2.860
item f209 weight 2.860
item f214 weight 2.860
}
...
#跳转pool的副本集数量和数据区域划分
rule svnrbd {
ruleset 1
type replicated
min_size 2
max_size 8
step take guangdong
step chooseleaf firstn 2 type host
step emit
step take beijing
step chooseleaf firstn -2 type host
step emit
}
...
####map文件压缩并导入
[root@ceph-osd-1 ~]# crushtool -c crush.map -o crush.tmp
[root@ceph-osd-1 ~]# ceph osd setcrushmap -i crush.tmp
完成之后ceph就开始自行进行数据同步了。 过一段时间就恢复了。
#故障影响 故障会导致rbd写入直接报错,严重的可以影响同一数据区域下的所有的pool 对rdb操作之后报错如下
[root@p215 /var/log]# rbd lock rm data/f2 p215 client.114319
2016-06-05 16:28:58.275592 7f896b784880 0 client.132880.objecter FULL, paused modify 0x2c3e230 tid 2
受影响的文件操作会导致程序处于无限等待的状态,并且进程不可中断,不可响应中断信号。
###将磁盘使用率调高的办法
ceph tell mon.* injectargs --mon_osd_nearfull_ratio 0.9
ceph tell mon.* injectargs --mon_osd_full_ratio 0.95
ceph pg set_full_ratio 0.98
ceph daemon mon.0 config show|grep ratio
#osd的同理
追加一个自动平衡调节磁盘权重参数的命令
ceph osd reweight-by-utilization
后续需要分析:导致这个问题的原因是什么?怎么合理划分数据区域?怎么计算可用容量?