【发布时间】:2017-08-01 08:30:24
【问题描述】:
是否可以部署一个可在 Kubernetes(或 Swarm 或任何其他自动化云环境)中运行的自我修复和可扩展的类似 Redis 的键值存储?
我在 Redis 中发现的挑战:
- 您需要使用
redis-trib手动创建集群 - 新节点需要显式添加到集群中
- 需要明确删除节点
- 节点不会在其分片中点对点复制数据,而是使用主从模型
上面的意思是下面的场景都会失败。我有一个简单的 3-master 和 3-slave 集群。 “Master A”失败,导致 Kubernetes 在
- 新的“Master A”不知道集群,不会加入
- 拥有数据副本的“Slave A”现在从新的“Master A”同步,并丢失所有数据,从而破坏了从属副本的目的
- 在全新的启动中,“Master A”可能在“Master B”之前启动,被初始化(假设我什至可以自动化集群初始化),在“Master B”准备好之前,因此“Master B”永远不会真正加入集群
问题:
- 有没有一种方法可以在没有任何人工交互的情况下自动执行 Redis 集群初始化和同步到不可预测的非持久存储中?
- 如果没有,是否有替代方案是干净的内存中键值存储(持久性对我来说不太重要),即自我修复和点对点工作?
Consul/etcd/zookeeper 都可以 100% 点对点和自我修复(这很棒),但它们的性能(据说)远低于 Redis 的内存 KV。它们不是建造的,例如用于查找每个 Web API 请求的会话。这部分是由于非分片(100% 副本),部分是由于磁盘写入。
Kafka 的模型(虽然是消息队列,而不是 KV 存储)也很有效(但依赖于底层的 zk):分区和副本,但本质上是自我修复的。我与一位经纪人交谈,它告诉我我的主题(“碎片”)在哪里,我明白了。
有没有什么方法可以使用 Redis 获得完全自治,以便我可以部署在 kube/swarm/cloud 中,或者提供与自治模型类似的性能的替代方案?
【问题讨论】:
标签: redis kubernetes consul