ES 8.x的多实例集群搭建与角色规划

ES 8 多实例集群搭建与角色规划

ES 8版本与之前版本存在较大改变,第一个区别就是启动时默认开启了安全模式,也就是即便是测试环境也需要用户名密码和https传输层安全证书。此外,集群节点的角色也与之前不同,除了新增角色外在配置方式上也有所不同,而这些都与生产和业务息息相关,必须对此有清晰的认识,掌握使用方法。

集群节点发现

集群互连,重中之重!

在大多数情况下,发现和选举过程会迅速完成,并且主节点会长时间保持当选状态。

如果集群没有稳定的主节点,其许多功能将无法正常工作,并且Elasticsearch将会向客户端报告错误并在日志中记录。必须先修复主节点的不稳定问题,才能解决其他相关问题。在没有选出主节点或当前选出的主节点不稳定的情况下,解决任何其他问题都是不可能的。

如果集群有一个稳定的主节点,但部分节点无法发现或加入该主节点,那么这些节点将会向客户端报告错误并在它们的日志中记录。必须首先解决阻碍这些节点加入集群的问题,然后才能着手处理其他问题。在这些节点无法成功加入集群的情况下,解决它们所报告的任何其他问题是不可能的。

启动第一个节点

第一个节点很重要,不能设置这个节点的角色,否则很可能启动不了安全模式,也不能设置它的端口号之类的,否则启动不了https。最后只改了节点name和集群名称(官方文档给的提示是不做任何更改解压后可直接启动,显然,我们至少需要改个名字)。

以下全部是我进行的参数组合测试的情况(首次启动):

如果继续设置了角色master,端口号以及初始master节点列表,就不会自动开启ssl模式了,但此时多节点无法互联成集群,密码无法更新:ERROR: Failed to determine the health of the cluster. Unexpected http status [503]。

上述6个值以外如果还额外指定了Transport Host的值,比如4个0,启动就会直接报错: node validation exception,Transport SSL must be enabled。

如果指定了集群名,节点名以及角色这3个配置,节点可以启动,密码修改失败:ERROR: Failed to reset password for the [elastic] user, with exit code 75。

如果仅指定两个名称和Transport Host的这3个参数值,测试了也可以完全正常启动!

如果仅指定两个名和两个端口号共4个参数值,正常!

如果指定两个名和两个端口号和Transport host这5个参数,正常!

综上,不可以指定的是角色和初始化列表!

正常启动后,这个节点是主节点(它是一个集11种角色于一身的全能高手):

[node-1-master] This node is a fully-formed single-node cluster with cluster UUID [Ysiu2anmSp2kO13Wb0jAcw], 
but it is configured as if to discover other nodes and form a multi-node cluster via the [discovery.seed_hosts=[10.11.22.33:9300]] setting. 
Fully-formed clusters do not attempt to discover other nodes, and nodes with different cluster UUIDs cannot belong to the same cluster. 
The cluster UUID persists across restarts and can only be changed by deleting the contents of the node's data path(s). 
Remove the discovery configuration to suppress this message.

[node-1-master] 这个节点已经形成了一个完整的单节点集群,集群UUID为[Ysiu2anmSp2kO13Wb0jAcw],但是其配置却表明它试图通过[discovery.seed_hosts=[10.11.22.33:9300]]设置去发现其他节点并形成一个多节点集群。完整形成的单节点集群不会尝试去发现其他节点,并且具有不同集群UUID的节点不能属于同一集群。集群UUID在重启后会持久存在,只能通过删除节点数据路径的内容来更改。要消除这个警告消息,请移除关于发现节点的相关配置。

节点发现配置迷局

反复在本地各种改配置,删除数据,重启,无奈本地的多个节点就是无法形成集群。

  • 后面发现将发现配置中使用的hostname改为ip地址可以成功互联互通。关于这一点,官方文档提示的是应该使用node.name

  • 以下全部配置项的前提是多实例的文件都是从本机master服务拷贝来的,也就是https证书在本机上是一样(跨机器行不通,见不识别SSL证书问题的处理)。

在处理其他机器上的服务加入集群时发现直接带证书拷贝过去时无法完成ssl校验的,这也可能与双网有关,不过根据ES 7版本的经验,跨节点的证书需要自行生成,不能直接复制使用。

期间有ES集群不识别节点SSL证书的问题处理,参考我其他文章。

ES节点SSL问题处理-链接

实例自有配置

以下配置要与其他节点不同(名称、数据和日志路径,两个端口号),每个ES服务实例都是独一份。

node.name: node-1-node2path.data: /path/to/data2
path.logs: /path/to/logshttp.port: 9202
transport.port: 9302

master节点特有配置

cluster.initial_master_nodes: ["10.11.22.33:9300"]
node.roles: [ master,ingest ]

data类节点特有配置

