《Redis Sentinel集群部署》要点: 本文介绍了Redis Sentinel集群部署,希望对您有用。如果有疑问,可以联系我们。
什么是Redis Sentinel
Redis Sentinel是用来实现Redis高可用的一套解决方案.Redis Sentinel由两个部分组成:由一个或者多个Sentinel实例组成Sentinel系统;由一个主Redis服务器(Master Redis)和多个从Redis服务器(Slave Redis)组成主从备份的Redis系统.
Sentinel系统本身是一个分布式的系统,它的作用是监视Redis服务器,在Master Redis下线时,自动将某个Slave Redis提升为新的主服务器.Redis系统由Master Redis处理客户端的命令请求,Slave Redis作为主服务器的备份而存在.
Redis Sentinel主要作用
- 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常.
- 提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知.
- 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器.
Redis Sentinel系统架构图
Sentinel的原理并不复杂:
- 启动N个Sentinel实例,这些Sentinel实例会去监控你指定的Redis Master/Slaves.
- 当Redis Master节点挂掉后,Sentinel实例通过ping检测失败发现这种情况就认为该节点进入 SDOWN状态,也就是检测的Sentinel实例主观地(Subjectively)认为该Redis Master节点挂掉.
- 当一定数目(Quorum参数设定的Sentinel实例都认为该Master挂掉的情况下,该节点将转换进入ODOWN状态,也就是客观地(Objectively)挂掉的状态.
- 接下来Sentinel实例之间发起选举,选择其中一个Sentinel实例发起failover过程:从Slave中选择一台作为新的Master,让其它Slave从新的Master复制数据,并通过Pub/Sub发布事件.
- 使用者客户端从任意Sentinel实例获取Redis配置信息,并监听(可选)Sentinel发出的事件: SDOWN,ODOWN以及failover等,并做相应主从切换,Sentinel还扮演了服务发现的角色.
- Sentinel的Leader选举采用的是Raft协议.
构建Redis Sentinel集群
Redis Sentinel环境准备
?
一个一主多从的Redis系统中,可以使用多个Sentinel进行监控任务以保证系统足够稳健.此时,不仅Sentinel会同时监控主数据库和从数据库,Sentinel之间也会相互监控.在这里,建议大家Sentinel至少部署三个,并且使用奇数个Sentinel.
安装Redis和Sentinel
在三台服务器上分别安装Redis和Sentinel.需要注意的是,如果要给Redis设置密码,需要在三个Redis的配置文件中设置相同的密码.
安装的Redis版本必须在2.8版本以上.
$ apt-get install redis-server redis-sentinel
配置Redis和Sentinel
配置Redis
三台Redis主机配置类似,只是初次配置时角色不同.这里以主机dev-master-01 为例,其它两台按实际情况修改就行了.
Redis默认会绑定到127.0.0.1 ,这里要在多台机器间通信,我们将它绑定到主机IP上.
$ vim /etc/redis/redis.conf
bind 192.168.2.210
如果要给Redis设置密码,需要在三个Redis的配置文件中设置相同的密码.
$ vim /etc/redis/redis.conf
requirepass "000000"
设置主从复制
在两个Slave Redis的配置文件中声明所从属的主数据库.
$ vim /etc/redis/redis.conf
slaveof 192.168.2.210 6379
这里需要注意一点:当一个Master配置需要密码才能连接时,客户端和Slave在连接时都需要提供密码.Master通过requirepass 设置自身的密码,不提供密码无法连接到这个Master.Slave通过masterauth 来设置访问Master时的密码.
Sentinel可以切换主从数据库,主数据库可能会变成从数据库,所以三台机器上都需要同时设置requirepass 和masterauth 配置项.
$ vim /etc/redis/redis.conf
requirepass "000000"
masterauth "000000"
配置Sentinel
redis-sentinel软件包中默认包含了一个名为sentinel.conf 的文件,默认在/etc/redis/sentinel.conf .这里以主机dev-master-01 为例,其它两台配置类似,按实际情况修改就行了.
运行一个Sentinel所需的最少配置如下所示:
$ vim /etc/redis/sentinel.conf
daemonize yes
port 26379
bind 192.168.2.210
sentinel monitor redis-master 192.168.2.210 6379 2
sentinel down-after-milliseconds redis-master 5000
sentinel failover-timeout redis-master 180000
sentinel parallel-syncs redis-master 2
sentinel auth-pass redis-master 000000
sentinel notification-script redis-master /etc/redis/notify.sh
sentinel client-reconfig-script redis-master /etc/redis/failover.sh
logfile /var/log/redis/redis-sentinel.log
以上配置项说明:
以后台进程模式运行.
Sentinel实例之间的通讯端口,该端口号默认为26379.
Sentinel默认会绑定到127.0.0.1 ,我们将它绑定到主机IP上.
sentinel monitor redis-master 192.168.2.210 6379 2
(编辑:ASP站长网)
|