阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis主从复制网络闪断处理

184次阅读
没有评论

共计 3552 个字符,预计需要花费 9 分钟才能阅读完成。

先记录几个有意思的用法
1. 重复执行
-r 选项重复执行一个命令指定的次数。
-i 设置命令执行的间隔。
 比如查看 Redis 每秒执行的 commands(qps)

 ./redis-cli -r 100 -i 1 info stats | grep instantaneous_ops_per_sec
 instantaneous_ops_per_sec:334
 instantaneous_ops_per_sec:306
 instantaneous_ops_per_sec:294
 instantaneous_ops_per_sec:349
 instantaneous_ops_per_sec:371
 instantaneous_ops_per_sec:380
 instantaneous_ops_per_sec:388

2. 获取指定 redis 实例的 rdb 文件, 保存到本地
redis-cli -h 192.168.44.16 -p 6379 –rdb 6379.rdb

3. 模拟 slave 从 master 上接收到的 commands
 ./redis-cli –slave

和 monitor 不一样,monitor 接收所有命令. 而 –slave 仅仅接收 insert,update,delete 的命令.

4.–scan 和 –pattern
代替 keys IM*
 ./redis-cli –scan –pattern ‘IM*’

这样不会长时间阻塞 redis 而导致其他客户端的命令请求一直处于阻塞状态。

最近经常收到邮件报警,
一般都是 Redis CPU 使用率达到阈值.
那是一个 Slave 实例,qps 也就仅仅几百而已.
经过排查, 应该是网络不稳定, 导致的 Slave 断线重连.

中间有几个参数, 还得重新回顾一下.

1.client-output-buffer-limit
 redis server 以单进程的方式处理接收到的请求,而 redis 完成请求有些工作比较慢,比如网络 IO 和磁盘 IO 等比较慢的操作。redis 为了提高处理客户端请求的响应时间,做了很多优化。比如网络 io 和磁盘 io 是异步完成、使用后台进程完成 bgsave 和 bgrewriteaof 工作,在 server 端为客户提供读 buffer 等等。
client buffer 是在 server 端实现的一个读取缓冲区。redis server 在接收到客户端的请求后,把影响结果写入到 client buffer 中,而不是直接发送给客户端。server 把结果写入到 client buffer 中后,继续处理客户端的其他请求。这样异步处理方式使 redis server 不会因为网络原因阻塞其他请求的处理。之前的文章中 replication buffer 也是 client buffer 中的一种。

1) “client-output-buffer-limit”
 2) “normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60”

具体参数含义如下:
class:客户端种类,normal、slave、pubsub。
– mormal:普通的客户端
– slave:从库的复制客户端
– pub/sub: 发布与订阅的客户端的
hard limit: 缓冲区大小的硬性限制。
soft limit: 缓冲去大小的软性限制。
soft seconds:缓冲区大小达到了(超过)soft limit 值的持续时间。
client-output-buffer-limit 参数限制分配的缓冲区的大小,防止内存无节制的分配。参数的默认值都为 0,意思是不做任何限制。

hard limit: 当 buffer 的量达到硬限制之后,redis 立即断开与 client 的连接
soft limit 和 soft seconds: 当 buffer 的在 soft seconds 秒内超出了 soft limit,redis 不会关闭 client 连接。如果当 buffer 的在 soft seconds 秒之后,仍然超出了 soft limit 的限制,则 redis 立即关闭 client 连接。

2.repl-timeout
 redis 里面的 repl-timeout 参数值也太小也将会导致复制不成功.
redis 配置文件中对 repl-timeout 的参数解释如下:
 # The following option sets the replication timeout for:
 #
 # 1) Bulk transfer I/O during SYNC, from the point of view of slave.
 # 2) Master timeout from the point of view of slaves (data, pings).
 # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
三种情况认为复制超时:
1)slave 角度,如果在 repl-timeout 时间内没有收到 master SYNC 传输的 rdb snapshot 数据,
2)slave 角度,在 repl-timeout 没有收到 master 发送的数据包或者 ping。
3)master 角度,在 repl-timeout 时间没有收到 REPCONF ACK 确认信息。
 当 redis 检测到 repl-timeout 超时(默认值 60s),将会关闭主从之间的连接,redis slave 发起重新建立主从连接的请求。
 对于内存数据集比较大的系统,可以增大 repl-timeout 参数。

3.slave ping period
 redis slave 会定期从 master 发送 ping 命令,时间间隔 repl-ping-slave-period 指定。
 因而,设置参数时,repl-timeout > repl-ping-slave-period。
# Slaves send PINGs to server in a predefined interval.  The default value is 10 seconds.
 # repl-ping-slave-period 10
 
 # It is important to make sure that this value is greater than the values pecified for repl-ping-slave-period otherwise a timeout will be detected every time there is low traffic between the master and the slave.

4.repl-backlog-size
当主服务器进行命令传播的时候,maser 不仅将所有的数据更新命令发送到所有 slave 的 replication buffer,还会写入 replication backlog。当断开的 slave 重新连接上 master 的时候,slave 将会发送 psync 命令(包含复制的偏移量 offset),请求 partial resync。如果请求的 offset 不存在,那么执行全量的 sync 操作,相当于重新建立主从复制。

 为了避免网络不稳定造成的全量同步.
修改参数如下:
config set repl-timeout 240
 config set repl-backlog-size 67108864

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm

Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis 安装部署学习笔记 http://www.linuxidc.com/Linux/2014-07/104306.htm

Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-05/131837.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3552字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中