一、环境介绍
Microsoft Windows 10 企业版
Sentinel是一个管理多个redis实例的工具,它可以实现对redis的监控、通知、自动故障转移。sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redis的状态,如果redis master不能工作,则会自动启动故障转移进程,将其中的一个slave提升为master,其他的slave重新设置新的master实例。也就是说,它提供了:
监控(Monitoring): Sentinel 会不断地检查你的主实例和从实例是否正常。
通知(Notification): 当被监控的某个 Redis 实例出现问题时, Sentinel 进程可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主redis实例失效时, Sentinel 会开始记性一次failover, 它会将失效主实例的其中一个从实例升级为新的主实例, 并让失效主实例的其他从实例改为复制新的主实例; 而当客户端试图连接失效的主实例时, 集群也会向客户端返回新主实例的地址, 使得集群可以使用新主实例代替失效实例。
Redis Sentinel自身也是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程, 这些进程使用流言协议(gossip protocols)来接收关于主Redis实例是否失效的信息, 然后使用投票协议来决定是否执行自动failover,以及评选出从Redis实例作为新的主Redis实例。
二、集群配置
(1)将下载好的Redis-x64-3.2.100解压到指定目录当中,得到以下文件列表
注:在真实的环境下,复制多份,在不同的机器下进行相应的配置。当前演示,创建不同的目录进行区分。
(2)创建以下目录:
master 主服务器,用于写操作。
slave 从服务器,用于读操作。
sentinel 管理多个redis实例的工具,它可以实现对redis的监控、通知、自动故障转移
(3)配置master、slave、sentinel
1.将目录中的redis.windows.conf复制一份到master和slave中。
2.maste目录中的redis6379.conf配置如下
#这里需要绑定一下机器IP地址,切勿使用默认地址127.0.0.1,最后说明原因。
bind 192.168.31.196
3.slave中的redis6380.conf配置如下
bind 192.168.31.196
port 6380
# 这里配置master的地址和端口号
slaveof 192.168.31.196 6379
#如果master有密码,配置如下
masterauth xxx
3.配置sentinel实例
创建sentinel26379.conf文件,复制以下内容
bind 192.168.31.196
port 26379
dir sentinel
sentinel monitor mymaster 192.168.31.196 6379 1
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
参数的相关解释请移步到:https://redis.io/topics/sentinel
三、启动Redis服务
打开windows的CMD命令窗口,在命令窗口下分别启动master、slave、sentinel
启动Master
D:\Redis>redis-server.exe master/master6379.conf
启动Slave
D:\Redis>redis-server.exe slave/slave6380.conf
注:出现上述信息,则代表主从复制已经配好。
启动Sentinel
D:\Redis>redis-server.exe sentinel/sentinel26379.conf --sentinel
#有的版本中会自带redis-sentinel客户端,没有则采用以上方式启动,在https://redis.io/topics/sentinel也有相关说明。
注:出现上述信息,配置成功;
四、使用Java客户端进行验证
(1)在Java项目中,引入jedis 2.9.0包到项目中,编写以下代码(只能贴图片了,在当前编辑器中,只能用图片代替,抱歉!!!)
(2)运行上述代码,出现图片所示,sentinel集群配置成功
五、常见问题
(1)为什么不能在配置文件中使用127.0.0.1?
解答:jedis在进行master服务器查找时,会将127.0.0.1转换为机器当前网卡物理IP。
(2)在一些其它的文档中,sentinel中没有配置bind?
解答:在当前这个版本中,如果不配置会提示一个绑定不到机器,为了统一,请绑定网卡的IP。