discovery.seed_hosts: ["10.11.22.33:9300"]
node.roles: [ data, ingest ]

终于理清了,理的令人烦躁,软件能够开箱即用真是很强大的优势。

角色的变更

如果我修改了节点的角色,再次启动时就会报错。如下是从master、data等角色的一个实例修改为仅master节点的启动失败信息:

fatal exception while booting Elasticsearchjava.lang.IllegalStateException: 
node does not have the data role but has shard data: [/opt/es811/master/data/indices/_eWDGVvGTM2aqNjcYBvK5w/0]. 
Use 'elasticsearch-node repurpose' tool to clean up

提示说使用elasticsearch-node repurpose工具进行清理。

执行该命令,返回确认信息:

...
Node is being re-purposed as master and no-data. Clean-up of shard data will be performed.
Do you want to proceed?
Confirm [y/N] y
Node successfully repurposed to master and no-data.

警告:这会删除本实例持有的全部数据。

然后再次启动该节点,启动成功,节点已经改变为纯master节点,不再保存数据。

{"cluster_name" : "my-app-es","status" : "green","timed_out" : false,"number_of_nodes" : 3,"number_of_data_nodes" : 2,"active_primary_shards" : 1,"active_shards" : 2,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}

如下图,目前集群为3个节点,1个master,2个data节点,均可作为ingest节点:

第二行的master节点的role为im,也就是ingest和master。

关于master的HA注意事项

另外注意:如果设置了2个master的话,其中一个挂掉,另一个无法被选举为master。当我安装了3个master时,可以自动切换。

官方说法是为了确保集群始终保持可用状态,必须确保不同时停止投票配置中一半或更多的节点。只要超过半数的投票节点在线,集群就能正常运作。这意味着,如果有三个或四个候选主节点,集群就能够容忍其中一个节点不可用;而如果只有两个或更少的候选主节点,则所有节点都必须保持可用状态。

在测试主节点切换时发现cluster.initial_master_nodes这个参数不能防止脑裂,或者值设置不对,关闭后单独启动ES master服务时这个服务没有加入集群,修改加入seed_hosts后才正常加入了原集群。

集群自动化启动流程(ES 8)

  1. 启动第一个主节点,不能包含任何发现信息安全配置,可以指定端口和ip(会成为独立集群,获得UUID);
  2. 其他服务不要修改安全及发现相关配置,只改名称、角色、端口,ip这些;
  3. 在主节点生成node token;
  4. 其他服务启动时指定token加入集群(仅首次启动有效);
  5. 上述步骤会在服务config中自动生成证书、创建安全及seeds相关的配置;
  6. 全部启动完毕后检查集群健康状态;
  7. 根据需要,将master节点的配置统一格式;
  8. 根据需要,将data节点的配置统一格式(discovery.seed_hosts);
  9. 最后,集群节点全部重启!

启动流程优化?

上面的优势是你不需要再处理CA、https证书以及xpack相关的配置了,集群节点全都会自动配置,否则自己配置也是不少差事。

但是否可以先启动一个主节点,然后其他索引节点均设置好静态配置,待主节点启动完成,获取token后再全部批量启动?

试了不奏效,token方式启动需要比较干净的配置文件,不能改太多配置。

在处理之前SSL相关问题时也发现证书有效期只有2年左右,这是需要注意的点!

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

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

相关文章

使用专属浏览器在国内直连GPT教程

Wildcard官方推特发文说他们最近推出了一款专门为访问OpenAI设计的浏览器。 根据官方消息,这是一款专门为访问OpenAI优选网络设计的浏览器,它通过为用户提供专用的家庭网络出口,确保了快速、稳定的连接。 用这个浏览器的最大好处就是直接用浏…

【测试开发学习历程】MySQL增删改操作 + 备份与还原 + 索引、视图、存储过程

前言: SQL内容的连载,到这里就是最后一期啦! 如果有小伙伴要其他内容的话,我会追加内容的。(前提是我有学过,或者能学会) 接下来,我们就要开始python内容的学习了 ~ ~ 目录 1 …

Github 2024-03-22 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3C#项目1Java项目1Rust项目1Go项目1Shell项目1非开发语言项目1TypeScript项目1Colossal-AI:使大型人工智能模型更加实惠和快速训练的…

吴恩达机器学习笔记 二十六 决策树学习过程 独热编码one-hot

决策树的学习过程 1. 所有样本都在根结点 2.计算所有可能的特征的信息增益,选择信息增益最大的那个 3.根据选择的特征分离数据集,创造左右两支子树 4.继续进行分裂直到达到停止标准。停止标准有:一个节点只有一类样本;分裂一…

1Panel应用推荐:DataEase开源数据可视化分析工具

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

Django在日志中使用AdminEmailHandler发送邮件(同步),及celery异步发送日志邮件的实现

