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

news2024/11/13 9:45:14

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

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

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

相关文章

MySQL学习笔记(一)

1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么? 数据库:英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义,存储数据的仓库,实际…

安卓实现翻转时间显示效果

效果 废话不多说上代码 自定义组件 import android.content.Context; import android.content.res.TypedArray; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.…

学点儿Java_Day8_接口、final、static

1 接口interface 1.1 概念 接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法) 接口就是一个规范(标准),他没有提供任何是实现,具体的功能由实现接口的子类去实现。 接口就是一个规范,可插拔(可以被…

3/21 work

自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件相关设置,通…

深度学习项目-基于深度学习的股票价格预测研究

概要 随着经济的发展,中国股票市场的规模持续扩大,早已成为金融投资的重要部分,掌握股票市场的变化规律无论是对监管者还是投资者都具有极其重要的意义。正因如此,人们不断探索着股票市场的变化规律,其中使用深度学习预…

【C++】1416. 求长方形的周长和面积

问题:1416. 求长方形的周长和面积 类型: 基本运算、整数运算 题目描述: 从键盘读入2个整数,分别代表一个长方形的长和宽,请计算长方形的周长和面积; 输入: 从键盘读入2个整数,用…

【网站项目】291校园疫情防控系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

windows下使用压缩包安装mysql8.0数据库

获取安装包 可以访问mysql 官网下载压缩安装包 (官网地址:https://downloads.mysql.com/archives/community/) 根据自己的需要,下载对应mysql版本,我选择是是8.0.16版本 安装 解压之后,可以看到压缩包…

德勤:《亚太地区半导体行业展望》

2024年2月22日,德勤联合全球半导体联盟(GSA)对亚洲半导体产业链相关企业展开调研,邀请数位亚太地区主要半导体企业领导人,共同探讨半导体企业在当前环境下应如何通过数字技术曲线的领先优势保持业务竞争力和盈利能力&a…

GESP图形化编程二级认证真题 2024年3月

GESP 图形化二级试卷 (满分:100 分 考试时间:120 分钟) 一、单选题(共 10 题,每题 3 分,共 30 分) 1、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿…

(day 15)JavaScript学习笔记(对象3)

概述 这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。 今天继续学习对象,主要是Object.create()、原型链、修改原型指…

Autosar的前世今生:E2E通信校验

在浏览项目整体框架的时候,发现E2E是一个不可绕开的点,而且处处可见Autosar框架的踪迹,因此开一个专栏,每天学习一点相关知识点 E2E(end to end)是Autosar规范里规定的一种用于保证数据传输正确的概念&…

超越 GPT-4V 和 Gemini Pro!HyperGAI 发布最新多模态大模型 HPT,已开源

随着AI从有限数据迈向真实世界,极速增长的数据规模不仅赋予了模型令人惊喜的能力,也给多模态模型提供了更多的可能性。OpenAI在发布GPT-4V时就已经明确表示: 将额外模态(如图像输入)融入大语言模型(LLMs&am…

CTK插件框架学习-源码下载编译(01)

1、编译环境 window11、vs17、Qt5.14.0、cmake3.27.4 2、下载链接 cmake:Index of /files/v3.20 qt:Index of / vs22以前的版本需要登录下载:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 vs22下载:下载 Visu…

力扣热门算法题 62. 不同路径,66. 加一,67. 二进制求和

62. 不同路径,66. 加一,67. 二进制求和,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.21 可通过leetcode所有测试用例。 目录 62. 不同路径 解题思路 完整代码 Python Java 66. 加一 解题思路 …

专业矢量绘图设计软件:Sketch for mac 中文激活版

Sketch for Mac 是一款专业的矢量图形设计工具,主要用于 UI/UX 设计、网页设计、图标设计等领域。它的界面简洁、易用,功能强大,可以帮助设计师快速创建高质量的设计作品。 人性化界面 Sketch的界面非常简洁。最顶端的工具箱包含了最重要的操…

【MySQL】3.1MySQL索引的介绍

目录 一、索引的概念 数据库索引 索引的作用 索引的副作用 索引创建的原则(应用场景) 适合建立索引 二、索引的分类和创建 1.普通索引 创建普通索引 1.1直接创建 1.2修改表结构的方式创建普通索引 1.3创建表时创建普通索引 2.唯一索引 2.1…

ISO 8601:日期和时间的国际标准

ISO 8601 介绍 ISO 8601,介绍一下 ISO 8601 是由国际标准化组织(International Organization for Standardization,ISO)发布的国际标准,其全称为《数据存储和交换形式信息交换日期和时间的表示方法》。 这一标准提供了…

C语言 自定义类型:联合和枚举

目录 前言 一、联合体 1.1 联合体的特点 1.2 联合体与结构体的区别 1.3 联合体的大小计算 1.4 联合体例子 1.5 联合体判断大小端 二、枚举 2.1 枚举类型定义 2.2 枚举类型的优点 2.3 枚举类型的使用 总结 前言 之前我们讲了C语言其中一个自定义类型结构体&#xff…

jsp2024.3.21(4) html基础

一、实验目的 1、html 文件的基本结构&#xff1b; 2、html 的常用标记&#xff1b; <HTML> <HEAD> …… </HEAD> <BODY> …… </BODY> </HTML> 二、实验项目内容&#xff08;实验题目&#xff09; HTML常用标记 1&#xff0e;<…