Redis哨兵实施

时间:2015-05-06 17:09:52

标签: php redis logstash predis redis-sentinel

我们有一个设置:
2个php服务器
2个redis服务器作为主/从运行 1日志服务器,用于存储弹性盘中的所有类型的日志

我们希望为redis服务器实现自动故障转移,现在在php服务器redis主地址中进行硬编码。

在日志服务器中,其中有一个带有来自master的redis输入的logstash实例也在logstash配置中被编码。

我们已在两台redis服务器上安装了redis sentinel,但它运行正常。

但问题是如何在php和logstash中获取master或者这不是正确的方法。

对于php,我发现了这个客户端包装器https://github.com/Sparkcentral/PSRedis

但是没有为logstash找到任何东西,我认为我只是在错误的方向搜索

所以问题是,如果没有人能指出我,这是否是正确的方向。

2 个答案:

答案 0 :(得分:5)

为了使用Sentinel,请记住您需要三个实例,因此在您的设置中,请确保在日志服务器中安装Sentinel实例,并在每个redis服务器实例中安装一个实例。 Sentinel的三个副本应该在被认为以彼此独立的方式失败的计算机/ VM上运行(因此同一物理主机中的多个VM不是一个好主意)。

也就是说,为了使用Sentinel,您的客户需要实现此处指定的Sentinel协议:http://redis.io/topics/sentinel-clients

https://github.com/Sparkcentral/PSRedis页面中,我找不到任何关于它们究竟实现的内容的提示,是否正在实施上述消息中指定的最新Sentinel协议?我会打开一个问题并询问他们是否实施了已记录的Sentinel协议:如果没有,他们应该,如果是,他们应该在README中记录它们。

显然,Predis本身尚未实施对Sentinel的支持:https://github.com/nrk/predis/issues/131

如果你有时间花钱,我建议:

  1. 询问PSRedis他们究竟实施了什么。
  2. 熟悉Sentinel文档中描述的协议,它是非常基本的东西
  3. 检查自己PSRedis是否以正确的方式实现它,如果没有,请提供拉取请求。
  4. 快乐的黑客攻击。

答案 1 :(得分:-3)

在Python中,如果你想知道你的Redis是否为主,请执行:

import redis

R = redis.Redis()
role = R.info()['role']
if role=='master':
   print 'I am master'
else:
   print 'I am slave'