【elastic search】详解elastic search集群

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 【elastic search】详解elastic search集群

1.与集群有关的一些概念

数据分片:

数据分片(shard),单台服务器的存储容量是有限的,把一份数据切分成很多份,每一份存储到不同的节点上去,从而减少单台的压力。

数据副本:

数据副本(replica),在分布式集群中,如果不做备份,单点故障会硬气数据丢失,应对办法是将一份数据复制成很多份,一份就是一个副本,将副本存储到不同的节点上去。

es在创建索引的时候会指定每个索引的数据分片喝数据副本各自的数量:

put /yx
{
    "settings":{
        "number_of_shards": 3,//分片数
        "numbser_of_replicas": 1//副本数
    }
}

2.集群搭建

集群规划:

cluster name,集群名称,同一集群下,所有node的cluster name要相同。

Node Name cluster name ip http tcp
node-01 yx-elastic 127.0.0.1 9201 9301
node-02 yx-elastic 127.0.0.1 9202 9302
node-03 yx-elastic 127.0.0.1 9203 9303

3.集群搭建

elasticsearch.yml:

三个节点的区别只在于node.name、数据路径、日志路径、http端口、tcp端口不同,其它都相同,此处以node-01为例。

#允许跨名访问
http.cors.enabled: true
#当设置允许跨域,默认为, 表示支持所有域名
http.cors.allow-origin: "*"
#允许所有节点访问
network.host: 0.0.0.0
#集群的名称,同一个集群下所有节点的集群名称应该一致
cluster.name: yx-elasticsearch
#当前节点名称 每个节点不一样
node.name: node-01
#数据的存放路径,每个节点不一样,不同es 服务器对应的data和log存储的路径不能一样
path.data: D:\es\elasticsearch-9301\data
#日志的存放路径
path.logs: D:\es\elasticsearch-9301\logs
#HTTP协议的对外端口,每个节点不一样,默认: 9200
http.port: 9201
#TCP协议对外端口 每个节点不一样,默认: 9300
transport.tcp.port: 9301
#三个节点相互发现,包含自己,使用TCP协议的端口号
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
#声明大于几个的投票主节点有效,设置为(nodes / 2) + 1
discovery.zen.minimum_master_nodes: 2
#是否为主节点
node.master: true
 

4.kibana链接集群

kibana.yml:

elasticsearch.hosts: ["http://localhost:9201"]

5.选举流程

Zen Discovery 进程:ES的每个节点都有一个Zen Discovery 组件,这个组件会启动一个Zen Discovery 进程,这个组件是集成在ES中的代码逻辑,它用于记录全局节点的信息,管理集群中节点的发现、加入、离开,以及主节点选举。也就是说每个ES节点上都存着一份全局节点的信息。


启动阶段: 当一个节点(Node)启动时,它会加入集群,并尝试与其他节点建立连接。这个节点会发送一个 "join" 请求,广播给当前集群中的所有节点。这个请求包含了节点的信息,比如节点的ID、地址和端口等。


选举过程:


首先是master节点的候选资格:


在 Elasticsearch 集群中,有一些节点被标记为 "master-eligible" 节点,这表示它们有资格成为主节点。这些节点在配置文件中的 node.master 属性为 true。

接下来是选举过程:


一旦有足够的主节点候选节点发现彼此并形成了一个集群,它们就会开始主节点选举的过程。这个过程需要多数(大多数)的主节点候选节点在线并参与选举,这也被称为“法定人数”(Quorum)。“法定人数”是为了避免脑裂(split-brain)情况,Elasticsearch要求一个法定人数的同意才能选举出一个新的主节点。在旧版本中(如7.x及以前),这是通过discovery.zen.minimum_master_nodes设置来配置的,它通常设置为(master-eligible nodes / 2) + 1。在更高版本中,这个设置已经被内置的选举机制替代,不需要手动配置。选举过程中采用节点之间相互投票的机制,选举出主节点来, 节点在决定给哪个节点投票时会考虑多个因素,包括节点的健康状况、网络稳定性、集群状态的完整性,以及节点的历史记录等。


