【问题标题】:Redis self-healing cluster or alternative in cloud, Kubernetes or Swarm?Redis 自愈集群或云、Kubernetes 或 Swarm 中的替代方案?
【发布时间】:2017-08-01 08:30:24
【问题描述】:

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

我在 Redis 中发现的挑战:

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

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

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

问题:

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

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

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

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

【问题讨论】:

    标签: redis kubernetes consul


    【解决方案1】:

    您可以使用与 Redis Sentinel 一起使用的 Kubernetes Redis 示例。如果 master 失败,sentinel 会将一个 slave 提升为新的 master。 Replication Controller 启动一个新的 Slave Pod。您的应用程序连接到哨兵,并从该服务中您将获得新主人的 ip。

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

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

    【讨论】:

    • 我之前也遇到过这个问题,但出于几个原因放弃了它。首先,我没有意识到哨兵不仅处理集群创建/加入/替换。所以我在使用哨兵时不需要任何redis-trib?第二,主从怎么办?当 kube 替换 master 时,sentinel 不会尝试将 slave 提升为 master,从而产生冲突,并可能清除数据?该示例不使用从站,它甚至可以与 sentinel+kube 一起使用吗?最后,我会假设 statefulset 优于部署(或 RC)?
    • 首先创建一个主 pod。这是唯一一个以大师身份开始的。 redis-controller 将所有 redis pod 启动为从属设备。您可以在启动文件中看到它。如果没有提供选项,redis 作为从属启动所有这些 pod 运行后,您可以删除主 pod,随机从 pod 将提升为新的主。从控制器重新创建的 pod 将作为新的从属设备启动。你不需要redis-trib。但是您的应用程序需要使用 sentinel 处理请求。
    • 我更喜欢使用部署而不是 statefulset。如果 master 崩溃,kubernetes 将删除 pod 并重新创建新的 slave。在这段时间内(1 分钟),它已经将另一个奴隶提升为主人。
    • 请注意,与 Redis Cluster 相比,Redis Sentinel 仅具有部分功能。在 k8s 中自动化 Redis Sentinel 部署应该很容易,有一个 Helm 图表专门用于此 (redis-ha)。
    • 保重,bitnami/redis sentinel 集成真的很脆弱,不稳定。甚至在第一次生产测试中都没有顺利运行,并且从未成功恢复。
    猜你喜欢
    • 2016-02-09
    • 2019-07-11
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多