当前位置: 首页 > news >正文

【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处理器和低配置的磁盘即可

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

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

相关文章:

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

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…...

软考高级系统架构设计师系列案例考点专题六:面向服务架构设计

软考高级系统架构设计师系列案例考点专题六:面向服务架构设计 一、面向服务架构设计内容大纲二、SOA概述和发展三、SOA和微服务的区别四、SOA的参考架构五、SOA主要协议和规范六、SOA设计标准和原则七、SOA设计模式八、SOA构建和实施一、面向服务架构设计内容大纲 SOA概述和发…...

【入门Flink】- 07Flink DataStream API【万字篇】

DataStream API 是 Flink 的核心层 API。一个 Flink 程序,其实就是对DataStream的各种转换。 代码基本上都由以下几部分构成: 执行环境(Execution Environment) 1)创建执行环境StreamExecutionEnvironment StreamExe…...

AI:55-基于深度学习的人流量检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

node版本管理工具nvm

node版本管理工具nvm 要在本地拥有多个 Node.js 版本,并根据不同的环境切换不同的 Node.js 版本,你可以使用工具如 nvm(Node Version Manager)来管理和切换 Node.js 版本。 以下是关于如何使用这两个工具的简要说明:…...

stable-diffusion-webui安装Wav2Lip

常见错误 1.错误:Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check 修改代码: launch_utils.py 删除三个地方:...

Nacos-2.2.2源码修改集成高斯数据库GaussDB,postresql

一 ,下载代码 Release 2.2.2 (Apr 11, 2023) alibaba/nacos GitHub 二, 执行打包 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.skiptrue clean install -U 或 mvn -Prelease-nacos ‘-Dmaven.test.skiptrue’ ‘-Drat.skiptrue’ clean instal…...

Linux 内核中根据文件inode号获取其对应的struct inode

文章目录 前言一、简介二、iget_locked2.1 简介2.2 内核中使用2.3 LKM demo 三、ext4_iget3.1 简介3.2 LKM demo 前言 文件inode号和struct inode结构体请参考: Linux文件路径,目录项,inode号关联 Linux文件系统 struct inode 结构体解析 一…...

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包,点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式,创建关联,最后…...

飞书开发学习笔记(一)-应用创建和测试

飞书开发学习笔记(一)-应用创建和测试 一.前言 现在大企业用的办公IM软件中,飞书是口碑最好的,不得不说,字节在开发产品方面,确实有自己独到的竞争力,比如说抖音、头条、飞书。在办公会议和云文档的体验上,其它的办公…...

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml:...

RocketMQ批量发送消息❓

优点: 批量发送消息可以提高rocketmq的生产者性能和吞吐量。 使用场景: 发送大量小型消息时;需要降低消息发送延迟时;需要提高生产者性能时; 注意事项: 消息列表的大小不能超过broker设置的最大消息大小;消息列表…...

一键同步chromedriver版本

ChromeDriver是一个控制Chrome浏览器的驱动程序,它和Selenium一起被广泛用于Web自动化测试。然而,随着Chrome版本的升级,我们需要不断更新ChromeDriver以保持其与Chrome的兼容性。这个过程既费时又繁琐,而且对于非技术人员来说可能…...

Zephyr-7B-β :类GPT的高速推理LLM

Zephyr 是一系列语言模型,经过训练可以充当有用的助手。 Zephyr-7B-β 是该系列中的第二个模型,是 Mistralai/Mistral-7B-v0.1 的微调版本,使用直接偏好优化 (DPO) 在公开可用的合成数据集上进行训练 。 我们发现,删除这些数据集的…...

【笔试题】位运算

记录一些常见的位运算题&#xff1a; 1、实现对一个8bit数据&#xff08;unsigned char类型&#xff09;的指定位&#xff08;例如第n位&#xff09;置0或者置1操作&#xff0c;并保持其他地位不变。 unsigned char reg;/* 对第n位置0 */ reg &~ (1 << n);/* 对第n位…...

RT-Thread 10. 使用keil4编译GD32F450

1. 修改keil路径 2.增加MCU型号宏定义 3. 在ENV界面输入 scons -c scons --targetmdk44. 编译 scons --verbose提示错误 Warning: L6310W: Unable to find ARM libraries. Error: L6411E: No compatible library exists with a definition of startup symbol __main. Finish…...

Vue 跨域的两种解决方式

一、通过 proxy 解决跨域 1.1 baseURL 配置 对 axios 二次封装时&#xff0c;baseURL 设置为 /api。 const serviceAxios axios.create({baseURL: /api,timeout: 10000, // 请求超时设置withCredentials: false, // 跨域请求是否需要携带 cookie });1.2 vue.config.js 配置…...

【windows Docker 安装mysql:只需3条命令】

如下 docker pull mysql docker run --name mysql -p 3306:3306 -v D:/dockerFile/mysql/data:/var/lib/mysql/ -v D:/dockerFile/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORDroot -d mysql:latest --default-authentication-pluginmysql_native_password do…...

【软件逆向】如何逆向Unity3D+il2cpp开发的安卓app【IDA Pro+il2CppDumper+DnSpy+AndroidKiller】

教程背景 课程作业要求使用反编译技术&#xff0c;在游戏中实现无碰撞。正常情况下碰撞后角色死亡&#xff0c;修改为直接穿过物体不死亡。 需要准备的软件 il2CppDumper。DnSpy。IDA Pro。AndroidKiller。 一、使用il2CppDumper导出程序集 将{my_game}.apk后缀修改为{my_…...

vue3ref和reactive

Vue 3中的ref和reactive是两个重要的响应式API。 ref用于将基本数据类型转换为响应式数据&#xff0c;它返回一个包含value属性的响应式对象。ref适合用于单个值的响应式需求&#xff0c;例如计数器、表单数据等。示例代码&#xff1a; <template><div><p>…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...