Linux学习-redis主从架构

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时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值