1. 弹性设计

    像es之类的分布式系统,在设计之初就考虑了部分组件宕机情况下的持续可用性。

    只要有足够多的节点持续提供服务,集群中个别节点宕机不会影响集群的正常运行。


    所有的es集群必须包括:

    一个选出的主节点节点、每个role至少一个节点、每个shard至少一个副本


    一个弹性的集群需要为每个必须的集群组件设置冗余。这表明,一个弹性集群必须包含:

    至少3个master-eligible节点、每个role至少2个节点、每个shard至少2个副本


    1. 小规模弹性集群

      在小规模集群中,最重要要考虑的是单点故障。


      • 单节点集群

        如果集群只包含一个节点,那么这个节点需要做所有的事情。

        这样的话,这个节点被es授予了所有的role。

        单节点集群是不足以支持弹性的。如果这个节点宕机,那么集群就停止工作了。

      • 双节点集群

        如果有两个节点,建议这两个均为数据节点。

        设置index.number_of_replicas为1,来保证每个shard冗余的保存在所有两个节点上。


        建议设置其中一个节点node.master为false,这表明由我们明确指定哪个节点作为master-eligible。

        集群可以容忍非master-eligible节点的丢失。


        如果不设置其中一个节点node.master为false,那么所有的两个节点都是master-eligible。这样的话,集群就不允许任何节点的丢失。


        默认的,每个节点都被分配了所有的role。建议是除了上述提到的master-eligible,其他所有role均分配在所有两个节点上。


        双节点也是不足以支持弹性,因此不建议生产环境部署双节点。

      • 双节点+tiebreaker集群

        通过添加第三个tiebreaker节点,来将三个节点都做为master-eligible。

        master的选举只需要三个master-elibble中的两个节点。这样的话就允许集群丢失任一节点。

        这个tiebreaker节点只作为专属投票、master-eligible节点,称为专属tiebreaker。

        这个节点不承担其他role,因此该节点的资源可以设置的比较小。


        双节点+tiebreaker集群是适应生产环境的最小化的弹性集群。

      • 三节点集群

        如果是三个节点,建议它们均为数据节点,每个index至少一个副本。

        需要配置每个节点均为master-eligible。


      • 更多节点集群

        当节点数增加到三个以上之后,可以开始为节点分配不同的职责。

        例如:data nodes 、 ingest nodes 、 machine learning nodes 等等。


        将master-eligible节点数限制为3个是比较好的。如果这种节点过多,那么选举时间会比较长。

        在大型集群中,建议将一些节点设置为专属master-eligible节点。

        也可以设置一些节点仅为投票节点,只参与投票从不被选为master。


      • 总结

        只要满足如下条件,集群就是弹性化的:

        cluster health status 是 green  ;

        至少两个data nodes;

        每个索引的每个shard至少有一个副本;

        集群至少有三个master-eligible节点,其中至少两个不是只投票节点;


    2. 大规模弹性集群

      异地容灾。

      es将节点共享的基础架构称为zone,可以理解为机房。


      可以通过cross-cluster search 或者 cross-cluster replication来将异地的集群link起来。

      即使集群间通信不如集群内通信稳定快速,这些功能仍然可以正常运行。


      为了冗余whole-zone的故障,每个shard的副本必须多于一个,这可以通过将data nodes放置在多个zone中,并配置shard allocation awareness来实现。

      必须考虑将所有的node在两个或多个zone间冗余。


      • two-zone集群

        如果有两个zone,在每个zone上的master-eligible节点数量必须不同。


        例如,如果有三个master-eligible节点,需要一个zone放1个,另外一个zone放置2个master-eligible节点。



      • two-zone+tiebreaker集群

        上面的two-zone模式允许丢失特定的一个集群,持有多数master-eligible的集群不能宕机。

        因此,可以选择添加第三处zone,三处各持有一个master-eligible。



        第三处zone的master-eligible应该被设置为专属投票,也成为专属tiebreaker。

        应该使用shard allocation awareness来确保每个zone的每个shard都有一个副本。


        如果选择添加tiebreaker zone,务必确保有充足的资源,以及到其他zone cluster良好的联通性 。


      • 三个或多个zone集群

        如果有三个zone,则每个zone一个master-eligible,如果多于三个zone,那么需要选择其中的三个放置master-eligible。

        同样的,也需要使用shard allocation awareness来确保每个zone、每个shard的副本数。


      • 总结


        需要满足如下条件,来保证集群的弹性:

        cluster health status 是 green  ;

        至少两个zone包含data nodes ;

        每个index、每个shard至少一个副本  ;

        配置shard allocation awareness 来保证副本数 ;

        集群至少包含三个master-eligible节点,至少其中两个是非只投票的,并且平均分布在至少三个zone上;






  • No labels