首页 > 其他分享 >Es集群架构的搭建以及集群的核心概念

Es集群架构的搭建以及集群的核心概念

时间:2024-07-08 10:20:29浏览次数:9  
标签:node 结点 副本 架构 集群 分片 节点 Es

1、深入理解ES集群架构的底层原理

这篇主要讲解es的集群架构的底层原理,es的索引分片,副本等基本知识

集群的核心概念

在安装集群之前,先了解一下集群的几个概念。

如下图 ,就是一个三个节点组成的es集群,p0、p1、p2表示一个节点中的分片,R0、R1、R2表示分片对应的副本

 1.1 节点以及节点类型

  一个集群中可以有一个或者多个节点,每一个节点就是一个Es的实例,其本质就是一个java进程。一般在一台机器上,建议运行一个ElasticSearch的实例。在Es集群中,存在多种节点类型,主要有以下几种节点,在搭建es集群时,需要根据不同的结点类型设置不同的参数。每个结点在启动之后,默认就是一个可以参与选举的 Master eligible 结点

 

  • Master Node:主节点,如上图中的Node1就是master主节点,主要是负责一些索引的创建、删除、决定分片要分配到哪个结点、维护整个集群的更新等
  • Master eligible nodes:可以参与选举的合格节点,当主节点挂了该节点就可以参与选举,该节点也是Master主结点的一个从结点
  • Data Node:专门用于存放数据的节点,如索引插入的数据就是存放在这个节点中。由master主结点负责如何将分片分发到数据节点上,通过数据节点解决数据的水平扩展和解决数据的单点问题。
  • Coordinating Node:协调节点,用于接收和响应请求,完成数据的接收和分发

1.2 请求和响应流程

  一个简单的es的集群架构如下,在一个客户端的请求下,首先会经过这个协调结点的接收和分发,让请求具体落实到Data Node数据节点,或者是Master主结点。如果是查询数据,可以直接分发到Data数据节点,如果是增删改,需要涉及到集群,分片或者副本的变化,那么可以直接分发到这个Master主结点上面。

  在将数据从结点的分片中查询之后,又会将数据汇总到这个Coordinating 协调结点上面,经过一些统计计算等,最后将结果返回

  如果es要做读写分离来增加高性能的话,可以增加这个Ingest Node结点,该节点名为前置处理转换结点,支持pipeline管道设置,可以使用这个Ingest节点对数据进行过滤以及转换操作

1.3 分片 

  在创建索引时,可以指定索引分片的个数,副本的个数等。分片又可以分为主分片和副本分片。

  • 主分片 :Primary Shard,主要是用于解决数据水平扩展的问题,通过主分片,可以将数据分发到集群的所有结点上面,每一个分片是一个Lucene的一个实例,分片在创建之后,不允许被修改,因为获取数据需要通过hash取模运算,改了数量就会直接影响结果
  • 副本分片 : Replica Shard,用于解决数据高可用的问题,就是主分片的一个拷贝,主分片数在创建之后不允许被修改,副本分片数是允许被修改的,并且在一定程度上,可以通过增加副本数来提高服务读取数据的性能。但是副本分片最好是设置成0或者1,如果是日志数据,可以直接设置为0,如果是商品信息这种检索数据,那么可以直接设置成为1。

如下面在创建索引的时候,可以设置分片的数量以及设置副本的数量。

PUT /zhs_db
{
  "settings": {
    "number_of_shards": 3,        //设置分片数
    "number_of_replicas": 1        //设置副本数
  }
}

  分片数和节点数有关,如有一个三个节点组成的集群,那么设三个分片,那么会根据默认的hash算法,一个节点中就会有一个分片,就会是下图中的P0、P1、P2和R0、R1、R2这种情况

  在非单机的情况下,副本分片一般和主分片不在一个节点上面,副本分片一般是在同一个集群中的不同节点上面,具体在哪个节点上面,需要通过这个Master主节点去分配

   单节点的分片数目也不宜设置过多,因为过多的话会影响算分的结果性,同时也会浪费很多资源

2、集群搭建

