ceph - 扩容记录

    xiaoxiao2026-04-03  7

    时间点与步骤

    事件相关信息相关机器详细信息12/15 10:00服务器重装,把原来 glusterfs 服务器重装成 el7240.30.128.54,240.30.128.71,240.30.128.72利用 kickstart 重装12/15 11:30基础配置 维护系统常用基础配置240.30.128.54,240.30.128.71,240.30.128.72详情参考 p112/16 01:00ceph 基础配置 配置 ceph 基础信息240.30.128.54,240.30.128.71,240.30.128.72详情参考 p212/16 01:30启动 ceph 把新添加的 osd 及对应节点加入 ceph 集群240.30.128.54,240.30.128.71,240.30.128.72详情参考 p312/16 02:00优化 ceph 优化 ceph 恢复240.30.128.54,240.30.128.71,240.30.128.72详情参考 p4

    p1

    参考事件

    确认主机名正确 确认 ntp 正确 确认磁盘都已经能够被识别, 每个磁盘 4T, 调整内核参数 (echo 4194303 > /proc/sys/kernel/pid_max) 安装 ceph 软件 (0.87) 格式化所有 osd 相关磁盘, 确保开机自动挂载 (参考脚本 initdisk.sh) 导入 ssh 密钥到所有新 ceph 主机中

    相关脚本

    initdisk.sh

    #!/bin/bash LANG=en_US disk=`fdisk -l | grep ^Disk | grep sectors | grep sd | grep -v sda | awk -F[:\ ] '{print $2}' | sort` yum install -y hdparm for partition in $disk do dd if=/dev/zero of=$partition bs=1M count=100 parted -s $partition mklabel gpt parted $partition mkpart primary xfs 1 100% hdparm -z "$partition"1 mkfs.xfs -f -i size=512 "$partition"1 done

    p2

    参考事件

    创建 osd, 参考脚本 (createosd.sh) 初始化 osd, 参考下面脚本 (initosd.sh) osd 授权, 参考下面脚本 (authosd.sh) 导出当前 ceph crush map, 并修改新的 crush map 规则, 参考下面 crush map 信息 启动 ceph

    相关脚本

    createosd.sh

    #!/bin/bash LANG=en_US num=70 <- 注意 osd 开始 number for ip in $ips do diskpart=`ssh $ip "fdisk -l | grep Linux | grep -v sda" | awk '{print $1}' | sort` for partition in $diskpart do ssh $ip "ceph osd create" ssh $ip "mkdir /var/lib/ceph/osd/ceph-$num" ssh $ip "echo $partition /var/lib/ceph/osd/ceph-$num xfs defaults 0 0 >> /etc/fstab" let num++ done ssh $ip "mount -a" done

    initosd.sh

    #!/bin/bash LANG=en_US num=70 <--- 注意这里, 是新 osd 的开始 NUM for ip in $ips do diskpart=`ssh $ip "fdisk -l | grep GPT | grep -v sda" | awk '{print $1}' | sort` for partition in $diskpart do ssh $ip "ceph-osd -i $num --mkfs --mkkey --osd-uuid dc4f91c1-8792-4948-b68f-2fcea75f53b9" <-- 主机 ceph fsid let num++ done done

    authosd.sh

    #!/bin/bash LANG=en_US num=70 <- 注意 osd 开始数字 for ip in $ips do diskpart=`ssh $ip "fdisk -l | grep GPT | grep -v sda" | awk '{print $1}' | sort` for partition in $diskpart do ssh $ip "ceph auth add osd.$num osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-$num/keyring" let num++ done done

    crushmap 获得及重新导入方法

    获得默认 crushmap (加密) [ ceph osd getcrushmap -o crushmap.dump ] 备份当前 crushmap [ cp crushmap.dump crushmap.dump_20151218 <- 备份这个当前 crush map ] 转换crushmap 格式(加密格式 -> 明文) [ crushtool -d crushmap.dump -o crushmap.txt ] 转换 crushmap 格式(明文 -> 加密格式) [ crushtool -c crushmap.txt -o crushmap.done ] 重新使用新 crushmap [ ceph osd setcrushmap -i crushmap.done ]

    p3

    参考事件

    先设定 norecovery, noin 模式 ceph osd set noin ceph osd set norecover 启动 osd 参考启动脚本 (startosd.sh) 恢复 noin, norecovery ceph osd unset noin ceph osd unset norecover

    startosd.sh

    #!/bin/bash start=1 while [ $start -le 3 ] do for ip in $newceph do ssh_port=`nmap -p22 $ip | grep '22/tcp' | awk '{print $2}'` ssh_status=${ssh_port:-faile} if [ "$ssh_status" == "faile" ] then start=1 break else start=10 fi done done for ip in $newceph do ssh $ip 'find /var/lib/ceph/osd/ -maxdepth 1 -name "ceph-*" -exec touch {}/sysvinit \;' done for ip in $newceph do ssh $ip "/etc/init.d/ceph -a start osd" done

    p4

    参考事件

    for num in `seq 70 99`; do ceph tell osd.$num injectargs '--osd_recovery_threads 5'; done for num in `seq 70 99`; do ceph tell osd.$num injectargs '--osd_recovery_op_priority 40'; done for num in `seq 70 99`; do ceph tell osd.$num injectargs '--osd_disk_threads 5'; done 相关资源:ceph数据迁移优化研究
    最新回复(0)