0

我们有一个设置:
2 个 php 服务器
2 个作为主/从运行的 redis 服务器
1 个日志服务器,它将所有类型的日志存储在 elastcisearch

我们想为 redis 服务器实现自动故障转移,现在在 php 服务器 redis 主地址 ir 硬编码。

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

我们已经在两个 redis 服务器上安装了 redis sentinel,它工作正常。

但问题是如何掌握 php 和 logstash 或者这不是正确的方法。

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

但是还没有找到任何关于logstash的东西,我怀疑我只是在寻找错误的方向

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

4

2 回答 2

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 以正确的方式实现它,如果没有,请提供拉取请求。

快乐的黑客。

于 2015-05-07T10:04:59.240 回答
-3

在 Python 中,如果您想知道您的 Redis 是否是大师,请执行以下操作:

import redis

R = redis.Redis()
role = R.info()['role']
if role=='master':
   print 'I am master'
else:
   print 'I am slave'
于 2015-05-07T10:42:37.473 回答