2-Redis持久化、主从、哨兵、集群
2021-06-05 11:43:47 0 举报
AI智能生成
Redis持久化、主从、哨兵、集群
作者其他创作
大纲/内容
持久化
1、RDB
概念:在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。
两种方式
save
- 同步方式,会阻塞客户端命令
bgsave(默认)
- 异步方式,在主线程fork子线程时会短暂阻塞命令
命令
save 60 1000(60 秒内有至少有 1000 个键被改动)
2、AOF
概念:AOF 持久化,将修改的每一条指令记录进文件appendonly.aof中(先写入os cache,每隔一段时间 fsync到磁盘)
三种方式
- appendfsync always:每次有新命令追加到 AOF 文件时就执行一次 fsync ,非常慢,也非常安全。
- appendfsync everysec(推荐):每秒 fsync 一次,足够快,并且在故障时只会丢失 1 秒钟的数据。
- appendfsync no:从不 fsync ,将数据交给操作系统来处理。更快,也更不安全的选择。
AOF重写
针对同一个缓存,只取最终状态的值。(只关注最终结果)
3、混合持久(4.0以后)
前置:必须开启AOF
架构
1、主从
2、哨兵
缺点
- 主从切换的瞬间存在访问瞬断的情况
- 单个主节点不能存配置过大的内存,以免导致RDB文件过大
- 并发不是特别高
3、集群
通讯机制(gossip)
- meet
新节点加入时,发送meet,然后新节点开始和其他节点进行通信
- ping
每个节点都会频繁给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互相通过 ping交换元数据(类似自己感知到的集群节点增加和移除,hash slot信息等);
- pong
对ping和meet消息的返回,包含自己的状态和其他信息,也可以用于信息广播和更新;
- fail
某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节点宕机了。
网络抖动
cluster-node-timeout
表示当某个节点持续 timeout 的时间失联时,才可以认定该节点出现故障,需要进行主从切换。
集群选取原理
1、slave节点发现master变为fail,广播给其他节点。
2、只有master节点会响应,并发送FAILOVER_AUTH_ACK,对每一个 从节点(会有多个从节点)只发送一次ack
3、slave当接受到半数以上master的ack返回,这时该节点会被选举为新的master。
为什么集群节点的时基数的原因
多个节点接受一样的ack返回时
避免:延迟计算公式: DELAY = 500ms + random(0 ~ 500ms) + SLAVE_RANK * 1000ms
否则:进入下一轮周期选举
4、该选举成功的节点,以Pong消息通知其他集群节点。
集群脑裂问题
概念:出现多个主节点
避免:min‐replicas‐to‐write 1 :主节点至少同步给一个从节点,才算命令执行成功
批量操作命令
例:mset,mget这样的多个key的原生批量操作命令,需支持所有key落在同一槽点的情况
在对应key前面加上{user1}类似前缀,这样计算槽位时只会计算{}内的内容。
0 条评论
下一页