传统存储面临的挑战
- 性能和容量不能兼顾
- 利旧
- 架构扩展
TOPIC
- 硬件选型
- 原则
- 企业存储需求
使用场景(负载类型)
- 企业存储需求
- 企业渴望什么、需要什么
- TCO低
- 高性能
- 高可靠
- 历程
- 硬件选型
- 部署调优
- 性能测试
- 架构灾备
- 业务上线测试
- 运行维护(故障处理、预案演练)
- 企业场景
- 高性能场景
- 低TCO
- 高IOPS
- SSD PCIe/SSD NVMe。通常用于块存储,或者高IOPS工作负载。
- 通用场景
SSD PCIe SSD作为OSD 日志盘。 - 大容量场景
- 经济存储、廉价存储
- 单机架8-14台
- 每台服务器24T-72T(消费级硬盘即可:低功耗,大存储容量)
- 高性能场景
- 硬件选型依赖的几个因素
- CPU
每个OSD至少有一个CPU核(建议)。 - RAM
- OSD日常操作需要内存500MB左右。
- OSD数据恢复时需要更多的内存,实际值设置是4G。
- 数据存储文件系统
- 规划数据存储时考虑成本和性能的权衡。进行系统操作,同时多个后台程序对单个驱动器进行读写操作会显著降低性能。
- 文件系统限制的考量
- BTRFS对于生产环境不稳定,但是有能力记录journal和并行写入数据
- XFS稳定性更好
- EXT4稳定性更好
- 网络
生产环境存储集群集群网络是20G,业务网络是20G。
外部业务网络:10G - 硬盘
- 日志盘
- SSD作为日志盘
- 减少访问时间
- 降低写延迟
- 大幅提升吞吐量
- 可以对每个物理SSD创建多个逻辑分区,每个逻辑分区映射一个OSD数据盘。通常10-20G日志大小足以满足大多数场景。
- 更大的SSD,不要忘记为OSD增加filestore的最大和最小同步时间间隔。
- SSD和OSD的比例:SATA/SAS SSD 1:4 PCIE/NVME上1:12或1:18(4个OSD共享一个SSD,12个OSD共享一个NVME)。
- 单个SSD多个日志分区的问题(单个SSD故障,可能会导致数据丢失的问题。)
- 数据盘
- 数据盘接口(需要确认支持速率和协商速率是代表接口还是硬盘)
- SATA3.0最大传输速度600MB。
SATA3 12Gbps/s,10%的带宽折扣:12000Gbps/8*(1-10%)≈1350MB/s
SAS 6Gps/s,10%带宽折扣:6000Gbps/8*(1-10%)=675MB- 双重SAS端口提供冗余,允许并行读写
- SAS设备比SATA更低的URE,PG修复操作更少
- SATA3.0最大传输速度600MB。
- OSD节点密度
通常大量的小容量节点比少量的大容量节点要好。单个节点的容量尽量小于总容量的10%。
- 数据盘接口(需要确认支持速率和协商速率是代表接口还是硬盘)
- 日志盘
- CPU
- 原则
- 小结
- 正确认识企业IT环境:对立/共存
- 在存储集群和底层基础设施上,企业拥有完全控制权
- 场景驱动,做自己擅长的
- 与时间赛跑
性能调优层面分析
硬件层面
- 硬件规划:CPU、内存、网络
- SSD选择:SATA SSD作为journal,Intel S3500是目前方案中的首选。预算足够的情况下,推荐使用PCIS SSD。性能会得到进一步提升,延迟有很大的改善。
- Intel s3500性能参数
- 三星SATA 固态性能参数(待补充)
- Intel s3500性能参数
- BIOS设置
- 超线程(实际开启)
- 关闭节能(实际关闭)。
- NUMA设置
查询方式:numactl --hardware
建议关闭(实际开启)。如果要用可以通过cgroup将ceph-osd进程与某一个CPU Core以及同一Node下的内存进行绑定。
- 系统层面
- kernel
- IO调度:使用Noop调度器替代默认的CFQ(针对机械盘则是设置deadline)
SATA SSD实际:echo noop > /sys/block/ssx/queue/schedule
SATA HDD实际:cat /sys/block/sdg/queue/scheduler [mq-deadline] kyber bfq none
cat /sys/block/sdf/queue/scheduler [mq-deadline] kyber bfq none
- 预读:read_ahead_kb
- 建议:8192或更大
- 实际:
blockdev --getra /dev/sdg 256 blockdev --getra /dev/sdf 256
- 进程:pid_max
- 建议:194303或更大
- 实际:
cat /proc/sys/kernel/pid_max 4194304
- 调整CPU频率,使其运行在更高性能下
- 内存
- SMP(对称)和NUMA(建议关闭)
- SWAP: vm.swaooiness=0:非活动内存页置换到交换分区里面(交换分区使用策略:0代表尽可能避免换页操作,/etc/sysctl.conf),实际如下:
全闪内存支持,增加TCmalloc(非全闪默认采用该项)的Cache大小或者使用jemalloc替换(需要重新编译打包CEPH)TCmalloccat /proc/sys/vm/swappiness 60
- Cgroup
在对程序做CPU绑定或者使用Cgroups(尽量别跨CPU)进行隔离时,主要不要跨CPU以便更好的命中内存和缓存
Ceph进程和其他进程会相互抢占资源,使用Cgroup最好隔离措施。
为Ceph预留足够多的CPU和内存资源,防止影响性能。
- kernel
- 网络层面
- 巨型帧
调整MTU=9000开启巨型帧,可以极大的提高性能(1522字节:1500负载+14以太网头部+4CRC+4vlantag)
默认:
cat /sys/class/net/bond0/mtu 1500
- 中断亲和(在传输数据需要进行网络IO的时候都要触发网络中断,默认情况下网络中断都是CPU0,大量网络IO出现,处理IO中断会导致CPU0处于满负荷状态,更多IO的时候就无法处理,出现丢包和系统瓶颈)
Linux 2.4内核之后引入了将特定中断绑定到指定的CPU技术,称为中断亲和。慎用irqbalance服务,建议还是根据系统规划,通过手动设置中断亲和。隔离部分CPU处理网卡中断。 - 硬件加速
- TOE网卡:可以将这些计算工作交给网卡上的协处理器完成。
- RDMA:可以让应用程序在用户态直接将buffer(缓冲区)中的数据写入网卡(NIC)的内存中,以网络为载体,发送到远程网卡,直接写入应用缓存中。
- DPDK(intel主推,社区还在实验中):抛弃了传统使用CPU中断处理数据包的方式,采用了轮询方式实现数据包处理过程,零拷贝存入用户态内存中,类似RDMA,避免内存拷贝,上下文切换的时间。
- 巨型帧
- CEPH层面(filestore)
- filestore max inline xattr size xfs,默认值:65536 #未确认项
- filestore max inline xattrs xfs,默认值:10 #未确认项
- filesotre xattr use omap: 为XATTRS使用object map,EXT4文件系统使用,XFS或者btrfs也可以使用。
- 默认值:false
- 建议值:true
- 实际值:N版无该配置项
- filestore max sync interval:从日志到数据盘最大同步间隔
- 默认值:5
- 建议值:15
- 实际值 :15
- filestore min sync interval:从日志到数据盘最小时间间隔
- 默认值:0.1
- 建议值:10
- 实际值:5
- filestore queue max ops:数据盘最大接受的操作数
- 默认值:500
- 建议值:25000
- 实际值:25000
- filestore queue max bytes:数据盘一次操作最大字节数(bytes)
- 默认值:100<<20
- 建议值:10485760
- 实际值:104857600
- filestore queue committing max ops:数据盘能够commit的操作数
- 默认值:500
- 建议值:5000
- 实际值:N版无该项配置
- filestore queue committing max bytes:数据盘能够commit的最大字节数
- 默认值:100<<20
- 建议值:10485760000
- 实际值:N版无该项配置
- filestore op threads:并发文件系统操作数
- 默认值:2
- 建议值:32
- 实际值:32
- PG Number调整
Total PGs=(Total_number_of_OSD*100)/replicas
问题
- 持续大量写至95%,既不能写,也不能读
- 写悬崖的问题
- 监控与预警
高级特性(缓存分区&QOS)
Cache Partition Manager(高速缓存分区功能)
传统高端存储系统的一个关键特性,可确保不同应用的服务质量。将Cache分为最多16个分区。每个分区的资源访问独立进行,不会互相串扰。根据应用的I/O特性不同,可以用多种不同的方法优化每个分区的分段大小。分段尺寸可设置为4KB、8KB、16KB、64KB、256KB、512KB等等。可调的分段尺寸将大大提高缓存访问的命中率。
根据应用的可靠性要求不同,对Cache的使用率要求不同,可将每个分区的缓存设为镜像模式、无镜像模式;每个分区对应的磁盘LUN可选择不同的条宽大小,尺寸可由16KB–128KB,最终实现分区缓存数据写入磁盘的优化操作。
QOS的控制
一般从优先级,I/O,带宽甚至专门的 缓存分区4个方面来控制。
- 去重和压缩
- 实现重复数据删除以及压缩,对存储来说则是个很大的挑战
- 对于数据的备份与归档,使用重复数据删除技术是非常必要的。重复数据删除的实现,有很多种方式,例如可以后台处理方式,也可以在线处理。
- 提供了压缩功能,就意味着后续访问需要解压缩,而压缩会带来资源的开销,阵列上有压缩卡,分布式存储呢。
双活和容灾
双活场景下,已经没有主和备的角色分别,是对称式的,两边会相互影响。这种影响很有可能导致一损俱损。双活只会增加运维的难度,而不会降低。双活就得预防脑裂。
异地容灾
通过互联网TCP/IP协议,将本地的数据实时备份到异地服务器中,可以通过异地备份的数据进行远程恢复,也可以在异地进行数据回退。
传统存储的双活利用虚拟化网关,实现起来多一层运维比较复杂,现在的趋势偏向存储阵列的双活。
CEPH优化之其他杂项
- osd_enable_op_tracker:跟踪op执行时间
- 默认:true
- 建议:false(集群性能调整最佳性能后,建议关闭)
- 实际:true
- throttler_perf_counter:观察阙值是否瓶颈
- 默认:true(默认开启)
- 建议:false(集群性能调整最佳性能后,建议关闭)
- 实际:true
- ceph_sign_messages:如果对安全要求不高,可关闭
- 默认:true
- 建议:false
- filestore_fd_cache
- 默认:128
- 建议:4096
- 实际:128
- filestore_fd_cache_shards
- 默认:16
- 建议:256
- 实际:16
CEPH测试
- 测试对象
- 测试指标IOPS/MBPS
- 测试工具
- linux:fio、dd、rados bench
- 测试参数
- IO
- 寻址空间
- 队列深度
- 读写模式,随机/顺序
- 测试方法
- 科学合理测试步骤
如何选用好存储
- 底层协议
- 兼容性
- 产品定位,功能取舍
- 针对特定市场应用存储
- 市场认可的存储
- 稳定性
- 性能
- 数据功能
ceph运维
- 运维手册编制、预案手册
- 部署、预案演练、故障处理、集群扩容
- 3分技术7分运维