redis主从复制之实现主从同步及主从切换

1.redis主从复制原理

主从复制是指将一台redis服务器的数据复制到其他的redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

2.全量同步与增量同步

2.1全量同步过程

slave发送sync命令到master,master启动一个后台进程,将redis中的数据快照保存到文件中。master将保存数据快照期间接收到的写命令缓存起来。master完成写文件操作后,将该文件发送给slave。slave使用新的RDB或AOF文件替换掉旧的RDB或AOF文件。

2.2增量同步过程

主从服务器在完成第一次同步后,主从节点进入命令传播阶段;在这个阶段主节点将自己执行的写命令发送给从节点,从节点接收命令并执行,从而保证主从节点数据的一致性。如果主从服务器间的网络连接断开了,那么就无法进行命令传播了,这时从服务器的数据就没办法和主服务器保持一致了,客户端就可能从【从服务器】读到旧的数据。
增量同步就是用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效。需要注意的是,如果网络中断时间过长,导致主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制。

3.实现主从同步

3.1环境说明

3.2部署redis

#三台主机同时进行如下操作
[root@redis-master ~]# yum install -y redis
[root@redis-master ~]# systemctl start redis
[root@redis-master ~]# vim /etc/redis/redis.conf
bind 0.0.0.0        #任何地址都可以访问
protected-mode no   #关闭安全模式
daemonize no        #后台运行
[root@redis-master ~]# systemctl restart redis
[root@redis-master ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master      #角色为主
connected_slaves:0
master_failover_state:no-failover
master_replid:617876b567ff15784b8d619ca49796d00fd9a514
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
【三台虚拟机角色都为主】

3.3配置主从同步

#三台主机同时进行如下操作
[root@redis-master ~]# vim /etc/redis/redis.conf
bind 0.0.0.0 
protected-mode no 
daemonize no
replicaof 192.168.31.100 6379  #添加此设置本主机为主节点master

#定位master
[root@redis-master ~]# redis-cli -p 6379
127.0.0.1:6379> info replication  
role:master   #为主
connected_slaves:0  #0个从
master_port:6379
127.0.0.1:6379> slaveof no one   #如果执行info replication语句出现了角色为slave,可能是之前设置的节点未清理干净,使用这个语句清除主机点再执行即可
OK

#定位slave1
[root@redis-slave1 ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
role:slave     #为从
master_host:192.168.31.100      #100为master
master_port:6379

#定位slave1
[root@redis-slave1 ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
role:slave       #为从
master_host:192.168.31.100      #100为master
master_port:6379

#定位master
127.0.0.1:6379> info replication
role:master
connected_slaves:2   #有两个从
slave0:ip=192.168.31.200,port=6379,state=online,offset=70,lag=0   #200和210为两个从
slave1:ip=192.168.31.210,port=6379,state=online,offset=70,lag=0

3.4测试

#定位master,在master上添加键值
[root@redis-master ~]# redis-cli -p 6379
127.0.0.1:6379> set master 192.168.31.100
OK
127.0.0.1:6379> get master
"192.168.31.100"

#定位slave1,查看master键对应的值
[root@redis-slave1 ~]# redis-cli -p 6379
127.0.0.1:6379> get master
"192.168.31.100"       #成功获取到master上添加的键值

#定位slave2,查看master键对应的值
[root@redis-slave1 ~]# redis-cli -p 6379
127.0.0.1:6379> get master
"192.168.31.100"         #成功获取到master上添加的键值

同步成功!

4.实现主从切换

当一个master宕机后,后面的slave可以立刻升为 master,原slave后的slave不用做任何修改。

#模拟主宕机
[root@redis-master ~]# systemctl stop redis
#定位slave1
[root@redis-slave1 ~]# redis-cli
127.0.0.1:6379> slaveof no one   #表示指定没有master,提升slave1为主
OK
127.0.0.1:6379> info replication
role:master     #slave为master
connected_slaves:0
127.0.0.1:6379> set cheng 234   #添加键值成功
OK
127.0.0.1:6379> get cheng
"234"
#定位slave2
[root@redis-slave2 ~]# redis-cli
127.0.0.1:6379> slaveof 192.168.31.200 6379  #临时设置slave1为主
OK
127.0.0.1:6379> info replication
role:slave   
master_host:192.168.31.200   #200slave2为主
master_port:6379
127.0.0.1:6379> get cheng   #获取键值成功
"234"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值