Elasticseach 的模型如何转化为这些高可用性模式?

How does Elasticseach's model translate into these High-Availability patterns?

我一直在研究可用性的 Elasticsearch 模型,您可以在其中创建具有主节点和数据节点的集群 [1],其中主节点控制集群,数据节点保存数据。您还可以为每个索引设置通过这些数据节点分布的多个分片和副本。

我还看到 [2] 高可用性模式通常是故障转移(主动-被动或主动-主动)和/或复制(主从或主控)的某种模型。但我无法将这些信息放在一起。我如何按照这种模式对这种模型进行分类?

还有 [3] 其他 NoSQL 数据库,如 MongoDB 具有类似的 HA 模型,并在 Kubernetes 中使用 StatefulSets 作为集群部署。我想更多地了解它是如何工作的。有什么提示吗?

参考文献:

[1] https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

[2]https://www.slideshare.net/jboner/scalability-availability-stability-patterns/33-What_do_we_mean_withAvailability

[3]https://kubernetes.io/blog/2017/01/running-mongodb-on-kubernetes-with-statefulsets/

Kubernetes 中的 StatefulSet

在分布式系统中,处理无状态 工作负载要容易得多,因为它不包含任何状态,而且将服务复制到任意数量的副本也很简单。在 Kubernetes 中,无状态工作负载由 ReplicaSet 管理(从 Deployment 部署)。

大多数服务都需要某种状态。 StatefulSet 在 Kubernetes 上管理 stateful 工作负载,它与 ReplicaSet 的不同之处在于由 StatefulSet 管理的 pods 具有唯一的身份,由一个序号,一个稳定的网络身份,和稳定的存储。

故障转移和复制

I also seen that High-Avalability patterns are usually some model of Fail-Over (Active-passive or Active-Active) and?/or Replication (Master-slave or Master-master). But I couldn't fit these information together. How can I classify this model in this patterns?

这些都是非常过时的模式。现在,Consensus algorthims is the norm for High-Availability and Fail-over since both these problems is about replication and leader-election. Raft (2013) is one of the most popular consensus algorithms and I can recommend the book Designing Data-Intensive Applications 如果您想详细了解 高可用性 故障转移 的问题复制共识.

Elasticsearch 似乎使用 consensus algorithm 进行聚类。任何 master-eligible 节点都可以被选为 master 并且建议至少拥有三个节点(为了高可用性)

节点的作用

a cluster with master nodes and data nodes, where master nodes control the cluster and data nodes hold data. You can also set for each index, a number of shards and replicas that are distributed through these data nodes.

节点在 Elasticsearch 集群中可以有多个角色。当你有一个小集群时,你的节点可以有多个角色,例如master-eligibledata 但随着集群增长到更多节点,建议为角色设置专用节点。