许久未更新,赶紧更新一篇干货
大规模集群建pool遇到的坑
写在前面
松鼠哥的ceph专业课程上线啦!
面向新手同学,从0实战,全面入门ceph安装部署与运维,有需要的同学赶紧联系松鼠哥订购吧:
最近各种事情比较忙,有段时间没更新了,忙里偷闲赶紧更一篇干货
最近接手了一个18PB的集群,算是目前玩的最大的单集群了,我的任务主要是对原始集群进行配置和调优,针对问题进行排查解决
问题描述
此前的集群都是10PB左右,进行配置和优化参数的下发都是脚本自动化做的,本次集群在跑脚本的时候,在创建存储池的时候遇到了问题
首先在创建pool之前,可以看到,集群是正常的
1 | [store@mon1 ~]$ sudo ceph -s |
脚本运行完ceph osd pool create
后,后续命令一直不能返回,看到集群的状态是
1 | [store@mon1 ~]$ sudo ceph -s |
看起来pg是在创建,然鹅,等待了十分钟,还是没有创建完成
看情况,pg是有在创建,但是速度也太慢了吧,一分钟才创建几个pg,在10PB的集群中,创建pool时间不超过20s,这个时间差距如此大,猜测是出现问题了
一轮排查下来,集群配置没什么问题,开始怀疑是crushmap的问题,看了下几个rule,也没问题,只不过是osd数量翻倍了,不应该会导致这种现象才对
不少osd日志发现有联系不上别的osd,或者是超时被mon markdown
问题解决
深入了解和排查后发现,因为节点数比较多,72个host,在集成的时候,对所有节点以36台为一组进行划分vlan,这样的话两组共72台机器,就平均分成2个vlan了。
跨vlan本身是没有什么问题(性能可靠性不太好),因为本身集群所有的osd都是正常的,但是再次进行创建pool,并检查osd日志的时候发现,有个别节点的负载非常高,另外,创建pg的日志卡住在
1 | get_health_metrics reporting 1 slow ops, oldest is osd_pg_create(e3772 17.549:3677 17.855:3683) |
看起来osd是在创建pg,但是创建pg也不应该导致高负载,既然有osd联系不上,会不会是网络问题呢?
随机选了几台机器互相ping,没有问题!防火墙?没问题!
进行地毯式排查,72个节点慢慢来怕是要搞半天,启用ansible
1 | for x in $( seq 37 72 ); do ansible osds -i hosts_osd -m shell -a "ping osd-host$x -c 1";done |
这一查,发现有8台机器跨vlan不通!啊啊啊~~随机抽查的时候没有发现!
于是上报给集成的同事,处理了之后,10秒之内就创建好存储池了
总结
单集群18PB也算是比较大的,涉及的节点较多,排查起来会比较麻烦,这里吸取一个教训,那就是osd之间如果不互通,是不一定是会导致osd down的,实际上,osd与osd、osd与mon之间都会维持心跳,即使osd之间的心跳断了,只要osd到mon的心跳是正常的,mon就会认为这个osd没有离线,所以容易导致误判,另外,pg的创建过程中,应该是osd创建pg后,需要跟它的其他副本进行相互确认,只有所有副本都创建完成了,这个pg才算创建完了,最后,对于大规模集群,还是要用ansible或者salt这种批量工具
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2019/09/06/大规模集群创建pool踩坑记录/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!