12.ElasticSearch系列之分布式特性及分布式搜索机制(一)
1. 分布式特性
- ElasticSearch的分布式架构带来的好处
- 存储的水平扩容,支持PB级数据
- 提高系统可用性,部分节点停止服务,整个集群服务不受影响
2. 脑裂问题
- Split-Brain 当出现网络问题,一个节点和其他节点无法连接,在各自的网络环境下,选举为各自主节点
如何避免脑裂问题?
- 限定一个选举条件,设置quorum(仲裁),只有当Master eligible节点数大于quorum时才能进行选举
- quorum=(master节点总数/2)+1,即大多数
- 从7.0开始,无需这个配置
3. 分片与集群的故障转移
- 主分片Primary Shard---提升系统存储容量
- 副本分片Replica Shard---提高数据可用性
- 集群状态get _cluster/_health
- Green健康:主分片与副本分片都可用
- Yellow亚健康:主分片都可用,副本分片部分不可用,如1个节点,分配了3个主分片,1个副本分片则无法分配,因为副本分片必须与主分片不在同一节点
- Red不健康:部分主分片不可用
- 故障转移
- 对于3个主分片与1个副本分片,分布在3个节点上node1: P1 R0 node2: P2 R1 node3: P0 R2,当node1节点出现故障后,则可故障转移node2:P2 R1 R0 node3: P0 R2 P1
4. 文档分布式存储
4.1 文档存储在分片上
-
文档会存储在具体的某个主分片和副本分片上,例如文档1,存储在P0和R0上
-
文档到分片的映射算法
- 确保文档均匀分布在所有分片上,充分利用硬件资源,避免部分繁忙部分空闲
- 潜在的算法
- 随机 / Round Robin.当查询文档1,分片数很多,需要多次查询才可能查询到它
- 维护文档到分片的映射关系,当文档数据量很大时,维护成本高
- 实时计算,通过文档1,自动算出,需要去哪个分片上获取文档
-
文档到分片的路由算法
shard=hash(_routing)%numbers_of_primary_shards- hash算法确保文档均匀分布到分片中
- 默认的_routing值是文档id
- 设置Index Settings后,这就是Primary主分片数不能随意修改的原因
- 可以自行定制routing数值,如相同国家商品分配到指定shard
PUT order/_doc/1?routing=china
{
...
}