Redis自我修复群集或云,Kubernetes或Swarm的替代方案?

时间:2017-08-01 08:30:24

标签: redis kubernetes consul

是否可以部署一个自我修复和扩展的类似Redis的键值存储,我可以在Kubernetes(或Swarm或任何其他自动云环境)中运行?

我在Redis中遇到的挑战:

  1. 您需要使用redis-trib
  2. 手动创建群集
  3. 需要将新节点明确添加到群集
  4. 需要明确删除节点
  5. 节点不会在其对等的分片中复制数据,而是使用主从模型
  6. 以上意味着以下方案都将失败。我有一个简单的3主机和3从机集群。 "大师A"失败,导致Kubernetes开始一个新的"大师A"在< 1秒内:

    • new" Master A"不了解群集,也不会加入
    • " Slave A",它拥有数据的副本,现在从新的" Master A"同步,并丢失所有数据,从而无法实现从属副本的目的
    • 在全新的创业公司中," Master A"可能会在" Master B"之前开始(假设我甚至可以自动化集群init),然后在#B; Master B"之前。准备就绪,因此"大师B"从来没有真正加入集群

    问题:

    1. 有没有办法在没有任何人工交互的情况下自动化Redis群集init并在不可预测的非持久存储中同步?
    2. 如果没有,是否有一个替代方案是一个干净的内存中键值存储(持久性对我来说不那么重要),那就是自我修复并且可以点对点工作吗?
    3. Consul / etcd / zookeeper所有工作都是100%点对点和自我修复(这很棒),但他们的表现(据称)远低于Redis内存中的KV。它们没有被构建,例如用于查找每个Web API请求的会话。这部分是由于非分片(100%拷贝),部分原因是磁盘写入。

      Kafka的模型(虽然消息队列,而不是KV商店)也运行良好(但取决于下面的zk):分区和副本,但基本上是自我修复。我和一个经纪人交谈,它告诉我我的主题(" shard")在哪里生活,我明白了。

      有没有办法可以使用Redis获得完全自主权,这样我就可以部署在kube / swarm / cloud中,或者提供与自主模型类似性能的替代方案?

1 个答案:

答案 0 :(得分:2)

您可以使用与Redis Sentinel配合使用的Kubernetes Redis示例。如果主设备发生故障,哨兵会将从设备提升为新主设备。 Replication Controller引导新的Slave Pod。您的应用程序连接到sentinel,从该服务您将获得新主服务器的IP。

Redis Sentinel https://redis.io/topics/sentinel

Kubernetes示例https://github.com/kubernetes/examples/tree/master/staging/storage/redis