Redis 支持简单且易用的主从复制(master-slave replication)功能,该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。
1.1 主从同步原理
- 无论是初次连接还是重新连接, 当建立一个从服务器时,从服务器都将向主服务器发送一个SYNC 命令;
- 接到SYNC 命令的主服务器将开始执行 BGSAVE ,并在保存操作执行期间,将所有新执行的写入命令都保存到一个缓冲区里面;
- 当BGSAVE 执行完毕后,主服务器将执行保存操作所得的 .rdb 文件发送给从服务器,从服务器接收这个 .rdb 文件,并将文件中的数据载入到内存中;
- 之后主服务器会以 Redis 命令协议的格式,将写命令缓冲区中积累的所有内容都发送给从服务器。
1.2 配置主从复制
1.2.1 修改从库配置文件
[root@centos7 ~]# vim /usr/local/redis/conf/redis_6380.conf slaveof 10.0.0.103 6379 # 配置master服务器IP和端口 masterauth 123456 # master服务器如果需要认证的话添加此项设置master登录密码 slave-read-only # 只读模式 min-slaves-to-write 2 # 从服务器不少于2台时才允许写入数据 min-slaves-max-lag 30 # 从服务器延迟不大于30秒,单位为秒
1.2.2 重启6380实例
1.2.3 查看主从关系
10.0.0.103:6380> role 1) "slave" 2) "10.0.0.103" 3) (integer) 6379 4) "connected" 5) (integer) 490 10.0.0.103:6381> role 1) "slave" 2) "10.0.0.103" 3) (integer) 6379 4) "connected" 5) (integer) 560 10.0.0.103:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=10.0.0.103,port=6380,state=online,offset=476,lag=1 slave1:ip=10.0.0.103,port=6381,state=online,offset=476,lag=0 master_replid:3b6a22da23ceeba2e687235987fa3d183bae732e master_replid2:0000000000000000000000000000000000000000 master_repl_offset:476 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:476
1.3 主库宕机后从库提升为主库
1.3.1 模拟master宕机
10.0.0.103:6379> shutdown
1.3.2 提升从库为主库
10.0.0.103:6380> slaveof no one OK
1.3.3 更改从库中新的主库
10.0.0.103:6381> slaveof 10.0.0.103 6380 OK
1.3.4 查看更新后状态
10.0.0.103:6380> info replication # Replication role:master connected_slaves:1 slave0:ip=10.0.0.103,port=6381,state=online,offset=5614,lag=1 master_replid:c7e63a2e44cdb808d2822e3c163f6104a3d3ef14 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:5614 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:5587 repl_backlog_histlen:28 10.0.0.103:6381> role 1) "slave" 2) "10.0.0.103" 3) (integer) 6380 4) "connected" 5) (integer) 5600
1.3.5 宕机重启后做从库加入集群
[root@centos7 ~]# vim /usr/local/redis/conf/redis_6379.conf masterauth 123456 10.0.0.103:6379> slaveof 10.0.0.103 6380 OK 10.0.0.103:6379> role 1) "slave" 2) "10.0.0.103" 3) (integer) 6380 4) "connected" 5) (integer) 6118

我的微信
如果有技术上的问题可以扫一扫我的微信