本来头一天晚上还是正常的ceph存储集群,经历了一个不明真相的夜晚之后启动机器发现集群的健康检查状态已经是HEALTH_ERR了:
[root@node1 ~]# ceph -s
cluster 056c396d-639c-4312-9ea0-794c92e57329
health HEALTH_ERR
38 pgs are stuck inactive for more than 300 seconds
64 pgs degraded
38 pgs stuck inactive
26 pgs stuck unclean
64 pgs undersized
monmap e1: 3 mons at {node1=192.168.4.1:6789/0,node2=192.168.4.2:6789/0,node3=192.168.4.3:6789/0}
election epoch 16, quorum 0,1,2 node1,node2,node3
osdmap e53: 6 osds: 2 up, 2 in; 64 remapped pgs
flags sortbitwise
pgmap v122: 64 pgs, 1 pools, 0 bytes data, 0 objects
69636 kB used, 20389 MB / 20457 MB avail
38 undersized+degraded+peered
26 active+undersized+degraded
于是查看了集群内的机器中被使用于集群中的硬盘的所有者和所属组:
[root@node1 ~]# for host in node{1..3}; do ssh $host ls -ld /dev/vdb?; done
brw-rw----. 1 root disk 252, 17 6月 21 08:47 /dev/vdb1
brw-rw----. 1 root disk 252, 18 6月 21 08:47 /dev/vdb2
brw-rw----. 1 root disk 252, 17 6月 21 08:47 /dev/vdb1
brw-rw----. 1 root disk 252, 18 6月 21 08:47 /dev/vdb2
brw-rw----. 1 root disk 252, 17 6月 21 09:23 /dev/vdb1
brw-rw----. 1 root disk 252, 18 6月 21 09:23 /dev/vdb2
果然,是硬盘的所有者和所属组出了问题,虽然设置了所有者和所属组,但是在机器重启之后会变回原来的所有者和所属组。
先用命令修改一下集群的所有硬盘:
[root@node1 ~]# for host in node{1..3}; do ssh $host chown ceph.ceph /dev/vdb?; done
[root@node1 ~]# for host in node{1..3}; do ssh $host ls -ld /dev/vdb?; done
brw-rw----. 1 ceph ceph 252, 17 6月 21 08:47 /dev/vdb1
brw-rw----. 1 ceph ceph 252, 18 6月 21 08:47 /dev/vdb2
brw-rw----. 1 ceph ceph 252, 17 6月 21 08:47 /dev/vdb1
brw-rw----. 1 ceph ceph 252, 18 6月 21 08:47 /dev/vdb2
brw-rw----. 1 ceph ceph 252, 17 6月 21 09:23 /dev/vdb1
brw-rw----. 1 ceph ceph 252, 18 6月 21 09:23 /dev/vdb2
添加配置文件,让硬盘的所有者和所属组在机器重启后不会恢复成默认:
[root@node1 ~]# vim /etc/udev/rules.d/90-mydisk.rules
ACTION=="add", KERNEL=="vdb[12]", OWNER="ceph", GROUP="ceph"
[root@node2~]# vim /etc/udev/rules.d/90-mydisk.rules
ACTION=="add", KERNEL=="vdb[12]", OWNER="ceph", GROUP="ceph"
[root@node3~]# vim /etc/udev/rules.d/90-mydisk.rules
ACTION=="add", KERNEL=="vdb[12]", OWNER="ceph", GROUP="ceph"
重启ceph:
[root@node1 ~]# for host in node{1..3}; do ssh $host systemctl restart ceph\*.service ceph\*.target ; done
再查看健康检查:
[root@node1 ~]# ceph -s
cluster 056c396d-639c-4312-9ea0-794c92e57329
health HEALTH_OK
monmap e1: 3 mons at {node1=192.168.4.1:6789/0,node2=192.168.4.2:6789/0,node3=192.168.4.3:6789/0}
election epoch 22, quorum 0,1,2 node1,node2,node3
osdmap e61: 6 osds: 6 up, 6 in
flags sortbitwise
pgmap v137: 64 pgs, 1 pools, 0 bytes data, 0 objects
205 MB used, 61168 MB / 61373 MB avail
64 active+clean
问题解决。