OS版本: Centos 7 ,Ceph版本: 10.2.3
一直在使用Ceph的H版本,最近切换到了J版,在部署完J版Ceph后启动OSD竟然报失败,部署过N^N次Ceph集群怎么能容忍部署失败呢!遂慢慢寻找问题。寻找问题的过程不表,最后原因确定为集群使用了一些SSD做了Journal,但是这些SSD的用户和用户组都是root,所以在默认使用ceph用户运行的OSD进程对这些盘没有读写权限,导致open journal失败,然后OSD自然就起不来了。正常情况下应该更改一下SSDs的归属组什么的就好了(比如chown ceph:ceph /dev/sdx)。但是我就喜欢root(不是个好习惯不推荐)玩一下该怎么办呢,J版Ceph服务使用systemctl进行起停,所以我们只需要在这里动点手脚就万事大吉了。具体做法就是修改一下文件
/usr/lib/systemd/system/ceph-osd@.service
将第12行中的
–setuser ceph –setgroup ceph
修改为
–setuser root –setgroup root.
修改后的该文件如下
1 [Unit]
2 Description=Ceph object storage daemon
3 After=network-online.target local-fs.target time-sync.target
4 Wants=network-online.target local-fs.target time-sync.target
5 PartOf=ceph-osd.target
6
7 [Service]
8 LimitNOFILE=1048576
9 LimitNPROC=1048576
10 EnvironmentFile=-/etc/sysconfig/ceph
11 Environment=CLUSTER=ceph
12 ExecStart=/usr/bin/ceph-osd -f --cluster ${CLUSTER} --id %i --setuser root --setgroup root
13 ExecStartPre=/usr/lib/ceph/ceph-osd-prestart.sh --cluster ${CLUSTER} --id %i
14 ExecReload=/bin/kill -HUP $MAINPID
15 ProtectHome=true
16 ProtectSystem=full
17 PrivateTmp=true
18 TasksMax=infinity
19 Restart=on-failure
20 StartLimitInterval=30min
21 StartLimitBurst=3
22
23 [Install]
24 WantedBy=ceph-osd.target
如此重新启动ceph-osd (systemctl restart ceph-osd@*)就会发现osd进程是使用root用户在运行了。