2.1 集群搭建

  es集群的搭建,需要有三台机器,重复单节点的搭建即可,并且都可以简单的通过docker的方式搭建

  主要就是修改 elasticsearch.yml 中的内容,需要修改的参数discovery.seed_hosts 中的三台搭建了es结点的服务器的host主机号,用于节点发现,之前单机设置的是只有当前结点的主机号。

  在指定这个结点的名称时,这个yml文件设置的这个node.name也要不一致,第一台设置node-1,第二胎设置为node-2,第三台设置为node-3,在初始化集群节点的时候,需要将这三个值配置到 cluster.initial_master_nodes 属性中

# 指定集群名称3个节点必须一致
cluster.name: docker-cluster
#指定节点名称,每个节点名字唯一
node.name: node-1
#是否有资格为master节点,默认为true
node.master: true
#是否为data节点,默认为true
node.data: true
# 绑定ip,开启远程访问,可以配置0.0.0.0
network.host: 0.0.0.0
#指定web端口
#http.port: 9200
#指定tcp端口
#transport.tcp.port: 9300
#用于节点发现,三个节点的主机号
discovery.seed_hosts: ["xxx.xxx.xxx.166", "xxx.xxx.xxx.167", "xxx.xxx.xxx.168"]
#7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。
#该选项配置为node.name的值,指定可以初始化集群节点的名称
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
111

 

标签:node,结点,副本,架构,集群,分片,节点,Es
From: https://www.cnblogs.com/suyj/p/18289403

相关文章

  • what is NamedTupleStore?
    WhatNamedTuplestore按字面意思理解,就是一个有名字的tuplestore,那估计就不是一个正常的表。根据PostgreSQL的官方叫法,NamedTuplestoreScan对应的表称为为EphemeralNamedRelation,中文翻译为短暂的命名关系.When在使用触发器的时候会使用到该特性HowCREATETABLEt......
  • Address Sanitizer
    AddressSanitizerIntroduction​ AddressSanitizer是一款内存检测器,它可以检测在堆栈,全局变量等地方的溢出。后来被整合到了GCC等编译器中,AddressSanitizer由两部分组成:一个Instrumentation模块和一个运行时库。Instrumentation模块修改代码来检查每个内存访问的影子状态,并......
  • R语言数据格式转换:字符串(Strings)转为日期类型(Dates)
     R语言数据格式转换:字符串(Strings)转为日期类型(Dates)目录 R语言数据格式转换:字符串(Strings)转为日期类型(Dates)as.Date函数单个字符串到日期类型字符串向量到日期类型向量dataframe一列从字符串到日期类型dataframe多列从字符串到日期类型 as.Date函数通常,当您......
  • Win11系统提示找不到JSC.Resources.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个JSC.Resources.dll文件(挑选合适的版本文件)......
  • Win11系统提示找不到KBDEST.DLL文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个KBDEST.DLL文件(挑选合适的版本文件)把它放......
  • Win11系统提示找不到KBDES.DLL文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个KBDES.DLL文件(挑选合适的版本文件)把它放入......
  • 从 Helm 到 Operator:Kubernetes应用管理的进化
    ......
  • CodeForces CF1986C Update Queries题解
    来吧,兄弟们,再来篇题解,其实也不是题解,是我自己的思路/心得/体会UpdateQueries题面翻译题目翻译一共$t$组数据,每组数据给定长度为$n$的字符串$s$,长度为$m$的$ind$数组和字符串$c$。你可以任意安排$ind$数组和字符串$c$的顺序,并按照此顺序对字符串$s$进行$m$......
  • **CodeForces CF1928B Equalize题解**
    ok兄弟们,今天本蒟蒻来做一篇小小的题解Equalize题面翻译有一个给定的长度为$n$的数列$a$,现在加上一个排列$b$,即$c_i=a_i+b_i$。现在求对于所有可能的$b$,$c$中出现最多的数的出现次数的最大值。translateby@UniGravity.题目描述Vasyahastwohobbies—addingpe......
  • Halcon学习笔记(3):WPF 框架搭建,MaterialDesign+Prism
    目录前言环境Nuget安装新建WPF类库项目初始化PrismApp启动页初始化重写MainView前言其实我更喜欢CommunityToolkit.mvvm+HandyControl。但是因为找工作,你不能去抗拒新事物。这里就当体验一下完整的流程好了。环境windows11.netcore8.0Nuget安装新建WPF类库项目新......