es 3期 第28节-深入掌握集群组建与集群设置

#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。
#### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!!!
#### 3.Elasticsearch原则上适合一切非事务性应用场景或能够容许一定的延迟的事务性场景;能最大限度的替代mongodb与传统关系型数据库

##### 索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效
##### 对历史数据无效!!!!
##### 一定要重建索引!!!!

#### 1、Cluster Formation 集群组建
### 集群主从架构模型
## 集群架构模型
# 1:ES典型的主从架构,强烈关联的主从架构
# 2:必须有1个Master节点
# 3:1个活跃的主节点Master,多个备用Master节点
# 4:元数据信息:集群节点信息,集群索引信息,集群设置信息等
# 5:典型嫡长子继承


#### 2、Cluster Setting集群设置
### 集群组建原理发现与广播
## 集群发现
# ES节点采用zen发现机制
# ES 节点之间是直接点对点
# ES集群所有节点之间都有连接

### 集群管理节点选举算法(bully算法)
## 集群管理节点选举
# 1、6.8.x版本以下,基于bully算法
# 2、比较节点nodeid大小,小的优先
# 3、ES集群选举可能会有秒级左右的延迟


### 集群管理节点选举算法(类Raft协议)
## 集群管理节点选举
# 1、管理节点选举算法基于类Raft协议
# 2节点选举在3种角色直接转换
# 3、选举会按照term阶段,每次主节点变更就会增加该值,以最大阶段选举的主节点为主
# 4、选举管理节点毫秒级完成
# 5、7.x版本以上

 
### 集群状态维护
## 集群状态维护
# 1、集群管理节点负责集群所有状态维护
# 2、节点更新数据优先更新到集群管理节点
# 3、索引更新优先更新到管理节点,然后分发到其它节点
# 4、在大规模集群架构+大规模索引分片中,增加新索引特别要小心(控制创建频率,减少master)
# 5、Cluster Metadata


### 集群节点增加
## 集群节点增加
# 1、连接其中任意节点,即可加入集群
# 2、从Master节点获取集群节点信息
# 3、从Master节点获取集群meta信息


### 集群节点移除
## 集群节点移除
# 1、Master节点移除节点
# 2、Master节点更新Meta信息
# 3、Master同步集群Meta信息到所有节点

### 集群容错性检测
# 1、集群节点之间由于网络或者进程响应问题,存在一定的延迟通信
# 2、通过设置集群容错性,避免集群过于敏感,造成集群动荡
# 3、超时时间 timeout-gap


### 组建2节点集群
# 1:配置节点通信2个
# 2:配置初始化管理节点1个

# 先初始化一个节点为master
# 1、解压 elasticsearch-8.6.2
# 2、重命名文件夹 elasticsearch-8.6.2-9201
# 3、修改jvm.options jvm配置 为1g
# 4、修改elasticsearch.yml es配置
# 4.1、集群名 cluster.name: my-application
# 4.2、节点名 node.name: node-9201
# 4.3、host最好是对外通信ip network.host: 0.0.0.0
# 4.4、http端口,对外服务 http.port: 9201
# 4.5、tcp通信端口,对内提供集群服务 transport.port: 9301
# 4.6、master第一次启动配自己就可以 cluster.initial_master_nodes: ["node-9201"]
# 4.7、关闭安全策略,xpack.security开头的都设为false
# 4.8、开启跨域, http.cors.enabled: true 和 http.cors.allow-origin: "*"
# 4.9、关闭gep更新 ingest.geoip.downloader.enabled: false
# 5、启动

第一个节点的完整配置如下:

cluster.name: my-application
node.name: node-9201
http.port: 9201transport.port: 9301
cluster.initial_master_nodes: ["node-9201"]xpack.security.enabled: falsexpack.security.enrollment.enabled: falsexpack.security.http.ssl:enabled: falsekeystore.path: certs/http.p12xpack.security.transport.ssl:enabled: falseverification_mode: certificatekeystore.path: certs/transport.p12truststore.path: certs/transport.p12# 关闭gep更新
ingest.geoip.downloader.enabled: false# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"

         当第一个节点启动完成后,就会组成由它自己形成的独立集群。

 使用es-head查看单个节点集群

新增第二个节点并加入集群

