Redis主从模式与哨兵模式
一、Redis(Master-Replicaset)主从复制
1.原理
1)画图说明

2)文字说明
1. 副本库通过slaveof 10.0.0.51 6379命令,连接主库,并发送SYNC给主库
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
2.8版本以后有了PSYNC功能:
8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
2.主从数据一致性保证
min-slaves-to-write 1 # 必须保证有1个从库写入
min-slaves-max-lag 3 # 从库的延时时间不能超过3秒
3.主库是否要开启持久化?
如果不开有可能,主库重启操作,造成所有主从数据丢失!
二、主从复制实现
1.环境准备
准备两个或两个以上redis实例
mkdir /data/638{0..2}
主节点:6380
从节点:6381、6382
2.编辑配置文件
cat >> /data/6380/redis.conf <<EOF
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
requirepass 123
masterauth 123
EOF
cat >> /data/6381/redis.conf <<EOF
port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
requirepass 123
masterauth 123
EOF
cat >> /data/6382/redis.conf <<EOF
port 6382
daemonize yes
pidfile /data/6382/redis.pid
loglevel notice
logfile "/data/6382/redis.log"
dbfilename dump.rdb
dir /data/6382
requirepass 123
masterauth 123
EOF
3.启动
redis-server /data/6380/redis.conf
redis-server /data/6381/redis.conf
redis-server /data/6382/redis.conf
4.开启主从
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
5.查询主从状态
redis-cli -p 6380 -a 123 info replication
redis-cli -p 6381 -a 123 info replication
redis-cli -p 6382 -a 123 info replication
6.解除主从
redis-cli -p 6381 -a 123 SLAVEOF no one
三、Redis哨兵模式 — redis-sentinel(哨兵)
1.画图说明
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pwJ4umlN-1619094453560)(C:\Users\86150\Desktop\数据库\img\image-20210422170834723.png)]](https://i-blog.csdnimg.cn/blog_migrate/c93fc9de3c59ac6eff9668470db0c51a.png)
2.文字说明
1、监控
2、自动选主,切换(6381 slaveof no one)
3、2号从库(6382)指向新主库(6381)
4、应用透明
5、自动处理故障节点
3.sentinel搭建过程
1)创建目录
mkdir /data/26380
cd /data/26380
2)编辑配置文件
vim sentinel.conf
port 26380
dir "/data/26380"
sentinel monitor mymaster 127.0.0.1 6380 1
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123
3)启动
启动:
[root@db01 26380]# redis-sentinel /data/26380/sentinel.conf &>/tmp/sentinel.log &
4)问题解决
如果有问题:
1、重新准备1主2从环境
2、kill掉sentinel进程
3、删除sentinel目录下的所有文件
4、重新搭建sentinel
5)停主库测试
redis-cli -p 6380 shutdown
redis-cli -p 6381
info replication
6)启动源主库(6380),看状态。
Sentinel管理命令:
redis-cli -p 26380
PING :返回 PONG 。
SENTINEL masters :列出所有被监视的主服务器
SENTINEL slaves <master name>
SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。
SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。
SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。