ceph - crushmap 扩容记录-阿里云开发者社区

开发者社区> 开发与运维> 正文

ceph - crushmap 扩容记录

简介: 前提 参考 ceph - 扩容记录 文档记录了如何进行 ceph 扩容的部署过程 最后一步, 需要对 ceph crushmap 进行重定义 容量计算 新加入 3 台存储节点, 每个存储节点具有 10 个 OSD 节点, 每个 OSD 对应 4TB 空间, 即共增加 3* 10 * 4TB = 120 TB 由于一直都有业务在 ceph 存储

前提

参考 ceph - 扩容记录 文档记录了如何进行 ceph 扩容的部署过程

最后一步, 需要对 ceph crushmap 进行重定义

容量计算

新加入 3 台存储节点, 每个存储节点具有 10 个 OSD 节点, 每个 OSD 对应 4TB 空间, 即共增加 3* 10 * 4TB = 120 TB

由于一直都有业务在 ceph 存储中使用, 假如立即把所有新加入的 ceph 节点存储使用率设定为 100% 会导致 ceph 集群处于一个维护期中, CPU, 网络带宽都会被需要进行恢复的 ceph 影响, 所有业务都会出现数据卡顿问题,

因此, 计划每天晚上只对 ceph osd 进行部分部分扩容,

3台存储节点, 每个存储节点具有 10 个OSD 节点, 每个 OSD 对应 4TB 空间, 每个 OSD 晚上扩展 200GB 空间, 即 3 * 10 * 200GB = 6TB 空间

我们从 2015-12-26 开始, 对 ceph 通过修改 weight 方法, 对 ceph 进行扩容, 每次扩容约为 CEPH 添加 6 TB 磁盘空间

实施

参考脚本

#!/bin/bash
#
#   edit by terry.zeng@vipshop.com
#     last_version: 2015-12-25
#       modify: reweight -> 0.5   || ceph status  ( grep 'misplaced' )
#
#  目标: 自动进行 ceph weight 调整,
#  条件
#   调整时间 start_time 1,  end_time 8 之间
#   ceph 必须是 health_ok 状态
#   最大可用 weight 10
#               需要调整的主机 reweight_host
#
#               邮件辅助 sh: /root/ceph/check_ceph_reweight.sh [只有发生 ceph -s [出现 misplace] 或其状态改变时候才发邮件
#

time=`date +%Y-%m-%d-%H%M%S`
savecrushfile='/root/ceph/crushmap.txt'
start_time=1
end_time=7
reweight=0.5
reweight_host='hh-yun-ceph-cinder014-128054 hh-yun-ceph-cinder021-128071 hh-yun-ceph-cinder022-128072'
max_weight=10.000
now=`date +%k`


### time

if [[ $now -lt $start_time ]] || [[ $now -ge $end_time ]]
then
       exit
fi

#### ceph status

ceph -s | grep 'misplaced' > /dev/null
if [ $? -eq 0 ]
then
        exit
fi

echo $time 'reweight start' >> /root/ceph/reweight_record.txt

###  rewieght

if [ -f $savecrushfile ]
then
        mv $savecrushfile $savecrushfile-$time
fi


ceph osd getcrushmap -o /root/ceph/crushmap.dump
crushtool -d /root/ceph/crushmap.dump -o /root/ceph/crushmap.txt
for host in $reweight_host
do
        weight=`grep $host $savecrushfile | grep item | awk '{print $4}'`
        line=`grep  --line-number $host $savecrushfile  | grep item | awk -F: '{print $1}'`
        new_weight=`echo $weight + $reweight | bc -l`
                                if [ "$new_weight" == "$max_weight" ]
                                then
                                                exit
                                fi
        sed -i "$line"s#$weight#$new_weight# $savecrushfile
done
crushtool -c /root/ceph/crushmap.txt -o /root/ceph/crushmap.done
ceph osd setcrushmap -i /root/ceph/crushmap.done

优化

目前在扩容期间, 对 ceph 集群执行了下面的参数修改

ceph tell osd.\* injectargs '--osd_max_backfills 1  --osd_recovery_max_active=1 --osd_disk_thread_ioprio_class  idel --osd_disk_thread_ioprio_priority 7 --osd_recovery_threads 1 --osd_recovery_op_priority 10  --osd_backfill_scan_min 64 --osd_backfill_scan_max 512’

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章