双机房部署 Elasticsearch¶
背景¶
假设 es 按照下面的拓扑结构部署,可能存在一个问题:索引分片的(2 个)副本可能全部落在 zone-1,当 zone-1 发生灾难,则该分片的数据全部丢失。需要利用 es 自身的配置让分片的副本分布在 zone-1 与 zone-2。
操作步骤¶
-  
登录控制台,给集群中位于不同机房的 节点 打 label。假设 work1 work2 在一个机房,work3 在另一个机房:

 -  
es 的配置主要分为 2 部分,一部分是需要对 es 节点调度进行相应配置;二是需要对 es 的配置文件进行相关配置
 
节点调度配置¶
-  
在 es 的 yaml 中,我们需要配置 2 个 nodeSets(一个 nodeSet 对应一个 statefulset)

 -  
利用亲和性与反亲和配置,将其中两个 es 节点分布在 zone1,另一个 es 节点分布在 zone2:

 
配置文件配置¶
将 zone-1 与 zone-2 分为两个 nodeSet 后,就可以对他们的配置文件分开配置,相关的配置有:
- cluster.routing.allocation.awareness.attributes
 - node.attr.zone
 -  
cluster.routing.allocation.awareness.force.zone.values
 -  
对于 zone-1 的节点配置为:
 -  
对于 zone-2 的节点配置为: