【ElasticSearch系列-06】Es集群架构的搭建以及集群的核心概念

ElasticSearch系列整体栏目


内容链接地址
【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827
【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631
【三】ElasticSearch的高级查询Query DSLhttps://blog.csdn.net/zhenghuishengq/article/details/134159587
【四】ElasticSearch的聚合查询操作https://blog.csdn.net/zhenghuishengq/article/details/134159587
【五】SpringBoot整合elasticSearchhttps://blog.csdn.net/zhenghuishengq/article/details/134212200
【六】Es集群架构的搭建以及集群的核心概念https://blog.csdn.net/zhenghuishengq/article/details/134258577

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

  • 一,深入理解es集群架构的底层原理
    • 1,集群的核心概念
      • 1.1,节点以及节点类型
      • 1.2,请求和响应流程
      • 1.3,分片
    • 2,集群搭建
      • 2.1,es集群搭建
      • 2.2,kibana安装
    • 3,X-pack安全认证
    • 4,Node结点类型
      • 4.1,不同结点的配置
      • 4.2,单一职责的好处

一,深入理解es集群架构的底层原理

前面讲解了es的安装,基本使用等,接下来这篇主要讲解es的集群架构的底层原理,es的索引分片,副本等基本知识

1,集群的核心概念

在安装集群之前,先了解一下集群的几个概念。如下图 ,就是一个三个节点组成的es集群,p0、p1、p2表示一个节点中的分片,R0、R1、R2表示分片对应的副本

img

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集群搭建

在第一篇文章中,讲解了es的单节点集群的搭建方式,那么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: "*"

2.2,kibana安装

这个在第一篇安装也详细的讲解过,但是在 kibana.yml 中,也需要修改部分配置如下,需要把es所在服务器的主机号以及端口号进行配置

server.port: 5601
server.host: "xxx.xxx.xxx.166" 
elasticsearch.hosts: ["http://xxx.xxx.xxx.166:9200","http://xxx.xxx.xxx.167:9200","http://xxx.xxx.xxx.168:9200"]  
i18n.locale: "zh-CN"  

3,X-pack安全认证

为了解决数据的安全性,防止出现数据被抓包的可能,因此需要为每台机器上面的结点创建一个安全认证,这里选择通过这个 x-pack的方式实现

首先进入每一台机器的容器中,如这个166这台

docker exec -it elasticsearch /bin/bash

随后直接执行下面的命令,随后会出现提示,需要输入两次密码

// 为集群创建一个证书
elasticsearch-certutil ca

继续执行下面的命令

// 为集群中的结点生成证书和私钥
elasticsearch-certutil cert --ca elastic-stack-ca.p12

执行成功之后,给es文件夹下的两个文件授权

chmod 777 elastic-certificates.p12

随后再修改每台机器中 elasticsearch.yml 中的配置,在原有的基础上,在增加以下的参数

## elasticsearch.yml 配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

在增加完上面的安全认证之后,随后在增加这个开启xpack安全认证的配置,依旧是每台服务中的这个 elasticsearch.yml 中

xpack.security.enabled: true # 开启xpack认证机制

随后重启es服务,重启完成之后,再进入这个es

docker exec -it elasticsearch /bin/bash

进入es之后,再输入一下命令

elasticsearch-setup-passwords interactive

进入到里面之后,可以发现这里面可以设置es,kibana,logstach等system系统的一些密码,可以手动的创建密码

Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
passwords must be at least [6] characters long
Try again.
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana_system]: 
Reenter password for [kibana_system]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
1234Changed password for user [apm_system]
56Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

比如给kibana设置密码,直接在进入kibana内部,随后再打开这个 kibana.yml 配置,随后修改往这个yml文件中加入以下的账号密码

elasticsearch.username: "kibana"
elasticsearch.password: "123456"

再重启这个kibana之后,就可以发现在打开这个kibana的之后,是需要输入这个上面配置的账号密码的

4,Node结点类型

4.1,不同结点的配置