# 由于es是弹性扩展的,可以直接加入master节点
# 在新增一个节点,加入前面的master
# 1、解压 elasticsearch-8.6.2
# 2、重命名文件夹 elasticsearch-8.6.2-9202
# 3、修改jvm.options jvm配置 为1g
# 4、修改elasticsearch.yml es配置
# 4.1、集群名 cluster.name: my-cluster
# 4.2、节点名 node.name: node-9202
# 4.3、host最好是对外通信ip network.host: 0.0.0.0
# 4.4、http端口 http.port: 9202
# 4.5、tcp通信端口 transport.port: 9302
# 4.6、集群节点通信地址,配master tcp的地址 discovery.seed_hosts: ["127.0.0.1:9301"]
# 4.7、关闭安全策略,xpack.security开头的都设为false
# 4.8、开启跨域, http.cors.enabled: true 和 http.cors.allow-origin: "*"
# 4.9、关闭gep更新 ingest.geoip.downloader.enabled: false
# 5、启动

第二个节点的完整配置如下:


cluster.name: my-application
node.name: node-9202
network.host: 0.0.0.0
http.port: 9202
transport.port: 9302
discovery.seed_hosts: ["127.0.0.1:9301"]
xpack.security.enabled: falsexpack.security.enrollment.enabled: false# 关闭gep更新
ingest.geoip.downloader.enabled: false# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"

使用es-head查看2个节点集群 

### 集群增加节点
# 逐步增加节点

discovery.seed_hosts 配非master也可以

# 在新增第三个节点,加入前面的master
# 1、解压 elasticsearch-8.6.2
# 2、重命名文件夹 elasticsearch-8.6.2-9202
# 3、修改jvm.options jvm配置 为1g
# 4、修改elasticsearch.yml es配置
# 4.1、集群名 cluster.name: my-cluster
# 4.2、节点名 node.name: node-9203
# 4.3、host最好是对外通信ip network.host: 0.0.0.0
# 4.4、http端口 http.port: 9203
# 4.5、tcp通信端口 transport.port: 9303
# 4.6、与其他节点通信地址,配非master也可以 discovery.seed_hosts: ["127.0.0.1:9302"]
# 4.7、关闭安全策略,xpack.security开头的都设为false
# 4.8、开启跨域, http.cors.enabled: true 和 http.cors.allow-origin: "*"
# 4.9、关闭gep更新 ingest.geoip.downloader.enabled: false
# 5、启动

第三个节点的完整配置如下:

cluster.name: my-application
node.name: node-9203
network.host: 0.0.0.0
http.port: 9203
transport.port: 9303
discovery.seed_hosts: ["127.0.0.1:9302"]
xpack.security.enabled: falsexpack.security.enrollment.enabled: false# 关闭gep更新
ingest.geoip.downloader.enabled: false# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"

使用es-head查看3个节点集群 

        到这里就完成了3个节点的es集群配置,由于es的弹性扩展,当我们的集群资源不足时,可以动态的添加节点,es会自动帮助我们平衡节点上的数据,利用这个自动平衡节点数据的特性,我们可以很方便的做机房迁移,只要在新机房把节点部署起来并连接上集群,待数据都分配到新节点上后,可以依次关闭老机房的节点,但是自动平衡数据也有缺点,如果单个节点上的数据过大,集群间的网络带宽可能会被打满。

### 集群节点减少

## 注意事项

# 节点减少不要错过n/2+1个,会导致集群不可用

        es其他的一些配置项

#----节点通信------#
# 节点之间通信间隔,默认 1S
discovery.find_peers_interval: ls
#节点之间探查连接超时时间,默认3s
discovery.probe.connect_timeout: 3s
#节点探查握手确定超时时间,是确定节点已经连接之后,默认1sdiscovery.probe.handshake timeout: ls
#节点之间请求确认回复,超时时间,默认3s
discovery.request_peers_timeout:3s
#节点域名解析,并发数,默认10
discovery.seed_resolver.max_concurrent_resolvers:10
#节点域名解析,超时时间,默认 10
discovery.seed_resolver.timeout:5s#----集群节点选举投票井---------#
#集群投票节点,移除之后是否自动收缩,从集群中移除,默认true#若设置为 false,关闭集群节点之后,需要手动 API操作,移除此节点
cluster.auto_shrink_voting_configuration: true
#集群节点选举失败时,回退时间补偿,默认100ms,一般不用修改,慎重
cluster.election.back_off_time: 100ms#集群节点选举持续时间,在确认节点参与选举失败时,默认 500ms,一般不用修改,慎重,调大此值集群选举时间过长,调小此值,集群过于敏感
cluster.election.duration:500ms
#集群节点选举初始化,确认超时时间,默认100ms
cluster.election.initial_timeout:100ms
#集群节点选举,最大超时时间,默认10S
cluster.election.max_timeout: 10s#---------集群容错设置--------#
#集群主节点确认 非主节点检查校验时间间隔,是集群所有节点,默认1S
cluster.fault_detection.follower_check.interval: 1s
#集群主节点确认 非主节点已经与集群脱离 超时时间,默认10S
cluster.fault_detection.follower_check.timeout: 10s
#集群主节点与非主节点失去连接之后,尝试连接次数,默认3
cluster.fault_detection.follower_check.retry_count: 3
#非主节点与主节点确认检查消炎间隔时间,默认 1s
cluster.fault_detection.leader check.interval: 1s
#默认 10S
cluster.fault_detection.leader_check.timeout: 10s
#默认 3
cluster.fault_detection.leader_check.retry_count: 3
#非主节点与主节点确认,延迟超时时间,默认90s
cluster.follower_lag.timeout: 90s
#集群新节点加入集群,确认失败,超时时间,默认30S
cluster.join.timeout: 30s
#移除集群投票选举节点,最大数量,默认10
cluster.max_voting_config_exclusions:10#---------集群状态发布--------------------#
#主节点与非主节点之间,确认集群所有状态更新已经通知到所有节点,并得到应
#记录某个节点是否响应慢,超时时间 ,默认 10s
cluster.publish.info_timeout: 10s
#主节点与非主节点之间,确认集群所有状态更新已经通知到所有节点,并得到响应,超时时间,默认 60s
cluster.publish.timeout: 60s#--------集群主节点异堂默认操作-----------#
#集群主节点异常,读写操作全部停止
cluster.no_master_block: all
#集群主节点异常,写操作停止
cluster.no_master_block: write

