时间点与步骤
事件 | 相关信息 | 相关机器 | 详细信息 |
---|---|---|---|
12/15 10:00 | 服务器重装,把原来 glusterfs 服务器重装成 el7 | 240.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 | 详情参考 p1 |
12/16 01:00 | ceph 基础配置 配置 ceph 基础信息 | 240.30.128.54,240.30.128.71,240.30.128.72 | 详情参考 p2 |
12/16 01:30 | 启动 ceph 把新添加的 osd 及对应节点加入 ceph 集群 | 240.30.128.54,240.30.128.71,240.30.128.72 | 详情参考 p3 |
12/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