Linux学习-redis主从架构

Posted 丢爸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-redis主从架构相关的知识,希望对你有一定的参考价值。

redis主从架构

#三个节点,一主,二从(由于资源有限,在一台机器上实现),主节点写,从节点读
#1:创建目录
[root@redis opt]# mkdir 7001..7003
[root@redis opt]# ls
7001  7002  7003
#2:准备配置文件
[root@redis redis-6.2.7]# echo /opt/7001..7003/ | xargs -t -n 1 cp ./redis.conf
cp ./redis.conf /opt/7001/ 
cp ./redis.conf /opt/7002/ 
cp ./redis.conf /opt/7003/ 
#3:修改配置文件
#修改端口和存放目录
[root@redis redis-6.2.7]# sed -i -e 's/6379/7001/g' -e 's/dir .\\//dir \\/opt\\/7001\\//g' /opt/7001/redis.conf
[root@redis redis-6.2.7]# sed -i -e 's/6379/7002/g' -e 's/dir .\\//dir \\/opt\\/7002\\//g' /opt/7001/redis.conf
[root@redis redis-6.2.7]# sed -i -e 's/6379/7003/g' -e 's/dir .\\//dir \\/opt\\/7003\\//g' /opt/7001/redis.conf
#修改绑定IP
[root@redis redis-6.2.7]# sed -i '1a replica-announce-ip 192.168.115.129' /opt/7001/redis.conf
[root@redis redis-6.2.7]# sed -i '1a replica-announce-ip 192.168.115.129' /opt/7002/redis.conf
[root@redis redis-6.2.7]# sed -i '1a replica-announce-ip 192.168.115.129' /opt/7003/redis.conf
#4:启动三个redis实例
[root@redis redis-6.2.7]# redis-server /opt/7001/redis.conf 
[root@redis redis-6.2.7]# redis-server /opt/7002/redis.conf 
[root@redis redis-6.2.7]# redis-server /opt/7003/redis.conf 
#5:开启主从模式
#永久生效--修改配置文件
#临时生产,运行redis-cli客户端,输入slaveof | replicaof[5.0添加] <masterip> <masterport>
#使用临时进行配置
[root@redis opt]# redis-cli -p 7002
127.0.0.1:7002> SLAVEOF 192.168.115.129 7001
OK
[root@redis opt]# redis-cli -p 7003
127.0.0.1:7003> replicaof 192.168.115.129 7001
OK
#6:查看配置信息
127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.115.129,port=7003,state=online,offset=42,lag=1
slave1:ip=192.168.115.129,port=7002,state=online,offset=42,lag=0
master_failover_state:no-failover
master_replid:cfb5b6ff626956f4d77188601634b5004a114d88
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
#7:测试
127.0.0.1:7001> set num 123
OK
127.0.0.1:7001> get num
"123"
127.0.0.1:7001> exit
[root@redis opt]# redis-cli -p 7002
127.0.0.1:7002> get num
"123"
主从同步原理
master如何判断slave是不是第一次同步数据?
#1:Replication Id:简称replid是数据集的标记,id一致说明是同一数据集,每个master都有唯一的replid,slave会继承master节点的replid。
#2:offset:偏移量,随着记录在repl_backlog中的数据增多而逐渐增大,slave完成同步时也会记录当前同步的offset,如果slave的offset小于master的offset,说明slave数据落后master,需要更新。
主从同步流程
1.slave节点请求增量同步
2.master节点判断replid,发现不一致,拒绝增量同步
3.master节点执行bgsave保存当前完整内存生成RDB,发送RDB到slave
4.slave清空本地数据,加载master的RDB
5.master将生成RDB期间的命令记录在repl_backlog,并持续将log中命令发送至slave
6.salve执行接收到的命令,保持与master之前的同步
优化主从同步
1.master中配置repl-diskless-sync yes启用无磁盘读写,避免全量同步时的磁盘IO
2.Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO
3.适当提高repl_backlog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
4.限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构
全量同步和增量同步
全量同步:master将完整内存数据生成RDB,发送RDB给slave,后续命令则记录在repl_backlog,逐个发送给slave
增量同步:slave提交自己的offset到master,master获取repl_backlog中从offset之后的命令给slave

什么时候执行全量同步?
1.slave节点第一次连接master节点时
2.slave节点断开时间太久,repl_backlog中的offset已被覆盖时
什么时候执行增量备份?
1.slave节点断开又恢复,并且在repl_backlog中能找到offset时

以上是关于Linux学习-redis主从架构的主要内容,如果未能解决你的问题,请参考以下文章

redis学习篇主从&哨兵&集群架构详解

Redis主从与哨兵架构-学习

redis学习三,Redis主从复制和哨兵模式

redis主从哨兵模式

深入学习Redis:哨兵

Redis主从与哨兵架构详解 Redis主从架构 如何在同一台机器搭建主从架构 Redis主从工作原理 数据部分复制 Jedis使用 Redis的管道(Pipeline) Redis Lua脚本(代码