### 集群动态设置
# 1:有很多参数调节的设置,无需在集群启动之前设置,可以在集群启动之后,依据实际需求动态调整,即刻生效。
### 临时设置与持久设置
##查询参数
# PUT_cluster/settings,集群设置接口
# persistent,集群持久化设置,集群重启依然有效
# transient,集群临时设置,集群重启失效

# 查看集群设置
GET _cluster/settings

# 查看集群健康信息
GET _cluster/health
# 查看集群状态
GET _cluster/state

#### 集群组建建议以及经验分享

# 集群节点数量限制,不宜过大,正常30~40节点合适;大规模无需超过100

# 避免频繁集群节点增加与移除

# 避免集群节点多个版本,尽量一致

# modules-discovery 集群组建发现
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/modules-discovery.html
# modules-discovery-settings 集群组建设置
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/modules-discovery-settings.html
# Cluster APls 集群操作 AP!
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/cluster.html
# voting-config-exclusions 移除节点投票资格
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/voting-config-exclusions.html
  

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

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

相关文章

Android学习总结之通信篇

一、Binder跨进程通信的底层实现细节(挂科率35%) 高频问题:“Binder如何实现一次跨进程方法调用?”   候选人常见错误:   仅回答“通过Binder驱动传输数据”,缺乏对内存映射和线程调度的描述混淆Binde…

数据结构C语言练习(两个栈实现队列)

一、引言 在数据结构的学习中,我们经常会遇到一些有趣的问题,比如如何用一种数据结构去实现另一种数据结构的功能。本文将深入探讨 “用栈实现队列” 这一经典问题,详细解析解题思路、代码实现以及每个函数的作用,帮助读者更好地…

前端如何导入谷歌字体库

#谷歌字体库内容丰富,涵盖上千种多语言支持的字体,学习导入谷歌字体库来增加网站的阅读性,是必不可少的一项技能# 1,前往谷歌字体网站 要会魔法,裸连很卡 2, 寻找心仪字体 Googles Fonts下面的filters可…

SnapdragonCamera骁龙相机源码解析

骁龙相机是高通开发的一个测试系统摄像头的demo,代码完善,功能强大。可以配合Camera驱动进行功能联调。 很多逻辑代码在CaptureModule.java里。 CaptureModule有8000多行,包罗万象。 涉及到界面显示要结合CaptureUI.java 一起来实现。 Ca…

多线程猜数问题

题目:线程 A 生成随机数,另外两个线程来猜数,线程 A 可以告诉猜的结果是大还是小,两个线程都猜对后,游戏结束,编写代码完成。 一、Semaphore 多个线程可以同时操作同一信号量,由此实现线程同步…

seq2seq

理解 transformer 中的 encoder decoder 详细的 transformer 教程见:【极速版 – 大模型入门到进阶】Transformer 文章目录 🌊 Encoder: 给一排向量输出另外一排向量🌊 Encoder vs. Decoder: multi-head attention vs. masked multi-head at…

Proxmox pct 部署ubuntu

