elasticsearch - Elasticseach 的模型如何转化为这些高可用性模式?
问题描述
我一直在研究 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
在分布式系统中,处理无状态工作负载要容易得多,因为它不包含状态,并且将服务复制到任意数量的副本是微不足道的。在 Kubernetes 中,无状态工作负载由 ReplicaSet(从 Deployment 部署)管理。
大多数服务都需要某种状态。StatefulSet管理Kubernetes 上的有状态工作负载,它与 ReplicaSet 的不同之处在于 StatefulSet 管理的 pod 具有唯一的身份,由序数、稳定的网络身份和稳定的存储组成。
故障转移和复制
我还看到高可用性模式通常是故障转移(主动-被动或主动-主动)和/或复制(主从或主-主)的某种模型。但我无法将这些信息放在一起。我如何在这种模式中对该模型进行分类?
这些都是相当过时的模式。现在,共识算法是高可用性 和 故障转移的规范,因为这两个问题都与复制和领导者选举有关。Raft (2013) 是最流行的共识算法之一,如果你想了解更多关于高可用性、故障转移、复制和共识的问题,我可以推荐这本书设计数据密集型应用程序。
Elasticsearch 似乎使用共识算法进行聚类。任何符合master资格的节点都可以被选为master,建议至少有3个(为了高可用)
节点的作用
具有主节点和数据节点的集群,其中主节点控制集群,数据节点保存数据。您还可以为每个索引设置通过这些数据节点分布的分片和副本的数量。
节点在 Elasticsearch 集群中可以有多个角色。当您有一个小型集群时,您的节点可以有多个角色,例如主资格和数据,但是随着您的集群增长到更多节点,建议为角色设置专用节点。
推荐阅读
- rust - Rust ndarray - 随机填充我指定的 ndarray 愿望形状
- spring - Spring Security 配置未正确授权
- python - 我如何使用 python 代码获取浏览器选项卡 URL
- python - 为什么我的 zip 文件没有从使用 python 的代码中输出?
- scala - Scala3 扩展基本类型和覆盖 ==
- python - 如何使用 itertools groupby 打印?
- python - Pytube:AttributeError:'str'对象没有属性'author'
- android - 在不使用数据库的情况下实现可靠的不间断倒数计时器的实用方法
- node.js - firebase 函数异步无法使用
- javascript - NUXT JS 动态多重搜索查询参数