原理
1. 副本库通过slaveof 10.0.0.51 6379命令,连接主库,并发送SYNC给主库 2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库 3. 副本库接收后会应用RDB快照 4. 主库会陆续将中间产生的新的操作,保存并发送给副本库 5. 到此,我们主复制集就正常工作了 6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库. 7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在. 8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库 9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
主从数据一致性保证
min-slaves-to-write 1 至少保证一台从库和主库数据一致 min-slaves-max-lag 3 从库延时超过3秒也表示此次复制为失败
主库是否要开启持久化?
如果不开有可能主库重启操作,造成所有主从数据丢失!
主从复制实现
1、环境
准备两个或两个以上redis实例,主节点:6380,从节点:6381、6382 mkdir /data/638{0..2} 配置文件示例: cat >> /data/6380/redis.conf <> /data/6381/redis.conf <> /data/6382/redis.conf <<EOF port 6382 daemonize yes pidfile /data/6382/redis.pid loglevel notice logfile "/data/6382/redis.log" dbfilename dump.rdb [root@db01 ~]# ps -ef |grep redis root 11648 1 0 01:20 ? 00:00:00 redis-server *:6380 root 11652 1 0 01:20 ? 00:00:00 redis-server *:6381 root 11656 1 0 01:20 ? 00:00:00 redis-server *:6382 dir /data/6382 requirepass 123 masterauth 123 EOF 启动: redis-server /data/6380/redis.conf redis-server /data/6381/redis.conf redis-server /data/6382/redis.conf
2、开启主从
6381/6382命令行: redis-cli -p 6381 -a 123 SLAVEOF 127.0.0.1 6380 redis-cli -p 6382 -a 123 SLAVEOF 127.0.0.1 6380
3、查询主从状态
redis-cli -p 6380 -a 123 info replication redis-cli -p 6381 -a 123 info replication redis-cli -p 6382 -a 123 info replication