说说你知道的Redis集群部署方案
有三种,主从、哨兵(Sentinel)、分片集群(cluster)
主从集群呢,一般是一主多从,主负责处理写,从负责读,分担主节点的压力,支撑高并发读。主从数据同步有全量同步增量同步两种
哨兵模式,主从集群时,主节点要是挂了就完蛋,于是哨兵模式出现了。哨兵可以通过投票机制监测主节点状态,当主节点挂掉了会自动选举新的master。
分片集群:这个主要是为了针对海量数据存储的问题。分片集群一共16384个槽,当任意请求过来的时候,接收请求的节点会将查询发送到正确的节点进行。具体存储到哪个槽是通过CRC16(key)&16383
计算结果决定的。
16384=
&
是位运算,比较快
追问:主从复制原理
- 当启动一个从节点时,它会发送一个 PSYNC 命令给主节点;
- 如果是从节点初次连接到主节点,那么会触发一次全量复制。此时主节点会启动一个后台线程,开始生成一份 RDB 快照文件;
- 同时还会将从客户端 client 新收到的所有写命令缓存在内存中。RDB 文件生成完毕后, 主节点会将RDB文件发送给从节点,从节点会先将RDB文件写入本地磁盘,然后再从本地磁盘加载到内存中;
- 接着主节点会将内存中缓存的写命令发送到从节点,从节点同步这些数据;
- 如果从节点跟主节点之间网络出现故障,连接断开了,会自动重连,连接之后主节点仅会将部分缺失的数据同步给从节点。
追问:哨兵模式的工作原理
- 每个Sentinel以每秒钟一次的频率向它所知道的Master,Slave以及其他 Sentinel实例发送一个 PING命令。
- 如果一个实例距离最后一次有效回复 PING 命令的时间超过指定值, 则这个实例会被 Sentine 标记为主观下线。
- 如果一个Master被标记为
主观下线
,则正在监视这个Master的所有 Sentinel要以每秒一次的频率确认Master是否真正进入主观下线状态。 - 当有足够数量的 Sentinel(大于等于配置文件指定值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。若没有足够数量的 Sentinel同意 Master 已经下线, Master 的
客观下线
状态就会被解除。 若 Master重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。 - 哨兵节点会选举出哨兵 leader,负责故障转移的工作。
- 哨兵 leader 会推选出某个表现良好的从节点成为新的主节点,然后通知其他从节点更新主节点信息。
追问:分片集群的工作原理
- 通过哈希的方式,将数据分片,每个节点均分存储一定哈希槽(哈希值)区间的数据,默认分配了16384 个槽位
- 每份数据分片会存储在多个互为主从的多节点上
- 数据写入先写主节点,再同步到从节点(支持配置为阻塞同步)
- 同一分片多个节点间的数据不保持一致性
- 读取数据时,当客户端操作的key没有分配在该节点上时,redis会返回转向指令,指向正确的节点
- 扩容时时需要需要把旧节点的数据迁移一部分到新节点
重生之八股仙帝 文章被收录于专栏
曾有一千古奇人,精修八股文,成遁世之高人,彻天彻地畅游天地间。 今人皆忙忙,急于求成,岂不知八股乃道门口径,背负天人,若经熟读背诵,更能开拓智慧之门,探寻未来之路。 天下繁华,不尽长夜,唯有读书为伴,熟读八股文更是攀登高峰之路。磨砺文字,升腾智慧,唯有勤玉立志,始可破天荒,登临九重不竭之巅! 吾辈修炼之路,虽曲折荆棘,但信念不曾磨灭,唯有铭记八股精髓,方能指引灵魂归宿,成就一生辉煌!