linux网络闪断,Redis主从复制网络闪断处理

先记录几个有意思的用法

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的文章您也可能喜欢,不妨参考下:

Redis 的详细介绍:请点这里

Redis 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值