目录 一、使用AdminEmailHandler实现发送日志通知邮件 1,配置日志项 2,配置邮件项 3,在视图里使用日志 二、继承AdminEmailHandler使用celery实现异步发送邮件 1,安装配置celery 2,继承AdminEmailHandler类&…

网络安全知识核心之TCP与UDP区别

TCP 面向连接(如打电话要先拨号建立连接)提供可靠的服务;UDP 是无连接的,即发送数据之前不需要建立连接,;UDP 尽最大努力交付,即不保证可靠交付。(由于 UDP 无需建立连接,因此 UDP 不会引入建立…

HTML元素语义化(二)及补充

文章目录 HTML5新增元素 - audio**常见属性**代码展示 audio支持的音频格式input元素的扩展内容新增全局属性data–css属性 –white–spacecss属性–text–overflow HTML5新增元素 - audio HTML 元素用于在文档中嵌入音频内容, 和video的用法非常类似 常见属性 常见属性 值…

ts js vue 验证文件 MD5 值 spark-md5

ts js vue 验证文件 MD5 值 spark-md5 如何在前端中验证要上传的文件的 md5 值 一、安装 spark-md5 插件 需要用到 spark-md5 这个插件 官方 github:https://github.com/satazor/js-spark-md5/tree/master yarn add spark-md5 // 或 npm i spark-md5使用的时候引…

基于python+vue文学名著分享系统的设计与实现flask-django-nodejs-php

随着世界经济信息化、全球化的到来和互联网的飞速发展,推动了各行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理存在工作效率…

有没有适合pr剪辑视频使用的蓝色魔法火焰能量特效素材模板

12个蓝色魔法火焰能量特效VFX元素pr素材模板。 可定制的能量电荷、灰尘等离子体和发光的电火花是游戏电影、电影特效或有影响力的视频内容的理想选择,增添了史诗般的电影质量。无论是神秘的爆炸、闪闪发光的闪电还是旋转的漩涡,每一部动画都是力量的灯塔…

Git版本控制

这是两个学习Git推荐必看的文档,第一个链接是Git的官方权威文档,第二个链接是国内程序员在开发中,总结的Git快速入门教程,掌握这个,也足够应付在工作中的场景。 Git权威书籍《ProGit》中文版https://gitee.com/progit…

Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1.)

检查下根目录下的 build.gradle 配置 , 是否只配置了 jcenter 仓库 ,加上 google()mavenCentral() 重新编译试一下

全网最靠谱的短网址平台,你知道几个?

在当今互联网时代,短网址平台成为了人们分享链接的常用工具。它们不仅可以将冗长的网址压缩为简洁的短链接,还能提供更多的功能和优势。在众多的短网址平台中,有几个平台以其可靠性和出色的性能脱颖而出。今天,我们就来介绍几个全…

《数字人》三个灵魂拷问 是什么?为什么?怎么用?

数字人的出现和发展是由于人工智能和计算机图形学等技术的进步,使得我们可以更好地模拟和创造人类的外貌、行为和交流能力。 1.数字人是什么? 数字人通常是指利用计算机技术和人工智能技术创建的虚拟人物或角色。这些数字化的人物可以具有各种外貌、行为…

计算机网络基础知识

一、网络概述 1.网络定义与功能 利用通信线路物理地将不同的终端连接起来,按照网络协议相互通信,以共享软件、硬件和数据资源为目标的系统 数据通信:在计算机之间传送各种信息 资源共享:硬件资源共享、软件资源共享 负荷均衡&am…

鸿蒙开发钱途不可限量!万人大厂岗位激增月入2万机会来了

抢人!抢人!抢人! 抢滩鸿蒙,人才先行。2024年鸿蒙人才抢夺大战一触即发,刻不容缓。 随着时代的发展,就业竞争愈加激烈,内卷化越来越严重。如今互联网行业以及计算机软件开发领域成为了很多大学…

transformer的学习:Attention is all you need

目录 整体概述:​编辑​编辑 encoder: embedding: ​编辑 self-attention: 向量的相似度计算: qkv怎么来的​编辑 softmax: code multi-head-attention 位置编码: 残差&&FFN&…

使用ansible剧本进行lvm分盘

使用 Ansible 剧本(Playbook)进行 LVM 分区管理是一种自动化的方式,可以帮助管理员在多台主机上批量管理逻辑卷。 部署环境 3台主机,添加硬盘 ansible-galaxy collection install community.general 联网执行,下…

Linux课程____Samba文件共享服务

一、 Samba服务基础 SMB协议,服务消息块 CIFS协议,通用互联网文件系统 1.Samba 服务器的主要程序 smbd:提供对服务器中文件、打印资源的共享访问 nmbd:提供基于 NetBlOS 主机名称的解析 2.目录文件 /etc/samba/smb.conf 检查工具:test…