我们有一个设置:
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找到任何东西,我认为我只是在错误的方向搜索
所以问题是,如果没有人能指出我,这是否是正确的方向。
答案 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 :(得分:-3)
在Python中,如果你想知道你的Redis是否为主,请执行:
import redis
R = redis.Redis()
role = R.info()['role']
if role=='master':
print 'I am master'
else:
print 'I am slave'