pct 前言 PCT(Proxmox Container Tool)是 PVE 中用于管理 Linux 容器(LXC)的命令行工具。通过 PCT,用户可以执行各种容器管理任务,例如创建新的容器、启动和停止容器、更新容器、安装软件包、导出和导入容器等。PCT 提供了与 Web 界面相同的功能,但通过命令行进行操作,…

Google Play关键字优化:关键排名因素与实战策略

如果您准备发布应用程序或开始专注于关键字优化,您可能想知道如何向Google Play上的应用程序添加关键字。Google Play上的搜索量和排名与App Store不同,而且被索引排名的关键字也不同。在此文中,我们将确定Google Play上的关键排名因素&#…

Kafka延迟队列实现分级重试

技术方案 方案背景 Kafka队列消息消费处理过程中,发生处理异常,需要实现重试机制,并基于重试次数实现不同延迟时间重试方案。 方案介绍 通过实现Kafka延迟队列来实现消息重试机制。 目标: 支持所有业务场景的延迟重试支持多…

Maven核心配置文件深度解析:pom.xml完全指南

🧑 博主简介:CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师,数学与应用数学专业,10年以上多种混合语言开发经验,从事DICOM医学影像开发领域多年,熟悉DICOM协议及…

MSTP多域生成树

协议信息 MSTP 兼容 STP 和 RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现 VLAN 数据的负载均衡。 MSTP 可以将一个或多个 VLAN 映射到一个 Instance(实例)(一个或多个 VLAN…

MQTT 服务器(emqx)搭建及使用(一)

一. EMQX 服务器搭建 1.下载EMQX 下载链接:Windows | EMQX 文档 官方手册 2.下载内容解压至盘符根目录 3.进入bin文件夹,在地址栏输入cmd 4.依次输入下面命令安装服务 .\emqx.cmd install .\emqx.cmd console 5.设置自启动 创建批处理文件&#x…

在Thinkphp中使用JWT 包括JWT是什么,JWT的优势

首先了解一下什么是JWT JWT 是一种开放标准(RFC 7519),用于在各方之间以 JSON 对象形式安全传输信息4。其核心特点包括: 结构:由三部分组成(Header、Payload、Signature),通过点号…

hackmyvn-casino

arp-scan -l nmap -sS -v 192.168.255.205 目录扫描 dirsearch -u http://192.168.255.205/ -e * gobuster dir -u http://192.168.255.205 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -b 301,401,403,404 80端口 随便注册一个账号 玩游戏时的…

图表配置表增加分析指标字段

在设计报表图表配置表时,为存储 同比、环比 这类分析指标,建议通过以下方式定义字段结构和命名: 一、字段设计方案 // 配置表示例结构 interface ChartConfig {id: string; // 唯一标识name: string; // 图表…

广州SMT贴片加工厂精密制造工艺解析

内容概要 在电子制造领域,SMT贴片加工技术已成为现代电子产品精密组装的核心环节。广州作为华南地区电子产业的重要枢纽,其SMT贴片加工厂通过融合自动化设备与严格工艺标准,构建起高效可靠的制造体系。 对于电子产品制造商而言,…

RK3568-适配ov5647摄像头

硬件原理图 CAM_GPIO是摄像头电源控制引脚,连接芯片GPIO4_C2 CAM_LEDON是摄像头led灯控制引脚,连接芯片GPIO4_C3编写设备树 / {ext_cam_clk: external-camera-clock {compatible = "fixed-clock";clock-frequency = <25000000>;clock-output-names = "…

关于 @Autowired 和 @Value 使用 private 字段的警告问题分析与解决方案

问题背景 在使用 Spring 框架进行开发时&#xff0c;我们经常会使用 Autowired 和 Value 注解来进行依赖注入和属性值注入。然而&#xff0c;当我们将这些注解应用于 private 字段时&#xff0c;IDE&#xff08;如 IntelliJ IDEA&#xff09;可能会显示警告信息&#xff0c;提…

Flutter 开发环境配置--宇宙级教学!

目录 一、安装环境&#xff08;Windows&#xff09;二、Android 创建Flutter项目三、VSCode 搭建环境四、补充 一、安装环境&#xff08;Windows&#xff09; Flutter SDK 下载 推荐使用中国镜像站点下载 Flutter SDK&#xff0c;速度更快&#xff1a;中国环境 或者从官网下载…

碰一碰发视频网页版本开发的源码搭建指南

引言 在数字化信息快速传播的时代&#xff0c;近场通信&#xff08;NFC&#xff09;技术为信息交互带来了新的便捷方式。通过网页版本实现碰一碰发视频功能&#xff0c;能够让用户在浏览器环境中轻松实现视频分享&#xff0c;拓展了视频传播的途径。本文将详细介绍碰一碰发视频…