Redis模式:单机、主从、哨兵、集群
阅读数:159 评论数:0
跳转到新版页面分类
应用软件
正文
一、单机模式
1、优点
(1)部署简单
(2)成本低
(3)高性能,因为不需要同步数据
2、缺点
(1)可靠性差
二、主从复制模式
主从模式配置很简单,只需要在从节点配置主节点的ip和端口号即可。
#slaveof <masterip> <masterport>
# 例如
slaveof 192.168.1.214 6379
从节点可以分担主节点读压力,一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
三、哨兵模式
哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。主节点和从节点都是数据节点。
访问redis集群的数据都是通过哨兵集群,哨兵监控整个redis集群。这时当主节点宕机,从节点会切换过来。而应用服务是无感知的,也不用更改访问地址,因为哨兵才是和应用服务做交互的。
除此之外,Sentinel(哨兵)还可以做主节点存活检测、主从运行情况检测、主从切换。
1、原理
每个Sentinel以 每秒钟 一次的频率,向它所有的 主服务器、从服务器 以及其他Sentinel实例 发送一个PING 命令。
如果一个 实例(instance)距离最后一次有效回复 PING命令的时间超过 down-after-milliseconds 所指定的值,那么这个实例会被 Sentinel标记为 主观下线。
如果一个 主服务器 被标记为 主观下线,那么正在 监视 这个 主服务器 的所有 Sentinel 节点,要以 每秒一次 的频率确认 该主服务器是否的确进入了 主观下线 状态。
如果一个 主服务器 被标记为 主观下线,并且有 足够数量 的 Sentinel(至少要达到配置文件指定的数量)在指定的 时间范围 内同意这一判断,那么这个该主服务器被标记为 客观下线。
在一般情况下, 每个 Sentinel 会以每 10秒一次的频率,向它已知的所有 主服务器 和 从服务器 发送 INFO 命令。
当一个 主服务器 被 Sentinel标记为 客观下线 时,Sentinel 向 下线主服务器 的所有 从服务器 发送 INFO 命令的频率,会从10秒一次改为 每秒一次。
Sentinel和其他 Sentinel 协商 主节点 的状态,如果 主节点处于 SDOWN`状态,则投票自动选出新的主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制。
当没有足够数量的 Sentinel 同意 主服务器 下线时, 主服务器 的 客观下线状态 就会被移除。当 主服务器 重新向 Sentinel的PING命令返回 有效回复 时,主服务器 的 主观下线状态 就会被移除。
四、集群模式
之前的模式数据都是在一个节点上,单个节点存储是存在上限的。集群模式把数据分片存储,当一个分片数据达到上限的时候,就分成多个分片。
集群的键空间被分割为16384个slots(即hash槽),通过hash的方式将数据分到不同的分片的。
HASH_SLOT = CRC16(key) & 16384
CRC16算法产生的hash值有16bit,可以产生$2^16=65536$个值,为什么取16384 ($2^14$)进行模运算呢?
redis节点发送心跳包时需要把所有槽放到这个心跳包里,以便 让节点知道当前集群信息,在发送心跳包时使用char进行bitmap压缩后是2K($2\times 8(8 bit)\times 1024 = 16384$),也就是说使用2k的空间创建了16k的槽数。
如果使用65536,压缩后就是8K,也就是需要8K的心跳包,作者认为这样做并不太值得,并且一般情况下一个redis集群不会超过1000个master节点。
读请求分配给slave节点,写请求分配给master,数据同步从master到slave节点,读写分离提高并发能力。
master节点可以做扩充,数据迁移redis内部自动完成。新增master节点时,redis服务不需要下线,槽会被重新分配,数据也需要重新迁移。
redis集群的重新分片由redis内部的管理软件redis-trib负责执行,redis提供了进行重新分片的所有命令,redis-trib通过向节点发送命令来进行重新分片。
假如途中红色节点故障了,此时master3下面的从节会通过选举产生一个主节点,替换原来的故障工节点。
此过程和哨兵模式的故障转移一样。