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-node2

path.data: /path/to/data2
path.logs: /path/to/logs

http.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年左右,这是需要注意的点!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计技能UP UP UP!揭秘电路仿真软件高级技巧,让您成为设计大神

电路设计是一门技术活,而精湛的技巧往往决定了设计的成败。今天,让我们一起探讨电路仿真软件的高级技巧,助您在设计领域中实现技能的飙升! 电路仿真软件的高级功能解析 电路仿真软件不仅仅是简单的模拟工具,它还具备许…

Superstate 创始人 Robert Leshner 确认出席 Hack.Summit() 2024 区块链开发者大会

随着Web3技术的日新月异,一场备受瞩目的区块链盛会——Hack.Summit() 2024区块链开发者大会,即将于2024年4月9日至10日在香港数码港璀璨启幕。此次大会不仅是Hack.Summit()系列在亚洲的首度亮相,更象征着区块链行业对亚洲,特别是香…

txt、pdf等文件转为一行一行的doccano数据集输入格式

文章目录 doccano 数据集导入简介代码实现代码运行结果代码公开 doccano 数据集导入 在Doccano 导入数据集时,使用TextLine的文件格式,导入的文件需要为一行一行文本的数据格式,每一行文本在导入Doccano后就是一条数据。 简介 主要工作说明…

AndroidStudio相关

1、AndroidStudio 改变.gradle .AndroidStudio 默认存储位置 1、AndroidStudio安装路径下 -> bin -> idea.properties 文件 将1和2的路径设置为自己的路径,将3和4取消注释或复制在下方 注意: idea.plugins.path 和 idea.log.path 必须去掉注释或重…

Etcd Raft 协议(进阶篇)

前言 在正式开始介绍 Raft 协议之间,我们有必要简单介绍一下其相关概念。在分布式系统中,一致性是比较常见的概念,所谓一致性指的是集群中的多个节点在状态上达成一致。在程序和操作系统不会崩溃、硬件不会损坏、服务器不会掉电、网络绝对可靠…

基于SpringBoot精品在线试题库系统

采用技术 基于SpringBoot精品在线试题库系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能结构图 学生管理 教师管理 专业管理 试卷管理 …

MySQL索引优化,MySQL索引失效的场景(超详细!)

目录 1.不遵循最左前缀原则 2.在索引列上使用(计算,函数,or,类型转换),都是导致失效而导致全表扫描 3.范围查询 4.Select * 导致回表查询 5.不等空值还有or导致索引失效 6.like %写在左边导致索引失…

计算机408网课评测+资料分享

408当然有比较好的网课推荐,比如王道的视频课 现在大部分人备战408基本都用王道的讲义,然后再搭配王道408的课程来听,可以学的很好。 其中408视频课中,我认为讲的比较好的是数据结构,和操作系统,计算机组…

Talk|Mila研究所蒙特利尔大学刘圳:三维表征和三维网格的重建与生成

本期为TechBeat人工智能社区第580期线上Talk。 北京时间3月21日(周四)20:00,Mila研究所&蒙特利尔大学博士生—刘圳的Talk已经准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “三维表征和三维网格的重建与生成”,向大家系统地介…

基于Java的校园疫情防控管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

收割互联网大厂Offer面经

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

paddlepaddle框架构建数据集进行分类问题的时候,会发现数据集在构建的过程中不会构建标签(花分类)

问题描述 在做一个paddlepaddle项目的时候,需要使用神经网络对他进行分类,数据集的结构如下图,这时候我们可以使用常用dataset方法对数据集进行构建。 这时候我们就会发现一个问题,就是这个矿建不是构建标签,也就是说…

vue在页面使用Vue.prototype全局变量

文章目录 Vue.prototype 的基本概念使用 Vue.prototype 添加全局属性和方法添加全局属性添加全局方法 使用场景注意事项在模板中使用全局变量和方法方法1方法2方法3 Vue.prototype 的基本概念 Vue.prototype 是 Vue 实例的原型对象。在 JavaScript 中,每个构造函数…

【Java】Java程序员必备的一些流程图

一、spring的生命周期 Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要; 首先容器启动后,对bean进行初始化按照bean的定义,注入属性检测该对象是否实现了xxxAware接口,并将相…

openlayers 入门教程(四):layers 篇

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

20240316-2-协同过滤(collaborative filtering)

协同过滤(collaborative filtering) 直观解释 协同过滤是推荐算法中最常用的算法之一,它根据user与item的交互,发现item之间的相关性,或者发现user之间的相关性,进行推荐。比如你有位朋友看电影的爱好跟你类似,然后最…

轻松找回丢失数据EasyRecovery数据恢复软件让你无后顾之忧

轻松找回丢失数据,EasyRecovery数据恢复软件让你无后顾之忧,电脑数码行业必备工具,让你的数据安全有保障 ! 一、EasyRecovery数据恢复软件简介 在我们的日常生活中,无论是工作还是学习,都离不开电脑和数据…

26 OpenCV 查找边缘

文章目录 findContours 发现边缘drawContours 绘制边缘大致流程示例 findContours 发现边缘 cv::findContours( InputOutputArray binImg, // 输入图像,非0的像素被看成1,0的像素值保持不变,8-bitOutputArrayOfArrays contours,// 全部发现的轮廓对象…

Mac玩《幻兽帕鲁》为什么打不开D3DMetal?d3d错误怎么办 d3dxl error

我之前发了一篇讲Mac电脑玩Steam热门新游《幻兽帕鲁》的文章(没看过的点这里),后来也看到很多朋友去尝试了,遇到了一些问题,无法进入《幻兽帕鲁》游戏,或者是玩的时候卡顿以及出现黑屏,通过我的…

Altium Designer中如何修改默认字体

Altium Designer软件安装后,原理图和PCB设计中的文本通常默认是Times New Roman。这是一种Windows系统安全字体,在很早之前的Windows系统中就已经默认安装了这个字体。这种字体对打印也比较友好,是一种很常见的印刷体。 但是这种字体对于习惯…