×

Windows平台下的Redis-Sentinel集群配置

96
请叫我迪迪
2017.01.04 21:22* 字数 1206

一、环境介绍

Microsoft Windows 10 企业版

Redis-x64-3.2.100

jedis 2.9.0

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

master启动

启动Slave

D:\Redis>redis-server.exe slave/slave6380.conf

slave启动

注:出现上述信息,则代表主从复制已经配好。

启动Sentinel

D:\Redis>redis-server.exe sentinel/sentinel26379.conf --sentinel

#有的版本中会自带redis-sentinel客户端,没有则采用以上方式启动,在https://redis.io/topics/sentinel也有相关说明。

sentinel启动

注:出现上述信息,配置成功;

四、使用Java客户端进行验证

(1)在Java项目中,引入jedis 2.9.0包到项目中,编写以下代码(只能贴图片了,在当前编辑器中,只能用图片代替,抱歉!!!)

集群验证代码

(2)运行上述代码,出现图片所示,sentinel集群配置成功

执行结果

五、常见问题

(1)为什么不能在配置文件中使用127.0.0.1?

   解答:jedis在进行master服务器查找时,会将127.0.0.1转换为机器当前网卡物理IP。

JedisSentinelPool
HostAndPort

(2)在一些其它的文档中,sentinel中没有配置bind?

解答:在当前这个版本中,如果不配置会提示一个绑定不到机器,为了统一,请绑定网卡的IP。


最后说明:Linux下是否可以这样配置,还没有进行实际操作过,如果你有兴趣,可以尝试在Linux下进行操作。


六、参考资料

https://redis.io/topics/sentinel

http://www.cnblogs.com/LiZhiW/p/4851631.html

redis
Web note ad 1