【ElasticSearch教程】--- Elasticsearch 系统架构(二十三)

系统架构

ES集群架构图

概念

一个运行中的Elasticsearch实例称为一个节点,而一个Elasticsearch集群中包含一个或者多个拥有相同cluster.name配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

当一个节点被选举成为主节点时, 它将负责管理:集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 当主节点宕机后,副节点中的其中一个会成为主节点。

作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回给客户端。

分片与副本

索引数据存储在集群中时,可以设置分片数和副本数。P0,P1,P2是分片,而R0,R1,R2表示副本。但是分片对应的副本不能在同一个节点上,例如P0R0不会在同一个节点上。每一个分片里面的东西就是一个底层Lucence的索引,Lucence是一个全文检索引擎,所以每一个节点都是一个全文检索引擎,那访问任何一个节点都能搜索出数据,如果是查询Lucence会把满足条件的多个引擎的结果合并在一起。

单节点集群

在一个空节点的集群内创建名为orders的索引, 为了后续的演示,创建时分配3个主分片和一个副本(每个主分片拥有一个副本分片)。
创建索引
请求url:http://127.0.0.1:9201/orders,
请求body:

{
    "settings":{
        "number_of_shards":3,
        "number_of_replicas":1
    }
}

响应内容:

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "orders"
}

即创建了一个索引orders, 一共3个分片, 每个分片1个副本,那就会构成6个分片数据。
由于集群是一个拥有一个索引的单节点集群。所以所有3个主分片都会被分配在node-9201当中。
接下来可以使用elasticsearch head插件来进行查看,插件是使用可以查看文章https://blog.csdn.net/zenglingmin8/article/details/117488783
查看node-9201节点的状态:
集群状态
可以从单集群看出,健康值为yellow。因为有三个副本没办法创建出来。3个主分片都存在了node-9201节点上。
集权健康值:yellow(3 of 6):表示当前集群的全部主分片都正常运行,但是副本分片没有全部处在正常状态。
主分片
上图表示3个主分片正常。

副本未分配
上图表示3个副本分片都是Unassigned — 它们都没有被分配到任何节点。在同一个节点上既保存原始数据又保存副本是没有意义的。因为一旦失去了那个节点,我们也将失去该节点上所有副本数据。
当前集群是正常运行的,但是在硬件故障时有丢失数据的风险。

故障转移

当集群中只有一个节点在运行时,意味着会有一个单点故障问题----么有冗余。幸运的是,只需要启动一个节点即可防止数据丢失,启动第二个节点时,只要它和第一个节点有同样的cluster.name配置,它就会自动发现集群并加入到其中。(如果新节点在不同的机器上时需要配置单播主机列表)。
如果启动了第二个节点,集群会拥有两个节点的集群:所有主分片和副本分片都会被分配。
加入新节点后的状态
在我们启动了node-9202之后再查看elasticsearch head可以看到9202已经分配到了副本。 集群的状态也变为了 集群健康值: green (6 of 6) 绿色。

水平扩容

怎样为我们正在增长中的应用程序按需扩容,当启动第三个节点, 我们的集群将会拥有三个节点的集群:为了分散负载而对分片进行重新分配。
水平扩容分配的结果
node-9203启动之后节点自动将副本、分片进行了重新调整。加粗的为主分片。
分片原则:

  1. 主分片和副本不能在同一节点
  2. 分配尽量的均匀。

如果想扩容多余6个节点怎么办?

朱分片的数据在索引创建时就已经确定下来,实际上,这个数目定义这个索引能够存储的最大数据量。(实际大小取决于你的数据、硬件和使用场景。)但是,读操作— 搜索和返回数据 — 可以同时被主分片或副本分片所处理, 所以当你拥有越多的副本分片时, 也将拥有越高的吞吐量。
在运行中的集群上可以调整副本分片数目, 我们可以按需伸缩集群。让我们把副本数增加,使得最终的分片数(主分片+副本)超过节点数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值