故障检测: Zen Discovery 使用故障检测机制来确定节点是否可用。节点之间相互发送 Ping 和 Pong 消息以检测对方的状态。如果一个节点在一定时间内没有响应,它被认为是不可用的。一旦出现master节点不可用的状态,集群将会开启重新选举。需要进行重新选举的时候要是发现集群存货人数已经不及法定人数,那么集群将会对外拒绝服务。


持久化: 主节点的信息会被持久化存储,以便在节点重启后,集群能够快速地恢复到之前的状态。

6.请求流程

写请求处理流程(如索引或更新文档):

  1. 接收请求: 写请求可以发送到集群中的任何节点。该节点成为请求的协调节点。
  2. 确定主分片: 协调节点根据文档的ID和索引元数据来决定哪个主分片负责处理该文档。这通常是通过哈希文档ID来完成的。
  3. 转发请求: 协调节点将请求转发到托管该主分片的节点。
  4. 处理和复制: 主分片节点处理写请求(如索引或更新文档),然后将相同的操作复制到所有对应的副本分片。
  5. 确认和响应: 一旦主分片和所有必要的副本分片成功处理了请求,协调节点向客户端发送成功响应。

读请求处理流程(如搜索或获取文档):

  1. 接收请求: 读请求可以发送到集群中的任何节点。该节点成为请求的协调节点。
  2. 确定分片位置: 对于文档获取请求,协调节点会计算出哪个主分片或副本分片拥有该文档。对于搜索请求,协调节点确定要查询的所有相关分片。
  1. 查询分片: 协调节点并行地向那些托管相关分片的节点发送请求。读请求可以由主分片或任何副本分片来处理。
  2. 汇总结果: 对于搜索请求,协调节点从所有查询的分片收集结果,合并成一个全局的搜索结果。
  3. 响应客户端: 最终的结果被发送回给客户端。

7.master的作用

在Elasticsearch中,每个节点都维护着关于集群状态的本地副本,这包括了分片的分配和位置信息。这意味着协调节点通常能够独立地确定请求应该路由到哪个节点上,而不需要每次都查询主节点。那主节点的作用是什么喃?


主节点(Master Node)在Elasticsearch集群中扮演着关键的管理和协调角色。以下是主节点在集群中的主要职责和功能:


集群管理: 主节点负责整个集群的管理任务。这包括集群的创建、配置、状态监控以及集群范围内的一些操作。


节点协调: 主节点负责协调集群中的所有节点。它会与其他节点通信,确保集群中的每个节点都处于活动状态,同时负责监控节点的健康状况。


分片分配: 主节点负责决定每个分片(Shard)应该分配到集群中的哪个节点上。它会在节点加入或离开集群时重新分配分片,以保持集群的均衡和高可用性。


主节点选举: 如果当前的主节点出现故障或不可用,集群中的其他节点会通过选举机制选择一个新的主节点。主节点选举确保了即使主节点出现问题,集群也能够继续正常运行。


索引创建和删除: 主节点负责处理索引的创建和删除请求。当索引被创建时,主节点会决定每个分片应该在哪个节点上创建。


集群状态维护: 主节点维护着关于整个集群的状态信息,包括节点的健康状况、集群设置、索引元数据等。这些信息对于集群的正常运行非常重要。


路由请求: 主节点在协助客户端请求路由时发挥作用。虽然数据的实际读写操作是在数据节点上进行的,但主节点负责确定数据分布和分片的位置,从而协助请求的有效路由。


集群级别的操作: 主节点可以执行一些集群级别的操作,例如创建和删除索引、更新集群的设置、执行全局搜索等。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
27天前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
211 1
|
3月前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
114 7
|
4月前
|
存储 缓存 监控
|
1月前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
101 54
|
2天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
9 0
|
1月前
|
缓存 监控 Java
Elasticsearch集群JVM调优
Elasticsearch集群JVM调优
43 5
|
27天前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
45 1
|
27天前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
48 1
|
1月前
|
监控 安全 网络安全
Elasticsearch集群的网络设置
Elasticsearch集群的网络设置
32 3
|
1月前
|
缓存 监控 安全
优化Elasticsearch 集群配置
优化Elasticsearch 集群配置
68 4
下一篇
DataWorks