redis - 集群故障转移

标签 redis cluster-computing failover

我知道我在问一些关于集群故障转移的非常明显的问题。

我在 redis.io 上读到,如果任何主集群节点发生故障,它将影响其他主节点,直到从属节点接管为止。在我的结构中,我没有定义任何奴隶,只与 3 个主人一起工作。

我正在考虑修改 redis-trib.rb 文件,这将删除有缺陷的服务器并启动包含其他 2 个节点的集群。我对一些事情感到困惑,

1) 重新分片

Could not possible until failed server goes live

2) 创建集群的最少 3 个节点限制

As per bit understanding, redis-trib.rb not allowing me to create cluster for two nodes There might be some solution in code file :)

3) 使用事件节点重新创建新结构的自动方式

As programmer point of view, I'm searching something automatic for my system. Something that trigger one command when Redis Cluster fails some tasks happens internally. like

  • Shutdown all other redis cluster servers
  • Remove nodes-[port].conf files from all cluster nodes folder
  • Start redis cluster servers
  • Run "redis-trib.rb create ip:port ip:port"

我只是想尽量减少管理工作 :)。 否则我需要在这里实现一些其他算法“数据一致性”。

如果你们有任何解决方案或想法,请分享。

谢谢, 桑杰·莫纳尼

最佳答案

在只有主节点的集群中,如果一个节点发生故障,数据就会丢失。因此无法重新分片,因为无法将数据(哈希槽)迁移出故障节点。

为了在主节点发生故障时保持集群正常工作,您需要从节点(每个主节点一个)。这样,当一个 master 发生故障时,它的 slave 会进行故障转移(成为具有相同数据副本的新 master)。

redis-trib.rb 脚本不处理少于 3 个主节点的集群创建,但是在 redis-cluster 中,集群可以是任何大小(至少一个节点)。

因此,添加从节点可以认为是您问题的自动解决方案。

关于redis - 集群故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773968/

相关文章:

django - 让用户创建 celery 周期性任务

python - 如何在 Django 中通过 celery Worker 使用 Redis 更改模型对象的数据库值?

java - Quartz Scheduler 在集群模式下的所有节点上触发 cron 作业

node.js - NodeJS ZeroMQ,发送没有回调?

hibernate - 为特定查询禁用 Hibernate 二级缓存读取或更新

redis - 在 Ubuntu Server 14.04 中配置 Redis 集群

sql-server - 为 SQL Server 集群开发

mysql - Amazon RDS 多可用区扩展停机时间

java - ActiveMQ 集群可以有在不同传输协议(protocol)上运行的代理吗?

java - 使用代理网络中的临时队列的请求/回复模式的 ActiveMQ/Camel 故障转移 - 无法发布到已删除的临时队列