主从复制
Redis主从复制是 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。
主要用途:
- 读写分离,性能扩展
- 容灾快速恢复

环境搭建
准备搭建一主二从环境, 环境有限, 三个redis server 在同一个环境, 端口号不同。准备主从redis.conf 配置文件, 这里只讲从机配置文件
include /usr/local/redis/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
replicaof *.*.*.* 6379
masterauth *********
protected-mode no
include 将主机的配置文件引入, 后续进行配置覆盖, 路径为绝对路径
pidfile port he dbfilename 都按照各自配置填写
replicaof 后面跟着ip 和 port 表示这个是这个主机的从机。如果不进行这个配置, 在三台机子启动后, 执行的slaveof ip port 命令的话, 只会在当前生效, 如果从机重启后会自动恢复成主机身份。所以这里进行配置文件配置, 让其以从机的身份启动。
masterauth 主机的鉴权密码
protected-mode 关闭保护模式, 方便自己进行测试
启动三个redis server




在主机执行info replication 命令




能够看到当前server的角色为 master, 下面有两个从机, 状态在线




能看到当前6380端口的角色是从机, 主机的ip 端口状态
主机新增一条数据, 能够在从机获取到, 但是从机无权修改数据, 从机只有读权限




复制原理
- Slave 连接到master 后, 会发送一个sync命令。这个只有启动时执行一次
- Master 接收到命令后, 启动后台的存盘进程, 同时收集所有接收到的用于修改数据集命令, 在后台执行完毕后, master传输整个数据文件到slave, 以完成一次全量同步
- 全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
一主二从
- 新的从机slave加入进来, 会从头复制主机数据, 全量复制
- 从机挂掉后, 重新启动, 从头全量复制主机数据
- 主机挂点后, 从机还是从机, 不会谋权篡位




显示主机的状态变为 down状态
薪火相传
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。




风险:
- 某个slave宕机,后面的slave都没法备份
- 主机挂了,从机还是从机,无法写数据了
反客为主
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。用 slaveof no one 将从机变为主机。这个需要手动执行命令, 下面说到的哨兵模式, 则是自动监控。
哨兵模式sentinel
哨兵模式是能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。




创建sentinel.conf配置文件
sentinel monitor mymaster *.*.*.* 6379 1
sentinel auth-pass mymaster ********
protected-mode no
配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义, *.*.*.* 代表监控的主服务器,6379代表端口,1代表只有一个或一个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel author-pass定义服务的密码,mymaster是服务名称,********是Redis服务器密码
执行 ./redis-sentinel ../sentinel.conf 启动哨兵, 然后将 6379 的shutdow




- 启动时, 获取到主机的两个从机slave slave 123.60.34.168:6380 123.60.34.168 6380 @ mymaster 123.60.34.168 6379 slave slave 123.60.34.168:6381 123.60.34.168 6381 @ mymaster 123.60.34.168 6379
- 监听到主机shutdown sdown master mymaster 123.60.34.168 6379
- 重选主机 switch-master mymaster 123.60.34.168 6379 123.60.34.168 6381
- 将原先的主机和从机置为现在master的从机 : slave slave 123.60.34.168:6380 123.60.34.168 6380 @ mymaster 123.60.34.168 6381 slave slave 123.60.34.168:6379 123.60.34.168 6379 @ mymaster 123.60.34.168 6381
- 由于6379 已经shutdown, sdown slave 123.60.34.168:6379 123.60.34.168 6379 @ mymaster 123.60.34.168 6381
- 6379 重启后, 则会将其置为master的从机
重选后, 看 sentinel.conf 的配置文件发生了变化, 监控的主服务器 和 端口发生了变化
重选标准
- 选择优先级靠前的, redis.conf 配置文件 replica-priority 100 值越小优先级越高
- 选择偏移量最大的, 偏移量是指获得原主机数据最全的
- 选择runId 最小的从服务 每个redis实例启动后都会随机生成一个40位的runid
以上就是redis 6 主从复制和哨兵模式的简单介绍, 如有错误请指正!!
Comments | NOTHING