分布式特性
ElasticSearch 的分布式架构带来的好处
- 存储的水平扩展,支持 PB 级的数据;
- 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响;
ElasticSearch 的分布式架构
- 不同的集群通过不同的名字来区分,默认名字是 elasticsearch;
- 通过配置文件修改,或者命令行中 -E cluster.name=geektime 进行设定;
Master Eligible Node | 选主过程
- Master Eligible Node 会相互 Ping 对方,Node Id 低的会被选举为 Master Node;
- 其他节点会加入集群,但是不承担 Master 节点的角色,一旦发现被选中的主节点丢失,就会在其他节点中选举出新的 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 自己选择可以形成仲裁的节点;
- 典型的主节点选举现在只需要很短的时间就可以完成,集群的伸缩会变得更安全、更容易、并且可能造成丢失数据的系统配置选项更少了;
- 节点更清楚的记录了它们的状态,有助于诊断它们为什么不能加入集群或为什么无法选举出主节点;