私有云运维实战
陈文钦
1. 集群选型及架构规划
2. 性能测试及故障测试
3. 故障维护及数据抢救
内容简介
57%
43%
1600 VM
Docker
2%
S3
6%
Qemu
93%
集群选型及架构规划
DISK
VMVM VM OSD OSD
DISK
DISK
VMVM VM OSD OSD
DISK
DISK
VMVM VM OSD OSD
DISK
DISK
VMVM VM OSD OSD
DISK
计算节点
!
⾼高密度
计算型
⼑刀⽚片式
存储节点
!
⾼高密度
存储型
机架式
RACK-BRACK-A
storage
storage
storage
storage
storage
storage
40Gx2 Stack
RACK-C
compute
compute
compute
ROOT
OSD OSD
OSD OSD
OSD OSD
OSD OSD
OSD OSD
OSD OSD
OSD OSD
OSD OSD
Rack-A Rack-B
HOSTHOST HOST HOST
RACK-BRACK-A
storage
storage
storage
storage
storage
storage
40Gx2 Stack
RACK-C
compute
compute
compute
性能测试及故障测试
⼤大集群 ⼩小集群
机器数量 20xR730(双机柜) 3xR730(单机柜)
磁盘数量 SASx18 SSDx6 SASx16 SSDx8
ceph版本 ceph hammer
测试⼯工具 fio librbd
ceph配置
noout
osd max backfills=1
rbd cache=false
pool size=2
SAS Pool 4K Randwrite IOPS
IO
PS
0K
2K
4K
6K
8K
10K
12K
正常状态 1条堆叠线故障 1台交换机故障
10K9K9K
SAS Pool 4K Randread IOPS
IO
PS
0K
10K
20K
30K
40K
50K
60K
70K
正常状态 1条堆叠线故障 1台交换机故障
37K
63K64K
PG Backfilling 4K Random IOPS
IO
PS
0K
15K
30K
45K
60K
75K
90K
⼤大集群SAS-Randwrite ⼤大集群SAS-Randread ⼩小集群SSD-Randwrite ⼩小集群SSD-Randread
35K
6K
60K
9K
90K
10K
64K
9K
正常状态
1个OSD同步数据
SSD Pool 4K Random IOPS
IO
PS
0K
100K
200K
300K
400K
500K
600K
Randwrite Randread
515K
110K 101K15K
优化前
Tcmalloc优化后
7X
5X
--- ceph 2015-09-06 01:40: +0800
+++ /etc/ 2015-09-02 12:57: +0800
@@ -302,6 +302,7 @@
!
[ -n "$wrap" ] && runmode="-f &" && runarg="-f"
[ -n "$max_open_files" ] && files="ulimit -n $max_open_files;"
+ cmd="TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456 $cmd"
!
if [ -n "$SYSTEMD_RUN" ]; then
cmd="$SYSTEMD_RUN -r bash -c '$files $cmd --cluster $cluster -f'"
调整⽅方式
perf top
% [.] tcmalloc::CentralFreeList::FetchFromSpans
% [.] tcmalloc::ThreadCache::ReleaseToCentralCache
% [.] tcmalloc::CentralFreeList::ReleaseToSpans
Tcmalloc Thread Cache过⼩小的表现
⼯工程师Mark Nelson相关测试报告:
•
•
!
2. Sandisk存储优化⽂文档:
•
!
3. ceph相关bug及邮件:
•
•
•
SSD Pool 4K Random IOPS
IO
PS
0K
10K
20K
30K
40K
50K
60K
70K
80K
90K
100K
Randwrite Randread
87K
11K 12K2K
优化前
⺴⽹网卡IRQ优化后
5X
7X
/proc/interrupts
# grep -m 5 -i eth2-TxRx /proc/interrupts | head -n 5
106: 53583 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-0
107: 54227 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-1
108: 54120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-2
109: 53852 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-3
110: 53734 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-4
top
%Cpu0 : us, sy, ni, id, wa, hi, si, st
%Cpu1 : us, sy, ni, id, wa, hi, si, st
%Cpu2 : us, sy, ni, id, wa, hi, si, st
%Cpu3 : us, sy, ni, id, wa, hi, si, st
⺴⽹网卡IRQ中断分布不均的表现
调整⽅方式
echo 1 > /proc/irq/106/smp_affinity
echo 2 > /proc/irq/107/smp_affinity
参考资料
•
•
Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-cpu-
•
故障维护及数据抢救
DISK
OSD OSD
DISKDISK
OSD
DISK
OSD OSD
DISKDISK
OSD
OSD OSD OSDOSD
OSD
DISK
OSD
DISK
OSD 备机
DISKDISK
xfsdumpxfsrestore
ceph xfsdump
恢复速度 慢 快
恢复影响 强 弱
复杂度 简单 复杂
要点说明 在故障OSD重新启动前⼀一定要删除坏扇区所在的PG数据
适⽤用情况 所有 只适⽤用于故障盘数据可读的情况
DISK
OSD
DISK
OSD
DISK
OSD
DISK
OSD
OSD OSD OSDOSD OSD
1.停掉第⼀一个故障盘对应的OSD
2.对第⼆二个故障盘进⾏行xfsdump⽅方式的换盘
3.确认第⼆二个故障盘坏扇区所在pg
4.删除坏扇区所在pg数据并启动第⼆二个故障盘的OSD
故障盘2的坏扇区所在PG不在故障盘1上
5.重新初始化第⼀一个故障盘对应的OSD
3.启动第⼆二个故障盘的OSD
4.重新初始化第⼀一个故障盘对应的OSD
故障盘2的坏扇区所在PG正好在故障盘1上
5.确认第⼆二个故障盘坏扇区所在pg对应的rb数据
6.找出rb数据对应的rbd块
7.新建rbd, 在虚拟机内部同步数据后删除旧的rbd
/var/lib/osd/ceph-60/current/_head# cat * > /dev/null
cat: __head_445EEF6D__5: Input/output error
使⽤用cat命令对故障磁盘进⾏行⽂文件读取
# rbd -p poolname info test-01_data
rbd image 'test-01_data':
size 102400 MB in 25600 objects
order 22 (4096 kB objects)
block_name_prefix:
format: 1
使⽤用rbd命令遍历查询所有rbd的信息
利用磁盘坏扇区但大部分数据仍然
可读取的特性,在文件系统层面进行
数据拷贝
Q & A