精讲Redis集群常备知识

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精讲Redis集群常备知识相关的知识,希望对你有一定的参考价值。

redis的主从结构

为什么要用?
Redis的数据持久化可以保证服务重启不丢失数据,但是,仅仅保存在硬盘,如果硬盘损坏,也可能导致数据丢失,主从复制机制就可以避免这种单点故障。
典型的例子:sentinel

实现故障自动恢复,基本原理是:心跳机制+投票裁决

  1. 监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正常

  2. 提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知

  3. 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel 会开始一次自动故障迁移操作,它会将失效主
    服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主
    服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器然后自动修改相关配置。


Redis优化

提示:具体根据业务场景调整

1、 配置优化
设置maxmemory。设置Redis使用的最大物理内存,即Redis在占用maxmemory大小的内存之后就开始拒绝后续的写入请求,该参数可以确保Redis因为使用 了大量内存严重影响速度或者发生OOM(out-of-memory,发现内存不足时,它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存)。此外, 可以使用info命令查看Redis占用的内存及其它信息。
让键名保持简短。键的长度越长,Redis需要存储的数据也就越多

客户端timeout 设置一个超时时间,防止无用的连接占用资源。设置如下命令:
timeout 150
tcp-keepalive 150 (定时向client发送tcp_ack包来探测client是否存活的。默认不探测)

优化AOF和RDB,两种方式只开启一种,取消AOF持久化。减少占用CPU时间 主库可以不进行dump操作或者降低dump频率。 命令如下: appendonly no

监控客户端的连接
因为Redis是单线程模型(只能使用单核),来处理所有客户端的请求, 但由于客户端连接数的增长,处理请求的线程资源开始降低分配给单个客户端连接 的处理时间

限制客户端连接数 。在Redis-cli工具中输入info clients可以查看到当前实例的所有客户端连接信息
maxclients属性上修改客户端连接的最大数,可以通过在Redis-cli工具上输入 config set maxclients 去设置最大连接数。根据连接数负载的情况

检查数据持久化策略 数据落磁盘尽可能减少性能损坏,以空间换时间。设置如下命令:
rdbcompression no : 默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想 消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

rdbchecksum no : 默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希 望获取到最大的性能提升,可以关闭此功能。

以上是关于精讲Redis集群常备知识的主要内容,如果未能解决你的问题,请参考以下文章

docker硬核知识-容器部署redis集群

Redis集群

Redis核心知识点总结(一万五千字,请耐心读完)

带你整理面试过程中关于Redis 主从模式哨兵模式和集群模式详解的相关知识点

Windows搭建Redis集群-详细教程

Redis(三十)- Redis集群操作和故障恢复&集群的Jedis开发