上面提到了节点的类型有Master主结点、Master eligible从节点、Coordinaing协调结点、Data数据节点等节点,而每一个结点都是一个java进程,并且最初都是可以参与选举的从节点,那么在进行配置的时候,就需要通过不同的参数,设置成不同的结点

在这里插入图片描述

设置节点类型的参数如下,需要通过这几个属性设置对应的结点

在这里插入图片描述

设置成主结点的方式如下,只需要一个node.master为true即可,其他的全部设置为false

node.master: true	node.ingest: false	node.data: false

设置成数据节点的方式如下,只需要node.data的值为true即可,其他的设置成false

node.master: false	node.ingest: false	node.data: true

设置成ingest节点的方式如下,只需要node.ingest为true即可,其他的设置成false

node.master: false	node.ingest: false	node.data: true

协调结点可以直接将三个值全部设置为false,如果并没有设置协调结点,那么在接收到请求的节点就默认当成协调节点

node.master: false	node.ingest: false	node.data: false

4.2,单一职责的好处

上面说了同一个进程,通过不同的参数设置,实现不同的功能,通过不同角色实现单一职责,从而增加整个ElasticSearch的高可用性

  • 如单一职责的Master主结点,主要用于索引和分片的管理,如创建删除等等,影响整个集群数据的结点,因此在实际开发中,可以选择低配置的CPU、RAM处理器和磁盘等
  • 如这个可以参与选举的默认的从结点,主要用于负责集群的状态管理,主结点挂了就参与选举称为主结点,在实际开发中,也可以选择低配置的CPU、RAM处理器和磁盘等
  • 如这个处理数据大Data结点,负责数据处理,解决水平扩展等问题,可以使用高配置的CPU、RAM处理器以及磁盘
  • 如这个ingest结点,主要也是负责数据的处理,那么也可以使用这个高配置的CPU,中配置的RAM处理器和低配置的磁盘
  • 而这个协调者结点,主要负责数据的接收和转发,并且最后需要对查询的数据进行计算和汇总,那么需要高配置的CPU、高配置的RAM处理器和低配置的磁盘即可

当系统重有大量的复杂的查询时,可以通过增加协调者结点的个数,来增加查询的性能。

当磁盘容量无法满足需求或者读写的压力比较大时,可以增加数据节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1547 [USACO05MAR] Out of Hay S 题解

