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
相关文章:
es 3期 第28节-深入掌握集群组建与集群设置
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
如何在 SwiftUI 视图中使用分页(Paging)机制显示 SwiftData 数据(三)
概述 小伙伴们都知道,自从有了 SwiftData 的加持,现在 SwiftUI 可以非常惬意的利用描述型命令创建以数据驱动为本的视图了。这在测试或演示小项目中工作的完美无缺,不过真实世界要“残酷”的多。 实际情况是,我们无法一次性将海量数据统统拉入内存以便在 SwiftUI 中显示,…...
git和VScode
游戏存档保存的是游戏的进度 git保存的是代码的进度 Vscode和git 要正常的使用git首先要设置姓名和邮箱 要配合gitee(也可以是其他平台,以gitee举例)使用,首先创造一个gitee账号,复制邮箱和用户名 在VScode中找到…...
Linux Vim 编辑器的使用
Vim 编辑器的使用 一、安装及介绍二、基础操作三、高级功能四、配置与插件 一、安装及介绍 Vim是一款强大且高度可定制的文本编辑器,相当于 Windows 中的记事本。具备命令、插入、底行等多种模式。它可通过简单的键盘命令实现高效的文本编辑、查找替换、分屏操作等…...
NLP语言模型训练里的特殊向量
1. CLS 向量和 DEC 向量的区别及训练方式 (1) CLS 向量与 DEC 向量是否都是特殊 token? CLS 向量([CLS] token)和 DEC 向量(Decoder Input token)都是特殊的 token,但它们出现在不同类型的 NLP 模型中&am…...
利用Canvas在紫微斗数命盘上画出三方四正
许多紫微斗数排盘程序都会在命盘上画出三方四正的指示线,便于观察命盘。本文用Canvas在一个模拟命盘上画出三方四正指示线。 模拟命盘并画出“子”宫三方四正的HTML文件如下: <!doctype html> <html lang"en"> <head><…...
传统汽车 HMI 设计 VS 新能源汽车 HMI 设计,有何不同?
一、设计理念与目标的差异 传统汽车HMI设计的核心目标是辅助驾驶,强调功能的简洁性和操作的便捷性。其设计侧重于提供基础的车辆信息(如车速、转速、油量等),并确保驾驶员在操作时能够快速获取关键信息。相比之下,新能…...
【JavaWeb】前端基础
JavaWeb 前端三大件:HTML(主要用于网页主体结构的搭建),CSS(页面美化),JavaScript(主要用于页面元素的动态代理) 1. HTML 1.1 html概述 HTML:Hyper Text …...
SpringMVC组件解析
SpringMVC的执行流程 ① 用户发送请求至前端控制器DispatcherServlet。 ② DispatcherServlet收到请求调用HandlerMapping处理器映射器 ③ 处理器映射器找到具体的处理器(可以根据xm|配置、注解进行査找),生成处理器对象及处理器 拦截器(如果有则生成)一…...
使用 Provider 和 GetX 实现 Flutter 局部刷新的几个示例
1. 使用 Provider 实现局部刷新 示例 1:ChangeNotifier Consumer 通过 ChangeNotifier 和 Consumer 实现局部刷新。 import package:flutter/material.dart; import package:provider/provider.dart;void main() {runApp(ChangeNotifierProvider(create: (_) &g…...
数据结构C语言练习(两个栈实现队列)
一、引言 在数据结构的学习中,我们经常会遇到一些有趣的问题,比如如何用一种数据结构去实现另一种数据结构的功能。本文将深入探讨 “用栈实现队列” 这一经典问题,详细解析解题思路、代码实现以及每个函数的作用,帮助读者更好地…...
Java 基础-28- 多态 — 多态下的类型转换问题
在 Java 中,多态(Polymorphism)是面向对象编程的核心概念之一。多态允许不同类型的对象通过相同的方法接口进行操作,而实际调用的行为取决于对象的实际类型。虽然多态提供了极大的灵活性,但在多态的使用过程中…...
nextjs使用02
并行路由 同一个页面,放多个路由,, 目录前面加,layout中可以当作插槽引入 import React from "react";function layout({children,notifications,user}:{children:React.ReactNode,notifications:React.ReactNode,user:React.Re…...
第2.6节 iOS生成全量和增量报告
2.6.1 简介 在采集了覆盖率数据后,就需要生成对应需求的全量和增量覆盖率报告,以便对测试进行查漏补缺。IOS系统有两种开发语言,所以生成报告的方式也不相同,下面就分别介绍一下Object C和Swift语言如何生成覆盖率报告。 2.6.2 O…...
应用分享 | AWG技术突破:操控钻石氮空位色心,开启量子计算新篇章!
利用AWG操作钻石中的氮空位色彩中心 金刚石中的颜色中心是晶格中的缺陷,其中碳原子被不同种类的原子取代,而相邻的晶格位点则是空的。由于色心具有明亮的单光子发射和光学可触及的自旋,因此有望成为未来量子信息处理和量子网络的固态量子发射…...
前端开发学习路线完整指南
前端开发学习路线完整指南 前端开发是一个不断发展的领域,涉及多个技术栈。本文将为你提供一条系统的前端学习路线,帮助你从零基础到熟练掌握前端开发技能。 1. 前置知识 在学习前端之前,了解一些基础知识会对你的学习过程有很大帮助。 计…...
linux服务器专题2------vim编辑器如何设置显示行号
在 Vim 编辑器中,可以通过以下步骤来显示行号: 临时显示行号 打开 Vim 编辑器,输入如下命令: :set number这将临时启用行号显示。关闭 Vim 后,行号设置将丢失。 永久显示行号 如果希望在每次启动 Vim 时都显示行号…...
Jmeter触发脚本备份
JMeter 在以下情况会触发脚本备份: 手动保存测试计划时:如果测试计划有未保存的修改,当用户手动保存测试计划(脚本)时,JMeter 都会自动将当前脚本备份到${JMETER_HOME}/backups文件夹下。 关闭 JMeter 时…...
【视觉与语言模型参数解耦】为什么?方案?
一些无编码器的MLLMs统一架构如Fuyu,直接在LLM内处理原始像素,消除了对外部视觉模型的依赖。但是面临视觉与语言模态冲突的挑战,导致训练不稳定和灾难性遗忘等问题。解决方案则是通过参数解耦方法解决模态冲突。 在多模态大语言模型…...
重建二叉树(C++)
目录 1 问题描述 1.1 示例1 1.2 示例2 1.3 示例3 2 解题思路 3 代码实现 4 代码解析 4.1 初始化 4.2 递归部分 4.3 主逻辑 5 总结 1 问题描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序…...
VLAN、QinQ、VXLAN的区别
1、技术本质与封装方式 技术OSI层级封装原理标识位长度拓展性VLAN数据链路层L2在以太网帧头插入802.1Q Tag(单层VLAN标签)12位(4094个)有限,仅支持单一网络域内隔离QinQ数据链路层L2在原始VLAN标签外再封装一层802.1Q…...
保姆级教程:synchronized 同步方法 vs 同步代码块,看完彻底懂锁!
一、同步方法(锁住整个方法) 1. 代码示例 public class Counter {private int count 0;// 同步方法:锁住整个方法public synchronized void add() {count;}// 同步方法:锁住整个方法public synchronized void subtract() {coun…...
10乱码问题的解释(1)
在计算机中,一个汉字,占几个字节? 针对这个问题,只要你回答出一个具体的数字,就一定是错的!! 前提条件: 当前中文编码使用的是哪种方式(字符集) 计算机存的其实是二进制数字~~ 英文字母,怎么表示的?? ASCII 码表~~ 规定了每个字符,都有一个对应的数字来表示~~ 只是表示英文,…...
短视频文案--钓鱼女和滑板女
短视频文案 第一个文案: 1标题:风萧萧兮易水寒,美女钓鱼兮不复还 2内容: 我站在池边的微风中,再也看不到曾经快乐的少女了。 风很凉,凉得心不知前往何处。 水很清,清得深知这里没鱼群。 芦苇…...
算法设计学习3
实验目的及要求: 1.加强对结构体的应用。 2.熟悉字符计数排序。 实验设备环境: 1.微型计算机 2.DEV C(或其他编译软件) 实验步骤: 任务:要求使用自定义函数来实现 输入一段文本,统计每个字符出现的次数,按…...
nginx的自动跳转https
mkdir /usr/local/nginx/certs/ 创建一个目录 然后用openssl生成证书 编辑nginx的配置文件 自动跳转成功 做一个优化,如果访问的时候后面加了其他的uri也一起自动跳转了...
python-leetcode 62.搜索插入位置
题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置 方法一:二分查找 假设题意是在排序数组中寻找是否存在一个目标值,则可以…...
2. ollama下载及安装deepseek模型
ollamam 1. ollama2. ollama常用命令3. Windows配置Ollama与DeepSeek自定义目录环境3.1 自定义安装3.3 添加到系统变量 1. ollama 官网地址 下载地址 测试安装 deepseek模型下载地址 根据电脑性能下载对应版本 2. ollama常用命令 # 运行模型 ollama run 模型 # 查看模型…...
deepseek使用记录26——思维混乱背后的理论泡沫与骗局
一 后现代主义哲学自20世纪60年代兴起以来,其理论形态和社会影响一直备受争议。支持者认为它是对现代性弊病的批判和解构,而反对者则将其视为一种脱离现实的“工业化学术生产”,甚至是一场哲学骗局。结合相关文献和案例,可从以下角…...
服务器入门操作1(深度学习)
服务器相关 基本命令 查看GPU状态: 查看GPU信息查看CPU信息查看系统版本号 nvidia-smi lscpu lsb_release -a清屏: clearanaconda相关: 查看环境列表激活虚拟环境退出虚拟环境跳转至目录跳转至上一级目录 conda env list conda activa…...
