Elasticsearch集群:集群及相关概念

Elasticsearch集群:集群及相关概念

  • 集群:多个人做一样的事。

  • 分布式:多个人做不一样的事。

  • 节点(node) :集群中的一个 Elasticearch 服务实例。在Elasticsearch中,节点的类型主要分为如下三种:

    • master eligible节点:有资格参加选举成为Master的节点,默认为true(可以通过node.master: false设置)。

    • data节点:保存数据的节点,默认为true(可以通过node.data: false设置)。

    • Coordinating 节点:客户端节点。负责接收客户端请求,将请求发送到合适的节点,最终把结果汇集到一起返回,默认为true。

  • 集群(cluster):一组拥有相同集群名称的节点,集群名称默认是elasticsearch。

  • 索引(index) :es存储数据的地方,相当于关系数据库中的database。

  • 分片(shard):索引库可以被拆分为不同的部分进行存储,称为分片。在集群环境下,一个索引库的不同分片可以拆分到放到不同的节点中,分片的好处有如下两点。

    • 提高查询性能(多个节点并行查询)

    • 提高数据安全性(鸡蛋不要放在一个篮子里)

  • 主分片(Primary shard):相对于副本分片的定义。

  • 副本分片(Replica shard):即对主分片数据的备份,每个主分片可以有一个或者多个副本,数据和主分片一样,副本的好处有如下两点:

    • 数据备份,防止数据丢失

    • 一定程度提高查询的并发能力(同一份完整的索引库的数据,分成了两份,都可以查询)

主分片和副本分片永远不会分配在同一个节点上

Elasticsearch集群:路由原理

  • 文档存入对应的分片,ES计算分片编号的过程,称为路由。

  • Elasticsearch 是怎么知道一个文档应该存放到哪个分片中呢?

  • 查询时,根据文档id查询文档, Elasticsearch 又该去哪个分片中查询数据呢?

  • 路由算法 :shard_index(分片编号) = hash(文档id) % number_of_primary_shards(主分片个数)

Elasticsearch集群:脑裂问题

何为脑裂?

  • 一个正常es集群中只有一个主节点(Master),主节点负责管理整个集群。如创建或删除索引,并决定哪些分片分配给哪些节点。此外还跟踪哪些节点是集群的一部分。

  • 脑裂就是一个集群出现多个主节点从而使集群分裂,使得集群处于异常状态。简单来说就是一个集群里只能有一个老大来指挥工作,如果有多个老大,就乱套了。

脑裂原因

  1. 网络原因:网络延迟 一般es集群会在内网部署,也可能在外网部署,比如阿里云。 内网一般不会出现此问题,外网的网络出现问题的可能性大些。

  2. 节点负载 主节点的角色既为master又为data。数据访问量较大时,可能会导致Master节点停止响应(假死状态)。

  3. JVM内存回收 当Master节点设置的JVM内存较小时,引发JVM的大规模内存回收,造成ES进程失去响应

避免脑裂

脑裂产生的原因:

  • 网络原因:网络延迟较高

  • 节点负载:主节点的角色既为master又为data

  • JVM内存回收:JVM内存设置太小

避免脑裂:

  • 网络原因:discovery.zen.ping.timeout 超时时间配置大一点。默认是3S

  • 节点负载:角色分离策略

    • 主节点配置:

       node.master: true # 是否有资格参加选举成为master
       node.data: false # 是否存储数据
    • 数据节点配置:

       node.master: false # 是否有资格参加选举成为master
       node.data: true # 是否存储数据
  • JVM内存回收:修改 config/jvm.options 文件的 -Xms 和 -Xmx 为服务器的物理内存一半。

  • 还可以在选举层面解决脑裂问题(即不让第二个老大产生):

     # 声明获4得大于几票,主节点才有效,请设置为(master eligble nodes / 2) + 1
     discovery.zen.minimum_master_nodes: 5

Elasticsearch集群:故障迁移

集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移。

你可能感兴趣的:(elasticsearch,搜索引擎)