高性能Redis服务器注意事项

高性能,redis,服务器,注意事项 · 浏览次数 : 222

小编点评

**性能优化指南** **一、代码规范** * 键名要简洁,不要太长,不能包含乱码。 * 值不能使用 `bigkeys`。 * 键值对有效期要合理,避免随意设置过长或一致的过期时间。 * 命令要有规律,不要使用过多影响性能的命令。 * 不要使用危险命令。 * 注意保证安全与稳定。 **二、CPU亲和性** * Redis 的核心线程只有一个,所以对 CPU 的极限性能要求比较高。 * 虚拟化会导致 CPU 的实际性能下降(15%-25%)。 * 建议使用高性能的物理机器启动 Redis,例如 SSD 主机,并确保稳定性。 **三、网络调优** * 网卡中断绑核:需要专家进行。 * 网卡流量绑定:建议使用 2-4 个网卡使用聚合的方式提供网络服务,提高承载能力。 * 上下游交换机:最好使用光纤设备,以减少延迟和抖动。 * 针对不同的应用服务器,实现限速,避免一台机器网卡流量暴增阻塞其他服务器。 **四、操作系统参数** * 内核参数:设置 `backlog` 和 `somaxconn` 等参数,以设置能够承载足够的容量。 * 内部的 TCP 参数:添加缓存区域,提升网络利用率。 * 持久化:选择高速度的 SSD,并选用相同 NUMA 节点的内存进行处理。 *内核版本:选择用于对应 Redis 版本的最高内核版本的 Linux 系统。 **五、IO多线程** * IO多线程的使用建议:如果 IO 比较多的情况下可以使用 IO多线程提升系统的响应速度,但需注意官方建议的限制,最大值不建议超过 8,也不能超过 CPU 的核心数。 **六、硬件服务器选择** * 主频必须高。 * 建议缓存也尽量高。 * 内存通道数,工作频率高。 * 关闭超线程。 * 核显线程专注操作。 * 最好使用插拔是网卡,有 `off_load` 功能的硬件网卡,避免网络层消耗过多 CPU。 * 使用 RAID10 的 RAID 系统,以确保数据的可靠性和性能。 **七、其他** * 使用 BBU 来保证数据不丢失。 * 主机使用最高性能模式,不要使用节能模式。 * 内存刷新频率尽量在 64ms。

正文

摘要

昨天简单理了理安装与配置相关的
但是很多比较重要的核心性能参数并没有进行学习与探讨
就基于昨天理解不深入的地方进行进一步的学习与了解
希望能够提高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

与高性能Redis服务器注意事项相似的内容:

高性能Redis服务器注意事项

摘要 昨天简单理了理安装与配置相关的 但是很多比较重要的核心性能参数并没有进行学习与探讨 就基于昨天理解不深入的地方进行进一步的学习与了解 希望能够提高Redis-Server的性能. 第一部分: 规范 一切性能都是以代码为核心的. 再好的硬件. 如果代码水平都不行, 肯定是无法发挥硬件的性能. R

[转帖]linux 内核协议栈 TCP time_wait 原理、配置、副作用

https://my.oschina.net/u/4087916/blog/3051356 0. 手把手教你做中间件、高性能服务器、分布式存储技术交流群 手把手教你做中间件、高性能服务器、分布式存储等 (redis、memcache、nginx、大容量 redis pika、rocksdb、mong

StackExchange.Redis跑起来,为什么这么溜?

StackExchange.Redis 是一个高性能的 Redis 客户端库,主要用于 .NET 环境下与 Redis 服务器进行通信,大名鼎鼎的stackoverflow 网站就使用它。它使用异步编程模型,能够高效处理大量请求。支持 Redis 的绝大部分功能,包括发布/订阅、事务、Lua 脚本等...

申威3231服务器Redis性能验证-及最全信创CPU性能分析

# 申威3231服务器Redis性能验证-及最全信创CPU性能分析 ## 背景 ``` 公司里面新进了几台服务器. 有台申威服务器. 因为前段时间参与过一次申威的POC验证. 当时对性能有一点简单的理解. 但是因为不方便,没有测试更多. 这次有了一台实体机器,并且可以上网, 所以感觉可以方便的多了.

【Azure Redis】Redis服务负载达到100%后的影响及有何优化方法

问题描述 Redis服务负载达到100%后的影响及有何优化方法 问题解答 Redis的负载达到100% 意味着 Redis 服务器繁忙,无法跟上请求,导致客户端发送出来的请求超时。 常规情况下有一下几种情况可以导致这个问题: 1) 请求量变大达到服务上限 2) 执行默写时间复杂度高的指令,如KEYS

[转帖]Redis连接未释放,造成TCP连接数过多

https://segmentfault.com/a/1190000022704886 早上看到服务器告警通知,TCP连接数比较高,达到5000多,我设置的阈值是5000,正常TCP连接不会这么高,这样的一个阈值我可以提前知道有问题早点解决,不至于后面引起一系列问题,甚至拖垮服务器。 排查 登陆服务

不同信创服务器Redis7.0.5性能表现总结

不同信创服务器Redis7.0.5性能表现总结 背景以及基础约定 随着美帝2022.10收紧EAR规定的硬件出口规定 信创事业迎来了一波新的高潮. 最近不仅仅要求国产化的硬件. 更要求国产化的OS,以及数据库和中间件. 最近因为涉及到一些产品新版本的迭代 准备了很多信创操作系统. 计划进行一次简要的

【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答

问题描述 PHP应用再连接Azure Redis服务时,出现Connection Timed out。当通过升级提高Azure Redis的性能时候,发现之前的数据丢失了。 问题解答 当Redis服务出现Timeout的情况时,可以从Redis服务的指标(Metrics)开始查看,如果出现负载(Se

【Azure Redis 缓存】Azure Redis 4.0 被扫描到漏洞,如何修补呢?

问题描述 在安全级别要求高的公司中,任何系统都会进行安全扫描。比如Azure 云上的Redis服务,也在扫描的范围中,最后发现Redis 4.0存在以下漏洞: CVE-2019-10192:https://nvd.nist.gov/vuln/detail/CVE-2019-10192 CVE-201

网络协议之:redis protocol 详解

简介 redis是一个非常优秀的软件,它可以用作内存数据库或者缓存。因为他的优秀性能,redis被应用在很多场合中。 redis是一个客户端和服务器端的模式,客户端和服务器端是通过TCP协议进行连接的,客户端将请求数据发送到服务器端,服务器端将请求返回给客户端。这样一个请求流程就完成了。 当然在最开