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,一经查实,立即删除!

相关文章

Unity 获取鼠标滚轮信息的一些方法

Unity获取鼠标滚轮信息有以下一些方法: 1、使用Input.GetAxis(“Mouse ScrollWheel”)来获取鼠标滚轮的信息,如: //法一:float scrollWheelInput Input.GetAxis("Mouse ScrollWheel");if (scrollWheelInput > 0f){…

机器学习的概念、步骤、分类和实践

作为资深人工智能专家,对机器学习有着深入的研究和实践经验。以下是对机器学习概念、步骤、分类和实践的逐步分析: 一、机器学习概念 机器学习是人工智能的一个子集,它让计算机从数据中学习并改进其性能,而无需进行明确的编程。…

使用专属浏览器在国内直连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.继续进行分裂直到达到停止标准。停止标准有:一个节点只有一类样本;分裂一…

[ABC206E] Divide Both 解题记录

[ABC206E] Divide Both 解题记录 题意简述 给定整数 L , R L,R L,R,求满足以下条件的数对 ( x , y ) (x,y) (x,y) 的数量。 x , y x,y x,y 不互质 x ∤ y x \nmid y x∤y 且 y ∤ x y \nmid x y∤x 题目分析 正难则反,考虑用所有的满足第一条性质的…

javascript中Date相关方法

Date 对象用于处理日期和时间 序号方法描述1new Date()获取当前时间2parse()返回毫秒数(从 1970-1-1 00:00:00开始)3getDate()返回月中的第几天(从 1 到 31)4getFullYear()返回年份5getMonth()返回月份(从 0-11&#x…

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

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

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

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

【excel】常用的50个函数与基础操作(查询函数)

查询函数 (1)VLOOKUP与MATCH综合 1. VLOOKUP 按列纵向查找,输出单元格内容 VLOOKUP(用谁找,在哪找,在哪列,精确/模糊) 条件用&连接 VLOOKUP(用谁找,在…

网络安全知识核心之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

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

编程题:二叉树层次遍历(Java)

有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输…

有没有适合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() 重新编译试一下