Redis 自愈集群或云、Kubernetes 或 Swarm 中的替代方案?

标签 redis kubernetes consul

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

我发现 Redis 的挑战:

  1. 您需要使用redis-trib手动创建集群
  2. 新节点需要显式添加到集群
  3. 需要明确删除节点
  4. 节点不会点对点复制其分片中的数据,而是使用主从模型

上面的意思就是下面的场景都会失败。我有一个简单的 3-master 和 3-slave 集群。 “Master A”失败,导致 Kubernetes 在 <1 秒内启动一个新的“Master A”:

  • 新的“Master A”不了解集群,不会加入
  • 拥有数据副本的“从属 A”现在从新的“主控 A”同步,并丢失所有数据,破坏了从属副本的目的
  • 在全新的启动中,“Master A”可能在“Master B”之前启动,初始化(假设我什至可以自动化集群初始化),在“Master B”准备好之前,因此“Master B”从未真正加入集群

问题:

  1. 有没有一种方法可以在不可预测、非持久性存储中自动执行 Redis 集群初始化和同步,而无需任何人工交互?
  2. 如果没有,是否有一种干净的内存中键值存储(持久性对我来说不太重要)、 self 修复和点对点工作的替代方案?

Consul/etcd/zookeeper 都可以 100% 对等和 self 修复(这很棒),但它们的性能(据推测)远低于 Redis 内存 KV。它们不是 build 的,例如用于查找每个 Web API 请求的 session 。这部分是由于非分片(100% 副本),部分是由于磁盘写入。

Kafka 的模型(虽然是消息队列,不是 KV store)也很好用(但底层依赖于 zk):分区和副本,但本质上是自愈的。我与一位经纪人交谈,它告诉我我的主题(“分片”)在哪里,我明白了。

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

最佳答案

您可以使用与 Redis Sentinel 配合使用的 Kubernetes Redis 示例。万一主人失败,哨兵将奴隶提升为新主人。 Replication Controller 启动一个新的 Slave Pod。您的应用程序连接到哨兵,您将从该服务获得新主人的 ip。

Redis 哨兵 https://redis.io/topics/sentinel

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

关于Redis 自愈集群或云、Kubernetes 或 Swarm 中的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432730/

相关文章:

领事基础知识 : What is a service and how to I make one?

python - 如何使用redis存储和检索字典

ruby - Resque 工作在错误队列上的工作人员

c# - Redis master/slave如何将master的内容重写为slave

heroku - Heroku 分片上的 Redis

kubernetes - Prometheus找不到自行托管的Kubernetes集群的Apiserver

spring-boot - 微服务 : Zuul & consul in Spring cloud application

docker 从远程注册表拉两次

kubernetes - 如何在ReplicaSet/Deployment创建的Pod上创建LoadBalancer服务

docker - Docker环境下实现Consul healthcheck