Redis系列(三)-Redis replication 实现主从复制(读写分离)

Redis replication 是一种 master-slave 模式的复制机制,这种机制使得 slave 节点可以成为与 master 节点完全相同的副本。数据流是单向的,master到slave

replication 主要用于解决两个问题:
1. 读扩展
一个 master 用于写,多个 slave 用于分摊读的压力。
2. 高可用
如果 master 挂掉了,可以提升(promote)一个 slave 为新的 master,进而实现故障转移(failover)。

redis replication完整流程
(1)slave node启动,仅仅保存master node的信息,包括master node的host和ip,但是复制流程没开始(master host和ip在redis.conf里面的slaveof配置)。
(2)slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
(3)slave node发送ping命令给master node
(4)口令认证,如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
(5)master node第一次执行全量复制,将所有数据发给slave node
(6)master node后续持续将写命令,异步复制给slave node

核心机制
第一次slave连接msater的时候,执行的全量复制。
(1)offset
master会在自身不断累加offset,slave也会在自身不断累加offset。
slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset。
(2)backlog
master node有一个backlog,默认是1MB大小。
master node给slave node复制数据时,也会将数据在backlog中同步写一份。
backlog主要是用来做全量复制中断候的增量复制的。
(3)master run id
info server,可以看到master run id。
如果根据host+ip定位master node,是不靠谱的,如果master node重启或者数据出现了变化,那么slave node应该根据不同的run id区分,run id不同就做全量复制。
如果需要不更改run id重启redis,可以使用redis-cli debug reload命令。

(4)psync
从节点使用psync从master node进行复制,psync runid offset。
master node会根据自身的情况返回响应信息,可能是FULLRESYNC runid offset触发全量复制,可能是CONTINUE触发增量复制。


实操

参考Redis系列(一)-CentOS7下Redis单机安装+自启动 在两台器安装redis。

服务器列表

  • Master node1(192.168.2.221)
  • Slave   node2(192.168.2.230)

1. 配置Master的redis配置文件
开启安全认证

requirepass 123456

2.配置Slave的redis配置文件

slaveof node1 6379
slave-read-only yes 默认开启
启用安全认证
masterauth redis

3.验证

在Master添加数据

 在Slave节点查询

 主从部署成功。

说明

若失败请检查:

1.关闭防火墙

2.redis配置远程访问

3.开发redis端口

3.压测

redis自己提供的redis-benchmark压测工具。

 

./redis-benchmark -h  localhost
-c <clients>       Number of parallel connections (default 50)
-n <requests>      Total number of requests (default 100000)
-d <size>          Data size of SET/GET value in bytes (default 2) 

 

执行结果,如下,响应时间百分比

 

 

 

 


posted @ 2021-08-11 16:21  攻城狮~2022  阅读(227)  评论(0编辑  收藏  举报
所有内容都是自己使用过程的总结,如有不严谨或者不正确的地方,麻烦大家留言指出,一起研讨。