Ceph 从H版升级到J版经验总结

前不久Ceph推出了最新的稳定版本Jewel。由于工作的需要,对J版的功能,性能要进行测试与验证。现有测试环境中的ceph集群是H版本,因此对它要进行升级。升级过程中遇到了较多的问题,现把这些问题以及自己的解决方式记录下来,给需要的朋友做个参考。其中肯定会有些不准确的地方或者自己理解有误的地方,欢迎大家指出来^_^

本次升级,主要是把有8台物理机的ceph集群,从H版(0.94.7)升级到J版(10.2.2),主要参考了官方升级文档  http://docs.ceph.com/docs/master/release-notes/#v10.2.2-jewel。由于物理机无法连接外网,采用了同事搭建的yum源。

1.更新各机器上的yum配置文件,将ceph-deploy配置文件中,cephrepo修改成jewel版本的yum源。
2.利用ceph-deploy install命令,更新各台机器上的安装包。在执行该步时,建议先将要更新的机器上的服务停掉。之前自己没有停服,直接把各个机器上的安装包更新了,走了不少弯路。
3.在更新某一台物理机时,如果之前部署过calamira服务,建议先将其停了。这个可能会引起后续无法启动服务的问题,但也不是肯定会引起,在实践中,有两台没停,服务也起来了。
4.如果在更新前没有停止该物理机的服务,此时采用systemctl stop命令来停服,会发现服务无法停止,用journalctl -xe命令,一般会出现无权限的问题,此时只能用kill命令将该服务杀了。在kill之后,采用systemctl start命令,此时还是无法启动服务,依然会出现权限问题,这时候,就要按照官方文档中所写的,在ceph.conf文件中添加如下配置信息:
setuser match path = /var/lib/ceph/$type/$cluster-$id
之后就可以正常启动服务了。
5.在重启服务时,不要因为无法停止服务而去重启物理机。一旦重启,服务虽然都是down的状态,但是各个osd都会出现没有mount的状态。此时就需要把osd的各个目录挂载到盘上去了。如果之前没有记下目录同磁盘的对应关系,只能进行尝试了。在挂载后,通过systemctl start命令来启动osd,如果失败,利用journal -xe,日志中会显示该盘到底属于哪个osd的记录,按照其来重新挂载就可以了。在进行挂载时,使用类似下面的命令:
mount -o defaults,_netdev /dev/sdc1 /var/lib/ceph/osd/ceph20。
一开始没加参数,可能会出错。
6.重启过程中,在重启rgw时,会出现问题。使用systemctl start ceph-radosgw.target时,显示不存在/var/lib/ceph/$type/$cluster-$id,也就是我们在配置文件中添加的这一条有问题。将该配置删除后,rgw可以启动,但是启动的时候,都是在7480端口监听,而不是按照配置文件中的80端口。使用/usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway来启动时,则会按照配置文件中的配置来启动rgw。但是奇怪的是,在将新启动的rgw进程kill后,使用systemctl启动rgw时,其就会按照配置文件中的监听80端口。
7.在服务都重启后,尝试将setuser match path = /var/lib/ceph/$type/$cluster-$id从配置文件中去掉,服务也能正常停止与启动。可能是启动过一次后就不需要改配置了。
8.在升级完毕后,ceph -s会出现告警:crush map has legacy tunables (require bobtail, min is firefly),输入
ceph osd crush tunables optimal就可以了。

你可能感兴趣的:(Ceph)