文章目录 题目描述输入格式输出格式样例样例输入样例输出 完整代码 题目描述 Bessie 计划调查 N N N( 2 ≤ N ≤ 2 000 2 \leq N \leq 2\,000 2≤N≤2000)个农场的干草情况,它从 1 1 1 号农场出发。农场之间总共有 M M M( 1 ≤…

深入理解ClickHouse跳数索引

一、跳数索引​ 影响ClickHouse查询性能的因素很多。在大多数场景中,关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此,选择适用于最常见查询模式的主键对于表的设计至关重要。 然而,无论如何仔细地调优主键&#xff…

14:00面试,14:06就出来了,问的问题有点变态。。。。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

跨境电商:自养买家账号测评,你需要了解的细节

在跨境电商的浪潮中,自养买家账号测评已经成为了一种趋势。近期,不少跨境卖家咨询自养买家账号测评的相关问题,看来有必要再讲解一下卖家测评的一些细节。今天将着重介绍自养号测评的相关内容。 首先,什么叫做自养号测评呢&#x…

pytest + yaml 框架 -58.运行报告总结summary.json

前言 用例运行结束后,在本地生成summary.json 文件,总结运行结果。 v1.5.1版本更新内容: 1.解决参数化,中文在控制台输出问题 2.保存用例结果summary.json 保存用例结果summary.json 命令行执行用例 pytest运行结束&#xff0…

【Unity插件】分享几个完全免费的2D角色动画生成器(推荐收藏)

文章目录 前言一、lpc-character-generator二、Universal-LPC-Spritesheet-Character-Generator三、UP主开发的2D人物换装系统四、Character Editor: Megapack完结 前言 你可能游戏开发能力很强,但是正愁于2D角色动画,那么这篇文章就是为你而准备的&…

RISC Zero的Bonsai证明服务

1. 引言 Bonsai为通用ZKP网络,其支持任意链、任意协议、以及任意应用,利用ZKP来扩容、隐私和互操作。Bonsai的目标是为每条链都提供无限计算的能力。 借助Bonsai,可仅需数天的开发,即可实现对以太坊、L1链、Cosmos app链、L2 ro…

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮,如下图所示: 本文介绍如何实现。 FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…

Postman汉化教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Postman汉化教程 前言 前言 Postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 。无论是开发人员进行接口…

uniapp小程序才到第五层就报错navigateto:fail webview count limit exceed

错误截图 原因 小程序官方描述是说可以跳转10层,但是使用uniapp开发的程序在小程序中才运行到第五层就报错了,原因是因为没有设置appId。如果设置了就正常了。

文件缓存的读写

文件系统的读写,其实就是调用系统函数 read 和 write。下面的代码就是 read 和 write 的系统调用,在内核里面的定义。 SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) {struct fd f fdget_pos(fd); ......loff_t pos f…

数据分析是什么?

第一章- 数据分析是什么 数据分析是指 根据分析目的,用适当的分析方法及工具,对数据进行分析,提取有价值的信息,形成有效结论的过程。 数据分析的作用 通过观察数据,知道当前发生什么?通过具体的数据拆解…

Webpack 中 loader 的作用是什么?常用 loader 有哪些?

说说webpack中常见的Loader?解决了什么问题?- 题目详情 - 前端面试题宝典 1、loader 是什么 loader是 webpack 最重要的部分之一。 通过使用不同的 loader,我们能够调用外部的脚本或者工具,实现对不同格式文件的处理。 loader…

嵌入式养成计划-48----QT--信息管理系统:百川仓储管理

一百二十二、信息管理系统:百川仓储管理 122.1 UI界面 122.2 思路 客户端: 用户权限有两种类型,一种是用户权限,一种是管理员权限,登录时服务器端会根据数据库查询到的此用户名的权限返回不同的结果,客户…

Semantic-Guided Zero-Shot Learning for Low-Light ImageVideo Enhancement

论文阅读之无监督低光照图像增强 Semantic-Guided Zero-Shot Learning for Low-Light Image/Video Enhancement 代码: https://github.com/ShenZheng2000/SemantiGuided-Low-Light-Image-Enhancement 在低光条件下增加亮度的一个可行方法是使用更高的ISO或更长时间…

仿mudou库one thread one loop式并发服务器

目录 1.实现目标 2.HTTP服务器 实现高性能服务器-Reactor模型 模块划分 SERVER模块: HTTP协议模块: 3.项目中的子功能 秒级定时任务实现 时间轮实现 正则库的简单使用 通⽤类型any类型的实现 4.SERVER服务器实现 日志宏的封装 缓冲区Buffer…

简单漂亮的登录页面

效果图 说明 开发环境&#xff1a;vue3&#xff0c;sass 代码 <template><div class"container"><div class"card-container"><div class"card-left"><span><h1>Dashboard</h1><p>Lorem ip…

HTTP 协议详解-上(Fiddler 抓包演示)

文章目录 HTTP 协议HTTP 协议的工作过程HTTP 请求 (Request)认识URL关于 URL encode认识 "方法" (method)GET 方法POST 方法其他方法请求 "报头" (header)请求 "正文" (body) HTTP 响应详解状态码响应 "报头" (header) HTTP 协议 HTT…

【编程语言发展史】Unity开发语言的历史发展

Unity开发前期版本时&#xff0c;使用的是一种名为UnityScript的类似JavaScript的语言。然而&#xff0c;随着时间的推移&#xff0c;开发者社区大多数人都倾向于使用C#进行开发&#xff0c;Unity决定将重点放在C#上&#xff0c;因为C#具有更强大的生态系统、更好的性能和更广泛…

Spring Boot 3.0正式发布及新特性解读

目录 【1】Spring Boot 3.0正式发布及新特性依赖调整升级的关键变更支持 GraalVM 原生镜像 Spring Boot 最新支持版本Spring Boo 版本版本 3.1.5前置系统清单三方包升级 Ref 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; 【1】Spring Boo…