Redis学习笔记(七)

一、概述

之前的文章说过Redis主从复制及持久化,简单地实现了Redis高可用。然后,如果Master服务器宕机,会导致整个Redis瘫痪,这种方式的高可用性较低。正常会采用多台Redis服务器构成一个集群,即使某台,或者某几台Redis宕机,Redis集群仍能正常运行,从而提高其高可用性。

二、Redis集群实现方式

在Redis中,主要存在两种方式实现Redis集群机制:

Redis Sentinel集群机制:在Redis2.X版本,往往都是通过这种方式实现Redis的高可用。redis-sentinel是在master-slave机制上加入监控机制哨兵Sentinel实现的。

Redis Cluster集群机制:在Redis3.0版本后推出了redis-cluster集群机制。redis-cluster集群中各个节点之间是对等的,即master-master模式。

备注:Redis Sentinel集群是解决HA(High Availability)问题的(主从同步;Redis Cluster集群是解决sharding问题的(分区),两种不重复,可以混合使用。

Sharding机制:https://blog.csdn.net/basycia/article/details/52013098

HA机制:https://baike.baidu.com/item/%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7(HA)/2355576

接下来我们来讲解一下Redis的HA集群,哨兵的实现方式,Redis Cluster集群机制我们放到下一篇文章去讲解。

三、Redissentinel集群机制(哨兵方式、sentinel方式)

Redis-Sentinel是在master-slave机制上加入监控机制哨兵Sentinel实现的。Sentinel主要功能就是为Redis Master-Slave集群提供:

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

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

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

在Sentinel集群中,一个最小的Master-Slave单元包含一个master和一个slave服务器。当master失效后,sentinel自动将slave提升为master,从而可以减少管理员的人工切换slave的操作过程。

四、Redis-Sentinel集群架构图

我们采用一主(master)二从(slave)三sentinel的架构模式来演示,架构图如下图:

五、Redis-Sentinel集群配置

配置参数如下图:

1、修改Redis主服务器redis.windows.conf的配置文件

由于我们采用的是一主二从三sentinel的模式,所以我们需要6个配置文件,Redis主服务器redis.windows.conf的配置文件如下:

port 6379

bind 127.0.0.1

2、修改Redis6380从服务器redis.windows.conf的配置文件,如下图:

port 6380

bind 127.0.0.1

slaveof 127.0.0.1 6379 //设置master服务器为6379

同理修改Redis6381从服务器redis.windows.conf配置文件。

3、创建sentinel配置文件

新建三个空的文本文件(也有看到复制redis.windows.conf修改的),分别重命名为命名为sentinel6379.conf、sentinel6380.conf、sentinel6381.conf,三个配置文件分别放到Redis、RedisSalve6380、RedisSalve6381目录下,内容分别是:

sentinel6370.conf

#当前Sentinel服务运行的端口

port 26379

bind 127.0.0.1

sentinel monitor mymaster 127.0.0.1 6379 2

sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 15000

sentinel6380.conf

port 26380

bind 127.0.0.1

sentinel monitor mymaster 127.0.0.1 6379 2

sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 15000

sentinel6381.conf

port 26381

bind 127.0.0.1

sentinel monitor mymaster 127.0.0.1 6379 2

sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 15000

4、sentinel配置参数说明如下

port :当前Sentinel服务运行的端口。

sentinel monitor mymaster 127.0.0.1 6379 2:Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行。

sentinel down-after-milliseconds mymaster 5000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行。

sentinel parallel-syncs mymaster 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长。

sentinel failover-timeout mymaster 15000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败。

六、启动Redis及监控

首先将三个Redis按照为服务,安装命令如下:

格式:redis-server --service-install [confFile] --service-name [serviceName] --port [port]

示例:redis-server --service-install redis.windows.conf --service-name Redis6379 --port 6379

其次把sentinel安装为Windows服务,安装命令如下:

格式:redis-server --service-install sentinel.conf --sentinel --service-name RedisSentinel --port 26379

实例:redis-server --service-install sentinel6379.conf --sentinel --service-name redissentinel6379 --port 26379

七、查看Redis与sentinel的状态

1、首先查看Redis状态,如下图:

2、查看sentinel状态

八、redis主从自动failover测试

在主服务器上设置一个值,如下图:

我们停止Master服务,查看剩余服务的运行状态,如下图:

从上图中可以看出来,master的服务器端口从6379变成了6380,也就是说redis自动的实现了主从切换

注:可以在redis与sentinel安装为服务时启动日志记录(参数:--loglevel verbose),这样可以通过日期查看运行及切换过程。

参考网址:

http://doc.redisfans.com/topic/sentinel.html

https://www.cnblogs.com/xishuai/archive/2018/03/01/redis-sentinel.html

https://blog.csdn.net/realjh/article/details/82026160

https://blog.csdn.net/zhanglong_longlong/article/details/78434122

https://blog.csdn.net/liuchuanhong1/article/details/53206028#

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181002G18DG000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券