正文
摘要
昨天简单理了理安装与配置相关的
但是很多比较重要的核心性能参数并没有进行学习与探讨
就基于昨天理解不深入的地方进行进一步的学习与了解
希望能够提高Redis-Server的性能.
第一部分: 规范
一切性能都是以代码为核心的.
再好的硬件. 如果代码水平都不行, 肯定是无法发挥硬件的性能.
Redis也是如此.为了能够进行高性能的工作.
Redis的规范也必须严格.
这里简单学习一下阿里云的Redis规范. 总结如下:
1. 键名要有含义,不要太长,不要有乱码.不建议有特殊字符.
2. value不能使用bigkeys. 坚决杜绝
3. 键值对有效期要合理,不要随意设置过长,或者是一致的过期时间.
4. 命令有规律,不要使用太多影响性能的命令.
5. 不要使用危险命令. 注意保证安全与稳定.
6. 设置好最大maxmemory以及maxmemory-policy 等策略. 避免系统宕机.
禁用危险命令的方法
可以在配置文件中执行如下命令进行禁用
rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
第二部分: CPU的亲和性
Redis的核心线程只有一个, 所以对CPU的极限性能要求比较高.
昨天的安装测试也能够发现. 虚拟化是会导致CPU实际性能的下降(15%-25%)
如果有超售, 影响可能更加巨大.
所以建议Redis可以尽量使用高主频的物理机器(建议SSD,并且保证稳定性)
因为现在服务器一般是多路架构,并且不少服务器比如AMD和飞腾鲲鹏都是SOC片上就是NUMA节点
所以建议能够在启动时进行一下CPU的亲和性的设置.
在如此建议下. 搞配置的多路服务器的Redis的内存可能不要超过(总内存数/(2*路数)) 的数值
尽量让主线程和后台线程跑再一个NUMA的节点上,速度会有较快的提升.
CPU亲和性的设置
1. 可以使用numactl -s的方式查看 物理服务器的相关信息.
2. 根据以往的经验. 建议关闭 HT 超线程设置. 提高主线程的处理效率.避免不必要的争用.
3. 另外一般网卡处理会根据网卡的数量进行绑定从0开始的CPU.
所以也不建议跟网卡公用CPU,会因为网卡的中断,导致处理性能下降.
4. 如果服务器的每个物理CPU的内存插槽数相同, 通道数一致.那么不建议绑定 0 开头的CPU
建议绑定1之后的CPU.
绑定方法
1. 可以使用taskset -c 的方式进行绑定
2. 可以修改配置文件进行绑定
较新的redis版本比如7.0.7 配置文件中有绑核的设置.
打开相关注释就可以进行绑核了.
#Set redis server/io threads to cpu affinity 0,2,4,6:
server_cpulist 0-7:2
# Set bio threads to cpu affinity 1,3:
bio_cpulist 1,3
# Set aof rewrite child process to cpu affinity 8,9,10,11:
aof_rewrite_cpulist 8-11
# Set bgsave child process to cpu affinity 1,10,11
bgsave_cpulist 1,10-11
第三部分 网络调优
Redis Server其实是一个 Client-Server架构的服务器.
他有极高的网络带宽需求, 所以网络调优必不可少.
1. 网卡中断绑核. 需要专家进行.
2. 网卡流量bond. 有时候一个万兆网卡可能无法满足需求.
建议能够2-4个网卡使用聚合的方式进行提供网络服务.提高承载能力.
3. 上下游交换机.最好使用光纤设备. 如果是电缆,至少为六类超六类.
光纤的延迟和抖动都比较好,能够更好的承载业务.
4. 建议交换机使用冗余配置.并且为高性能专用交换机. 避免网络流量阻塞.
5. 建议针对不同的应用服务器实现限速, 避免一台机器网卡流量暴增阻塞其他服务器.
第四部分 操作系统部分
1. 内核参数调整
backlog 以及 somaxconn 等参数设置, 设置能够承载足够的容量.
2. 内部的TCP参数调优,添加缓存区域.
是否可以使用大MSS或者是MTU,提高网络利用率.
3. 如果使用持久化,建议选用高速度的SSD.
建议选用相同NUMA节点的内存进行处理.
4. 建议选用于对应Redis版本匹配的较高内核版本的Linux系统.
能够发挥更好的redis的性能.
5. 关闭非核心软件,避免资源争用.
建议软件专用, 避免有不可控因素导致性能下降.
第五部分 IO多线程
Redis 6.0 以后的版本增加了 IO多线程的使用
建议如果IO比较多的情况下可以使用IO多线程来提升系统的响应速度.
需要注意,官方不建议这个IO多线程数量太多,
最大值不建议超过8 也不能超过CPU的最多核心数.
极限吞吐量会有所提升,但是有可能会加大核心线程的压力.
第六部分 硬件服务器的选择
1. 主频必须高.
2. 建议缓存也尽量高
3. 内存通道数,工作频率高.
4. 关闭超线程. 核显线程专注操作.
5. 最好使用插拔是网卡,有off_load功能的硬件网卡,避免网络层消耗过多 CPU
6. 建议全闪, 不要使用RAID5 ,RAID 6 写惩罚较大. 建议使用RAID10的RAID机制.
7. 建议开始RAID卡缓存,硬件缓存,并且还是用BBU来保证数据不丢失.
8. 主机使用最高性能模式, 不要使用节能模式,避免性能下降.
9. 内存刷新频率尽量在64ms.不要太低,避免内存充电影响IO