当主服务器出现故障时,Redis 集群不会将 Slave 升级为主服务器

标签 redis

我在 Windows 2012 机器上运行一个 4 节点的 REDIS 集群。

我的设置是 1 个主站和 3 个从站。当我通过服务组件结束主服务时,我的所有从服务都不会自动提升为主服务。我如何让奴隶认识到主人失败并让他们在看到失败后立即晋升。下面是我的 Redis 配置。这是所有节点的相同配置文件,唯一的区别是每个节点的端口都不同

端口 30002 启用集群是 集群配置文件 nodes.conf 是的 日志级别通知 日志文件“日志” 系统日志启用是 系统日志标识 redis 最大内存 200mb 最大内存策略 volatile ttl

编辑

我还需要提供哪些其他信息才能更轻松地帮助解决此问题。

编辑 2

我的最终游戏是一个redis集群,我希望这个集群有1个master和3个slave。我想要一个集群超过 1 个主站和 3 个从站的设置的原因是,我想避免安装 REDIS Sentinel。我希望集群将奴隶提升为主人,而不是 redis 哨兵这样做。

我的安装过程如下

  • 创建 4 个文件夹(A、B、C、D)
  • 在每个文件夹中复制 REDIS 64 msi for windows
  • 在文件夹 A,B,C,D 中放入一个配置文件,就像上面的一样,但端口不同
  • 使用文件夹A、B、C、D安装redis服务
  • 启动所有服务
  • 为文件夹 A、B、C、D 举办 Redis Meetup
  • 将文件夹 A 的复制添加到文件夹 B、C、D
  • 将所有 key 分配给文件夹 A 上的 redis 实例

voila 集群设置,FOLDER A 是主文件夹,B、C、D 是 A 的从属文件夹。现在唯一的问题是,当 A 关闭时,没有一个从属文件夹(B、C、D)自动升级。

编辑

master的redis.conf文件

端口 30001 启用集群是 集群配置文件 nodes.conf 是的 日志级别通知 日志文件“日志” 系统日志启用是 系统日志标识 redis 最大内存 200mb 最大内存策略 volatile ttl

运行 sc stop redismasteralpha 之前集群节点的输出

05a73c800cccfd8b11d33232887570c52a326afe 10.144.62.3:30002 slave 20be3e69195744aa379124d19a836650c72c23ba 0 1478637832268 5 connected
20be3e69195744aa379124d19a836650c72c23ba 10.144.62.3:30001 master - 0 1478637837736 5 connected 0-16383
d60d3d0a9f12ef37c997fe44389996d8c7f19c2c 10.144.62.3:30000 myself,slave 20be3e69195744aa379124d19a836650c72c23ba 0 0 1 connected
fda22db5ed5d25e2a8fba82122b47818fba248ce 10.144.62.3:30003 slave 20be3e69195744aa379124d19a836650c72c23ba 0 1478637836644 5 connected

停止服务后

05a73c800cccfd8b11d33232887570c52a326afe 10.144.62.3:30002 myself,slave 20be3e69195744aa379124d19a836650c72c23ba 0 0 3 connected
d60d3d0a9f12ef37c997fe44389996d8c7f19c2c 10.144.62.3:30000 slave,fail 20be3e69195744aa379124d19a836650c72c23ba 1478637948956 1478637947808 5 disconnected
fda22db5ed5d25e2a8fba82122b47818fba248ce 10.144.62.3:30003 slave 20be3e69195744aa379124d19a836650c72c23ba 0 1478638078833 5 connected
20be3e69195744aa379124d19a836650c72c23ba 10.144.62.3:30001 master,fail? - 1478638034799 1478638031628 5 connected 0-16383

而且无论我等多久,master,fail状态都不会改变

服务停止后的集群信息

cluster_state:fail

cluster_slots_assigned:16384

cluster_slots_ok:0

cluster_slots_pfail:16384

cluster_slots_fail:0

cluster_known_nodes:4

cluster_size:1

cluster_current_epoch:5

cluster_my_epoch:5

cluster_stats_messages_sent:1075189

cluster_stats_messages_received:930887

最佳答案

据我所知,redis 集群不能在少于 3 个 master 的情况下工作。

redis cluster tutorial 上查看此注释:

Note that the minimal cluster that works as expected requires to contain at least three master nodes. For your first tests it is strongly suggested to start a six nodes cluster with three masters and three slaves.

关于当主服务器出现故障时,Redis 集群不会将 Slave 升级为主服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384794/

相关文章:

python - Flask 应用程序的 Celery 配置

azure - 是否可以更改 Azure Redis 数据库的数量?

scala - Redis 中的 "Null reply"到底是什么?

redis - 为什么我在 slave 的慢日志中看到 SET?

asp.net - NET API 中的 Azure Redis 超时

Redis - 存储频繁项集的数据结构

python - Redis pubsub 导致太多文件打开错误

redis - 如何从一组停止,并使用lua添加到另一组

redis - 是否可以检测到客户端断开连接?

mysql - Redis用户管理系统