生产环境遇到的ceph目录问题
写在前面
课程本周将完全更新完毕,新课程进阶版将开启高手精讲,筹备中,还是希望大家支持一下,课程滞销,帮帮松鼠哥吧~
https://appsszrugt78552.h5.xiaoeknow.com/p/course/ecourse/course_2eIyBM8nEsMXhMkVv1yRF62AlyD
本篇的问题以前就遇到过,一直没解决,最近终于摸索出来了。
问题
ceph服务的目录,比如log目录和data目录,通常默认都是使用/var
,某些情况下,操作系统的/var
给的空间不是很大,很容易就被打满,尤其是开启了osd的日志,用完后又忘记关掉了,超大的日志很容易就将目录打满,导致osd异常或者日志无法正常记录:
1 | root@debian:~# df -h /var |
另外,mon的data目录就在/var/lib/ceph/mon
下,/var
目录被写满的话,mon就起不来了。
最关键的是,即便ceph允许通过参数指定log的目录与data目录,但是实测发现,无论怎么修改,这个指定的路径就是无法生效:
1 | root@debian:~# ceph daemon /run/ceph/ceph-osd.1.asok config show|grep 'log_file"' |
通过代码跟踪,发现log_file
参数是用来指定服务的日志路径的,它的格式为:
1 | /var/log/ceph/$cluster-$name.log |
即不管对于osd还是mon还是rgw,它们打印日志的路径都是可以通过这个参数的形式进行指定,另外mon的data目录是通过mon_data
来指定。
但是实测发现,修改这几个参数是无效的,修改RGW的日志路径发现它直接就不打日志了。
解决
一开始以为是ceph的问题,是不是log_file
需要配合其他参数才能生效呢?查了一圈,没有相关文章,跟踪了一下代码,也没有发现异常,难道大家从来没有遇到需要修改目录的需求吗?=.=
在一番研究后发现,这个问题跟ceph关系不是很大,主要是systemd
的限制,这里以mon为例,默认情况下mon的data目录为/var/lib/ceph/mon/$cluster-$id
,因为mon的目录是存放它的rocksdb的,当集群长时间运行,mon的rocksdb可能会占用非常大的空间,而如果/var
目录被打满了,Mon就无法正常启动。
这种情况下,只能对/var
目录进行扩容,这还有个前提,系统盘使用了lvm,否则连扩容的机会都没有=.=,因此就有了修改目录的需求,接下来对mon的目录进行修改。
首先,将mon进程停掉后,将它的目录拷贝到/home
1 | root@debian:~# systemctl stop ceph-mon@`hostname`.service |
移动完成后,发现所有者和所属组都是ceph,权限没问题
1 | root@debian:/home/ceph-debian# ll |
接下来修改ceph.conf
,增加参数
1 | root@debian:~# grep 'mon_data' /etc/ceph/ceph.conf |
如果这个时候直接拉起mon服务,mon肯定是起不来的,同理,当我们在ceph.conf
中修改了ceph其他服务的log目录,日志也是会失败的,那么怎么解决呢?
在ceph服务的systemd的service文件中,有个关键的参数ProtectHome
,就是它限制了这个服务进程使用其他目录
1 | root@debian:~# systemctl cat ceph-mon@`hostname`.service |
怎么发现的呢?修改配置后,松鼠哥使用命令行运行/usr/bin/ceph-mon -f --cluster ceph --id debian --setuser ceph --setgroup ceph
发现目录是可以被修改的,而使用systemctl就不行,刚开始以为是权限问题,排查一番后权限确认是没有问题的,因此逐个排查,发现就是ProtectHome=true
这个问题。
接下来我们把这个参数改为false,然后reload一下,再拉起mon
1 | root@debian:~# cd /etc/systemd/system/ |
检查它的目录,确实已经被修改了
1 | root@debian:/etc/systemd/system# ls -l /var/lib/ceph/mon/ |
修改日志目录同理,通过将ProtectHome
修改为false,就能够改变它的目录,大家可以试试。
总结
根据调查,当服务设置了ProtectHome=true
,当进程起来后, 部份目录对进程是不可见的,例如home目录,因此即便配置了其他的目录,ceph进程也无法正常使用,所以就达不到更换目录的目的,为什么要限制进程对部份目录的访问呢?可能是为了保护目录,规范程序的运行吧~
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2024/06/14/修改ceph的目录/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!