ElasticSearch | 集群分布式模型 | 选主 | 脑裂

分布式特性

ElasticSearch 的分布式架构带来的好处
  • 存储的水平扩展,支持 PB 级的数据;
  • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响;
ElasticSearch 的分布式架构
  • 不同的集群通过不同的名字来区分,默认名字是 elasticsearch;
  • 通过配置文件修改,或者命令行中 -E cluster.name=geektime 进行设定;

伪分布式的配置文件

node-1
cluster.name: dianping-app
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]
node-2
cluster.name: dianping-app
node.name: node-2
network.host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]
node-3
cluster.name: dianping-app
node.name: node-3
network.host: 127.0.0.1
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]

Master Eligible Node | 选主过程

  • Master Eligible Node 会相互 Ping 对方,Node Id 低的会被选举为 Master Node;
  • 其他节点会加入集群,但是不承担 Master 节点的角色;
  • 一旦发现被选中的 Master Node 丢失,就会在其他 Master Eligible Node 中选举出新的 Master 节点;

脑裂问题 | Split-Brain

  • 脑裂问题是分布式系统的经典网络问题,当出现网络问题时,一个节点和其他节点无法连接,比如:
  • 原来集群中有 3 个节点,Node1 是 Master Node,Node2 和 Node3 是 Master Eligible Node;
  • 当发生网络问题时,Node2 和 Node3 会重新选举 Master;
  • Node1 自己还是作为 Master 组成一个集群,同时更新 Cluster Node;
  • 此时会导致 2 个 Master Node 维护了不同的 Cluster State,当网络恢复后,无法选择正确的 Cluster State 恢复;

如何避免脑裂问题

  • 限定一个选举条件,设置 quorum,只有在 Master Eligible Node 节点数大于 quorum 时,才能进行选举;
  • Quorum = (Master Eligible Node / 2)+ 1;
  • 当 3 个 Master Eligible Node 时,设置 discovery.zen.minimum_master_nodes 为 2,即可避免脑裂;
从 7.0 开始,无需配置 minimum_master_nodes
  • 移除 minimum_master_nodes 参数,让 ElasticSearch 自己选择可以形成仲裁的节点;
  • 典型的主节点选举,现在只需要很短的时间就可以完成,集群的伸缩会变得更安全、更容易、并且可能造成丢失数据的系统配置选项更少了;
  • 节点更清楚的记录了它们的状态,有助于诊断它们为什么不能加入集群或为什么无法选举出主节点;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容