我一直在研究Elasticsearch可用性模型,其中您创建具有主节点和数据节点的集群[1],其中主节点控制集群,数据节点保存数据。您还可以为每个索引设置通过这些数据节点分布的许多分片和副本。
我也看到了[2],高可用性模式通常是故障转移(主动-被动或主动-主动)和/或复制(主从机或主-主)的某种模型。但是我无法将这些信息整合在一起。如何按照这种模式对模型进行分类?
[还有[3]个其他NoSQL数据库,例如MongoDB,具有类似的HA模型,并使用Kubernetes中的StatefulSets部署为集群。我想更多地了解它的工作原理。有任何提示吗?
参考:
[1] https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
[3] https://kubernetes.io/blog/2017/01/running-mongodb-on-kubernetes-with-statefulsets/
Kubernetes中的StatefulSet
在分布式系统中,处理stateless工作负载要容易得多,因为它包含更多状态,并且将服务复制到任意数量的副本很简单。在Kubernetes中,无状态工作负载由ReplicaSet管理(从Deployment部署)。
大多数服务都需要某种状态。 StatefulSet管理Kubernetes上的stateful工作负载,它与ReplicaSet的不同之处在于,由StatefulSet管理的Pod具有唯一的身份,该身份由序数,稳定的网络身份和稳定的存储组成。
故障转移和复制
我还看到高可用性模式通常是故障转移(主动-被动或主动-主动)和/或复制(主从或主-主)的某种模型。但是我无法将这些信息整合在一起。如何按照这种模式对模型进行分类?
这些是非常过时的模式。现在,Consensus算法是高可用性 和 故障转移的准则,因为这两个问题都是关于复制和领导选举的。 Raft(2013)是最受欢迎的共识算法之一,如果您想进一步了解High-Availability,Fail-over,< [复制者和共识。
Elasticsearch似乎将Designing Data-Intensive Applications用于其聚类。任何master-eligible
节点都可以当选为master,建议至少有三个(出于高可用性)节点的作用
具有主节点和数据节点的群集,其中,主节点控制群集,数据节点保存数据。您还可以为每个索引设置通过这些数据节点分布的许多分片和副本。
节点在Elasticsearch集群中可以扮演多个角色。当您拥有小型群集时,您的节点可以具有多个角色,例如
master-eligible
和data都可以,但是随着群集增长到更多节点,建议为角色分配专用节点。