一 什么是主从复制
机器故障;容量瓶颈;QPS瓶颈
一主一从,一主多从
做读写分离
做数据副本
扩展数据性能
一个maskter可以有多个slave
一个slave只能有一个master
数据流向是单向的,从master到slave
1.1 原理
- 副本库通过slaveof ip port命令,连接主库,并发送SYNC给主库
- 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
- 副本库接收后会应用RDB快照
- 主库会陆续将中间产生的新的操作,保存并发送给副本库
- 到此,我们主复制集就正常工作了
- 再此以后,主库只要发生新的操作,都会以命令传递的形式自动发送给副本库.
- 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
- 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
- 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
1.2 主库是否要开启持久化1
- 如果不开有可能,主库重启操作,造成所有主从数据丢失!
1.3 辅助配置(主从数据一致性配置)
min-slaves-to-write 1
min-slaves-max-lag 3
#那么在从服务器的数量少于1个,或者三个从服务器的延迟(lag)值都大于或等于3秒时,主服务器将拒绝执行写命令
二 建立主从关系的配置
2.1 slave 命令
6380是从,6379是主
在6380上执行
slaveof 127.0.0.1 6379 #异步
slaveof no one #断开主从关系,不会把之前的数据清除
2.2 配置文件
slaveof ip port #配置从节点ip和端口
slave-read-only yes #从节点只读,因为可读可写,数据会乱
"""
配置:
daemonize yes
pidfile redis.pid
开放公网地址
#bind 0.0.0.0
#protected-mode no
port 6379
timeout 0
logfile redis.log
dbfilename dump.rdb
dir /data
slaveof 127.0.0.1 6379
slave-read-only yes
info查询主从关系
"""
注意:
- 不管是主库还是从库重启都会重新复制一遍数据到所有从库(导致复制风暴)
- 使用手动命令的方式是临时建立主从关系