高可用
常用命令
1.slaveof
SLAVEOF <ip> <port>
SLAVEOF NO ONE
2.info replication
INFO REPLICATION
主从复制
全量复制: 从节点第一次连接的时候
增量复制: ...
怎么判断某个节点是否可用
主节点每10秒向从节点发送一次ping
主从复制中, 主节点某个key过期了如何处理
向从节点模拟一条del语句
主从复制是同步还是异步
客户端发送命令 -> 主节点执行命令 -> 主节点返回给客户端 -> 异步发送给从节点
主从复制的两个buffer有什么区别
repl backlog buffer: 环形缓冲区, 只有一个, 用户数据从新回复的增量更新
replication buffer: 每个节点分配一个, 用户存储要发送给从节点的数据
哨兵
哨兵是如何工作的
1.监控:
- 通过主观下限和客观下限判断, 每1s向所有节点发送一次ping, 当主节点被认定为客观下限后(主观下限的数量>=quorum值)
2.选主
- 首先选出leader哨兵, 通过客观下限后的哨兵被认为是候选者, 然后获取其他哨兵的投票, 当票数超过quorum时成为leader哨兵
- 故障转移过程
- 根据从节点优先级、便宜量、运行id选出新主节点, 执行slave no one
- 其他节点执行slave
指向新主节点 - 利用发布订阅机制通知客户端更换了主节点
- 旧主节点继续监控
3.通知
- 利用发布订阅机制通知客户端更换了主节点
为什么需要哨兵机制
需要高可用, 自动恢复故障
哨兵集群如何组成的
哨兵之间通过 sentinel : hello 频道相互发现
通过指定的配置文件例如下, 使用 info replication 获取主节点和从节点信息
port 26379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis_sentinel.log"
# 监控名为 mymaster 的主节点, 客观下限为2
sentinel monitor mymaster <master-ip> 6379 2
# 需要配置主节点密码
sentinel auth-pass mymaster master-password
# 若秒无法连接,就会认为它已宕机(主观下线)
sentinel down-after-milliseconds mymaster 5000
# 故障转移超时时间
sentinel failover-timeout mymaster 10000
# 一次只能有 1 个从节点 与新的主节点同步 避免压力过大
sentinel parallel-syncs mymaster 1