Elasticsearch专栏-10.es集群读写过程及高可用

集群环境部署

es集群环境搭建过程,参考之前写的“Elasticsearch专栏-2.es环境安装

springboot集成

springboot集成es,无论其实单机还是集群,集成方法都是一样的。参考“Elasticsearch专栏-9.springboot集成es

集群读写过程

  • es集群组成结构
    在这里插入图片描述
    从上图中,可以看出来es集群的基本组成单元:

    1. es集群由多个节点组成,每个节点就是一个es实例。
    2. es实例会包含多个索引。每个索引由多个分片组成,
    3. es索引中每个分片就是一个独立的lucence索引。
    4. lucence索引是由多个segment构成。
    5. segment是倒排索引的文档集合。
    6. segment最终存入磁盘,不过在写入过程中,小的segment会合并成大的segment。
  • es集群读写过程
    在这里插入图片描述
    上图举例的索引是3个分片,每个主分片挂一个副本。现结合上图,简要说下es集群读写过程:
    写过程:

    1. 集群写入时,会先随机选取一个节点(node),该节点可以称之为“协调节点”。
    2. 新文档写入前,es会对其id做hash取模,来确定该文档会分布在哪个分片上。
    3. 当分片位置确定好后,es会判图当前“协调节点”上是否有该主分片。如果有,直接写;如果没有,则会将数据路由到包含该主分片的节点上。
    4. 整个写入过程是,es会将文档先写入主分片上(如p0),写完后再将数据同步一份到副本上(如r0)
    5. 待副本数据也写完后,副本节点会通知协调节点,最后协调节点告知客户端,文档写入结束。

读过程:
1.es引入副本的概念,除了做高可用外,再一个功能就是负载均衡。所以当一个读请求过来时(如根据id查文档),es集群随机选取一个节点作为协调节点处理请求。之后协调节点会对id做取模运算(和写入一样),确定该文档分布在哪些节点上(包含主分片、副本)。之后会将包含该文档主分片、副本所在的节点信息一起返回。由协调节点做负载均衡调用,获取结果。
2.如果做聚合计算,数据会分布在不同分片和节点上。此时,协调节点会将请求发至不同节点,由节点计算完数据后,一并返回给协调节点。协调节点在同一做汇总、聚合、分页等工作。最后将查询数据返回客户端。

高可用原理及验证

es集群高可用的原理是,当某一节点挂掉(或新增一个节点),原数据分片都会重新分配。以三个节点举例(索引分片为3主+1副):当节点挂掉时候,存储在另外两台机器上的该节点主分片对应的副本,其中一个会提升为主分片。而丢失的副本也会重新进行创建。验证结果如下:

原始节点

节点分片分布
88.207p1-r0
88.206p2-p0
88.110r1-r2

删除一个110节点

节点分片分布
88.207p1-r0-r2
88.206p2-p0-r1
88.110

重启110节点

节点分片分布
88.207r1-r0
88.206p0-r2
88.110p1-p2

新增101节点

节点分片分布
88.207r0
88.206p0
88.110p1-p2
88.101r1-r2

删除101节点

节点分片分布
88.207r0-r1
88.206p0-r2
88.110p1-p2
88.101
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值