Redis5版本集群搭建 (4)

(4)在从节点6381上,读操作执行成功,并且成功从6380上同步了数据;写操作执行失败。(从节点,只能读,不能写)

# 写操作执行失败提示 (error) READONLY You can\'t write against a read only replica. 4.3 Sentinel哨兵模式 4.3.1 主从模式的缺陷

当主节点宕机了,整个集群就没有可写的节点了。

问:由于从节点上备份了主节点的所有数据,那在主节点宕机的情况下,如果能够将从节点变成一个主节点,是不是就可以解决这个问题了呢?

答:是的,这个就是Sentinel哨兵的作用。

4.3.2 哨兵的任务

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会进行选举,将其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

4.3.2.1 监控(Monitoring)

  (1)Sentinel可以监控任意多个Master和该Master下的Slaves。(即多个主从模式)

  (2)同一个哨兵下的、不同主从模型,彼此之间相互独立。

  (3)Sentinel会不断检查Master和Slaves是否正常。

4.3.2.1 自动故障切换(Automatic failover)

监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息。

疑问:为什么要使用sentinel网络呢?

答:当只有一个sentinel的时候,如果这个sentinel挂掉了,那么就无法实现自动故障切换了。

  在sentinel网络中,只要还有一个sentinel活着,就可以实现故障切换。

4.3.2.2 故障切换的过程

(1)投票(半数原则)

  当任何一个Sentinel发现被监控的Master下线时,会通知其它的Sentinel开会,投票确定该Master是否下线(半数以上,所以sentinel通常配奇数个)。

(2)选举

  当Sentinel确定Master下线后,会在所有的Slaves中,选举一个新的节点,升级成Master节点。

  其它Slaves节点,转为该节点的从节点。

(3)原Master重新上线

  当原Master节点重新上线后,自动转为当前Master节点的从节点。

4.3.3 哨兵模式部署 4.3.3.1 需求

前提:已经存在一个正在运行的主从模式。

另外,配置三个Sentinel实例,监控同一个Master节点

4.3.3.2 配置Sentinel

(1)在/usr/local目录下,创建/redis/sentinels/目录

cd /usr/local/redis mkdir sentinels

(2)在sentinels目录下,依次创建s1、s2、s3三个子目录中

cd sentinels mkdir s1 s2 s3

(3)依次拷贝redis解压目录下的sentinel.conf文件,到这三个子目录中

cp /usr/local/src/redis-5.0.4/sentinel.conf s1/ cp /usr/local/src/redis-5.0.4/sentinel.conf s2/ cp /usr/local/src/redis-5.0.4/sentinel.conf s3/

(4)依次修改s1、s2、s3子目录中的sentinel.conf文件,修改端口,并指定要监控的主节点。(从节点不需要指定,sentinel会自动识别)

# s1 哨兵配置 port 26379 sentinel monitor mymaster 127.0.0.1 6380 2 # mymaster为主节点别名,127.0.0.1为主节点IP,6380为主节点端口,2为触发故障切换的最少哨兵数量 # s2 哨兵配置 port 26380 sentinel monitor mymaster 127.0.0.1 6380 2 # s3 哨兵配置 port 26381 sentinel monitor mymaster 127.0.0.1 6380 2

(5)再打开三个shell窗口,在每一个窗口中,启动一个哨兵实例,并观察日志输出

进入redis的安装目录,/usr/local/bin/,也可以不用进,因为前面的那个目录在环境变量中。

对于用redis-server启动哨兵的方式如下:

核心日志输出:

4.3.4 测试

(1)先关闭6380节点(kill掉)。发现,确实重新指定了一个主节点

(2)再次上线6380节点。发现,6380节点成为了新的主节点的从节点。

4.3.5 结论

  Sentinel哨兵模式,确实能实现自动故障切换。提供稳定的服务。

4.3.6 注意事项

如果哨兵和redis节点不在同一台服务器上,注意IP绑定的问题。

(1)主从模型,所有的节点,使用ip绑定

(2)所有的哨兵,也都使用ip去绑定主机

(3)所有的哨兵,都是通过主节点的ip,去监控主从模型

五、 Redis-cluster集群 5.1 哨兵模式的缺陷

在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。

我们知道只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,是不是就可以缓解写压力了呢?

答:是的。这个就是redis-cluster集群模式。

5.2 Redis-cluster集群概念

(1)由多个Redis服务器组成的分布式网络服务集群;

(2)集群之中有多个Master主节点,每一个主节点都可读可写;

(3)节点之间会互相通信,两两相连;

(4)Redis集群无中心节点。

5.3 集群节点复制

在Redis-Cluster集群中,可以给每一个主节点添加从节点,主节点和从节点直接遵循主从模型的特性。

当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能。

5.4 故障转移

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypzfx.html