Redis模式:单机、主从、哨兵、集群

阅读数:94 评论数: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命令返回 有效回复 时,主服务器 的 主观下线状态 就会被移除。

 

四、集群模式

之前的模式数据都是在一个节点上,单个节点存储是存在上限的。集群模式把数据分片存储,当一个分片数据达到上限的时候,就分成多个分片。

1、数据分片怎么分?

集群的键空间被分割为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节点。

2、数据分片之后怎么查,怎么写?

读请求分配给slave节点,写请求分配给master,数据同步从master到slave节点,读写分离提高并发能力。

3、如何做到水平扩展

master节点可以做扩充,数据迁移redis内部自动完成。新增master节点时,redis服务不需要下线,槽会被重新分配,数据也需要重新迁移。

redis集群的重新分片由redis内部的管理软件redis-trib负责执行,redis提供了进行重新分片的所有命令,redis-trib通过向节点发送命令来进行重新分片。

4、如何故障转移

假如途中红色节点故障了,此时master3下面的从节会通过选举产生一个主节点,替换原来的故障工节点。

此过程和哨兵模式的故障转移一样。




相关推荐

一、redis-cli redis-cli,这个命令将打开redis终端。输入ping命令,如果有pong响应,说明正常启动。 用法:redis-cli [OPTIONS] [cmd [arg [ar

protected-mode是为了禁止公网访问redis,加强redis安全的。它启用的条件,有两个: (1)没有bind IP (2)没有设置访问密码。 <

前置知识 1、requirepass验证客户端,对登录权限做限制,redis每个节点的requirepass可以是独立、不同的。 <p

在集群模式下,redis在接收到键任何命令时会先计算该键所在的槽,如果改键所在的槽位于当前节点,则直接执行命令,如果改键位于其它节点,则不执行该命令,返回重定向信息。比如hello这

1、sentinel不会存储数据。 2、客户端不会直接从redis中获取信息,而是从sentinel获取信息。 3、sentinel的默认端口是26379 <

redis-cli keys "s*" | xargs redis-cli del 另外还可以用-n指定操作的数据库编号 redis-cli -n 2 keys "s*" | xargs redis-

psubscribe pattern [pattern] 与subscribe一样,只是可以使用*匹配符匹配多个channel

ZSCORE key member 如果member元素不是有序集key的成员,或key不存在,返回nil

1、官方文档 The timeout will only be cleared by commands that delete or overwrite the contents of the key

一、作用 如果为空就设置值,并返回1。 如果存在(不为空)不进行操作,并返回0。 二、setnx setnx是redis命令中的方法。 redis> SETNX mykey "Hello" (inte