ELK(五)—集群搭建

写目录

  • ip规划
  • ElasticSearch集群
    • 集群节点
    • 搭建集群
    • es切片和副本
      • 切片(Shard):
      • 副本(Replica):
  • 故障转移
    • postman创建索引的情况
    • 直接在面板中创建索引
      • 总结

ip规划

ip名称服务
192.168.150.190elk_masterelasticsearch
192.168.150.189elk_node1
192.168.150.188elk_node2

ElasticSearch集群

集群节点

ELasticsearch的集群是由多个节点组成的,通过cluster.name设置集群名称,并且用于区分其它的集群,每个节点通过node.name指定节点的名称。

在Elasticsearch中,节点的类型主要有4种:

master节点

  • 配置文件中node.master属性为true(默认为true),就有资格被选为master节点。master节点用于控制整个集群的操作。比如创建或删除索引,管理其它非master节点等。

data节点

  • 配置文件中node.data属性为true(默认为true),就有资格被设置成data节点。data节点主要用于执行数据相关的操作。比如文档的CRUD(创建(Create),读取(Retrieve),更新(Update) 、删除(Delete))。

客户端节点

  • 配置文件中node.master属性和node.data属性均为false。
  • 该节点不能作为master节点,也不能作为data节点。
  • 可以作为客户端节点,用于响应用户的请求,把请求转发到其他节点

部落节点

  • 当一个节点配置tribe.*的时候,它是一个特殊的客户端,它可以连接多个集群,在所有连接

搭建集群

elk-master节点的信息

#################################
# master节点的 elasticsearch.yml 内容
#################################

# 集群节点名称
node.name: "elk_node1"

# 设置集群名称为elasticsearch
cluster.name: "cluster_es"

# 网络访问限制
network.host: 0.0.0.0

#社会绑定的IP地址,可以是IPV4或者IPV6
network.bind_host: 0.0.0.0

#设置其他节点与该节点交互的IP地址
network.publish_host: 192.168.150.189

#是否开启http服务对外提供服务
http.port: 9200

#设置节点之间交互的端口号
transport.port: 9300

# 是否支持跨域
http.cors.enabled: true

# 表示支持所有域名
http.cors.allow-origin: "*"

# 内存交换的选项,官网建议为true
bootstrap.memory_lock: true

# 集群中的其它节点
discovery.seed_hosts: ["192.168.150.190","192.168.150.189","192.168.150.188"]

#集群中的角色
node.roles: [master,data]

# 集群中初始化的节点
cluster.initial_master_nodes: ["elk_master", "elk_node1", "elk_node2"]

# 取消安全验证
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false

elk_node1的节点相关信息

#################################
# master节点的 elasticsearch.yml 内容
#################################

# 集群节点名称
node.name: "elk_node1"

# 设置集群名称为elasticsearch
cluster.name: "cluster_es"

# 网络访问限制
network.host: 0.0.0.0

#社会绑定的IP地址,可以是IPV4或者IPV6
network.bind_host: 0.0.0.0

#设置其他节点与该节点交互的IP地址
network.publish_host: 192.168.150.189

#是否开启http服务对外提供服务
http.port: 9200

#设置节点之间交互的端口号
transport.port: 9300

# 是否支持跨域
http.cors.enabled: true

# 表示支持所有域名
http.cors.allow-origin: "*"

# 内存交换的选项,官网建议为true
bootstrap.memory_lock: true

# 集群中的其它节点
discovery.seed_hosts: ["192.168.150.190","192.168.150.189","192.168.150.188"]

#集群中的角色
node.roles: [master,data]

# 集群中初始化的节点
cluster.initial_master_nodes: ["elk_master", "elk_node1", "elk_node2"]

# 取消安全验证
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false

elk_node2的节点相关信息

#################################
# master节点的 elasticsearch.yml 内容
#################################

# 集群节点名称
node.name: "elk_node2"

# 设置集群名称为elasticsearch
cluster.name: "cluster_es"

# 网络访问限制
network.host: 0.0.0.0

#社会绑定的IP地址,可以是IPV4或者IPV6
network.bind_host: 0.0.0.0

#设置其他节点与该节点交互的IP地址
network.publish_host: 192.168.150.188

#是否开启http服务对外提供服务
http.port: 9200

#设置节点之间交互的端口号
transport.port: 9300

# 是否支持跨域
http.cors.enabled: true

# 表示支持所有域名
http.cors.allow-origin: "*"

# 内存交换的选项,官网建议为true
bootstrap.memory_lock: true

# 集群中的其它节点
discovery.seed_hosts: ["192.168.150.190","192.168.150.189","192.168.150.188"]

#集群中的角色
node.roles: [master,data]

# 集群中初始化的节点
cluster.initial_master_nodes: ["elk_master", "elk_node1", "elk_node2"]

# 取消安全验证
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false

三个节点的“elasticsearch.yml”文件修改完成后,我们就可以启动elasticsearch服务了

./elasticsearch -d

image.png

cluster.initial_master_nodes: ["elk_master", "elk_node1", "elk_node2"]

因为在集群的master节点初始化的时候,三个节点都有机会成为master节点,那个节点先启动就是对应的主节点了。

创建一个索引,其中加粗的为主分片,其余为副本分片

image.png

查询集群状态:/_cluster/health

在postman工具(或其他工具)

 get http://192.168.150.189:9200/_cluster/health

get http://集群中的节点ip:端口/_cluster/health

image.png

image.png

集群中有三种颜色

image.png

es切片和副本

在Elasticsearch中,切片(shard)和副本(replica)是两个重要的概念,它们对于分布式和高可用性非常关键。以下是对这两个概念的详细解释:

切片(Shard):

  1. 定义
    • 切片是数据在Elasticsearch集群中的基本单元。每个索引都被分成一个或多个切片,每个切片是一个独立的工作单元,包含了索引中的一部分数据。
  2. 目的
    • 切片的主要目的是将索引的数据分散存储在整个集群中,以实现分布式存储和搜索。这使得Elasticsearch能够处理大量数据并提供快速的检索能力。
  3. 类型
    • 主切片(Primary Shard):每个切片都有一个主切片,它是切片的主要工作单元,负责处理所有的读和写操作。
    • 复制切片(Replica Shard):为了提高高可用性和性能,每个主切片可以有零个或多个复制切片。复制切片是主切片的拷贝,可以接收读请求。
  4. 分配策略
    • 切片的分配是在索引创建时确定的,通常在索引创建时指定主切片的数量。副本的数量可以在运行时进行动态调整。
  5. 路由
    • 文档被路由到特定的切片,Elasticsearch使用文档的ID和切片数量来确定路由。这确保了相同ID的文档总是存储在同一个切片上。

副本(Replica):

  1. 定义
    • 副本是主切片的拷贝,用于提供冗余和高可用性。每个主切片可以有零个或多个副本,这些副本存储在不同的节点上。
  2. 目的
    • 主切片和其所有副本一起形成一个分片组,该组提供了在节点故障或网络问题时的冗余和故障恢复能力。
  3. 高可用性
    • 当主切片不可用时,Elasticsearch可以自动将一个副本提升为新的主切片,以保持索引的可用性。
  4. 读操作
    • 读操作可以由主切片或任何副本处理,这取决于请求的路由和索引的健康状况。
  5. 写操作
    • 写操作总是由主切片处理,然后通过异步复制到所有副本。这确保了写操作的一致性和可用性。

总体而言,切片和副本是Elasticsearch实现分布式、高性能和高可用性的关键组件。通过合理设置切片和副本的数量,可以有效地利用集群资源并确保数据的安全和可用性。

故障转移

postman创建索引的情况

这里选择将elk_node2的es停止

image.png

可以看到,elk_node2节点立即从看板中消失了。

重启启动elk_node2节点

image.png

elk_node2节点立马又加入了集群中。

这次选择删除elk_node1节点,可以从看板中知道,该节点是主节点.

看看删除主节点后,会不会在其他节点中产生一个新的节点。

image.png

删除node1节点后,节点信息立马变为unassigned了,同时elknode2节点变为了新的master节点。当然了这是随机的,elk_master也可以是新的master节点。

lasticsearch具备自动分配未分配分片到可用节点的机制。当一个节点离开集群时,未分配的分片应该被自动分配到其他可用的节点上,确保集群的高可用性和数据完整性。

理论上,在这种情况下,其他可用的节点应该接管这个分片。然而,可能存在一些情况导致自动分片分配失败,例如网络问题、节点配置问题等。

进行手动分配分片。

先查看可用节点

[root@elk_node2 ~]# curl -X GET "localhost:9200/_cat/nodes?v"
ip              heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.150.188           39          86   0    0.00    0.00     0.00 dm        *      elk_node2
192.168.150.190           44          88   0    0.03    0.04     0.01 dm        -      elk_master
[root@elk_node2 ~]# curl -X GET "192.168.150.188:9200/_cat/indices?v"
health status index uuid                   pri rep docs.count docs.deleted stor
red    open   elk   EhgU7OuaS_q3aj_wVd5e_A   2   0          0            0
[root@elk_node2 ~]# curl -X GET "192.168.150.188:9200/_cat/shards/elk?v"
index shard prirep state      docs store dataset ip              node
elk   0     p      STARTED       0  249b    249b 192.168.150.190 elk_master
elk   1     p      UNASSIGNED
  1. 分配主分片:
curl -X POST "192.168.150.188:9200/_cluster/reroute" -H 'Content-Type: application/json' -d '{
  "commands" : [
    {
      "allocate_stale_primary" : {
        "index" : "elk",
        "shard" : 1,
        "node" : "elk_node2"
      }
    }
  ]
}'

请注意,这里使用了 allocate_stale_primary 命令,这是一种尝试为失效节点分配主分片的方式。

  1. 等待主分片分配完成后,再分配副本:
curl -X POST "192.168.150.188:9200/_cluster/reroute" -H 'Content-Type: application/json' -d '{
  "commands" : [
    {
      "allocate_replica" : {
        "index" : "elk",
        "shard" : 1,
        "node" : "elk_node2"
      }
    }
  ]
}'

这两个命令组合起来,应该可以解决主分片和副本分配的问题。如果问题仍然存在,可能需要查看 Elasticsearch 的日志以获取更多详细信息。

在有分片的节点down之后,分片不会直接分配。很关键

更关键的是,这样进行手动分配分片是没因的!! 因为没有副本。。

直接在面板中创建索引

先创建索引

image.png

image.png

四分片、一个副本数,可以看到已经创建成功了。

image.png

这个时候我们把elk_node1节点停掉。

image.png

OK,这里可以看到集群颜色变为了黄色,并不是上面的红色了。

表示集群是运行的,但不是所有的主分片和副本分片都是 active(活跃) 状态。这可能是因为某些副本尚未分配,但主分片是活跃的。

经过一段时间之后,我们可以看到集群又重新变为绿色了。

image.png

这是因为,集群将其他节点的副本调动起来了,保证正常运行了。

image.png

有意思的一点,我们上面创建索引的时候指定的分片是四,每个节点都有对应的四个小方块了,保证了只要还存在节点,项目就肯定可以运行。

现在继续吧elk_master节点停掉,然后又启动看分片的分布

image.png

可以看到主片已经全部是elknode2节点上了,而elk_master的分片已经全部是负集了。

总结

  1. 设置集群的时候,各个节点的配置文件要特别注意节点的名称,主要的不一样就是在这里了。
  2. 想要故障转移的效果,我们创建索引的时候,需要设置副本,否则不会自动转移。

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

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

相关文章

AI 训练框架:Pytorch TensorFLow MXNet Caffe ONNX PaddlePaddle

https://medium.com/jit-team/bridge-tools-for-machine-learning-frameworks-3eb68d6c6558

Docker的安装与简单操作命令

目录 前言 docker的安装 基础docker操作 容器管理 镜像管理 容器镜像封装与加载 前言 前文简单说明了容器技术出现的背景,与对docker做了结构上的介绍Container容器技术简介-CSDN博客https://blog.csdn.net/qq_72569959/article/details/134814887 讲到dock…

分布式数据库 GaiaDB-X 金融应用实践

1 银行新一代核心系统建设背景及架构 在银行的 IT 建设历程中,尤其是中大行,大多都基于大型机和小型机来构建核心系统。随着银行业务的快速发展,这样的系统对业务的支持越来越举步维艰,主要体现在以下四个方面: 首先…

将单体应用程序迁移到微服务

多年来,我处理过多个单体应用,并将其中一些迁移到了微服务架构。我打算写下我所学到的东西以及我从经验中用到的策略,以实现成功的迁移。在这篇文章中,我将以AWS为例,但基本原则保持不变,可用于任何类型的基…

8 个顶级的 PDF 转 Word 转换器

PDF 是跨不同平台分发信息而不影响内容格式的好方法。但这种安全级别确实有其缺点。没有直接的方法来编辑 PDF 上的文本或内容。编辑 PDF 文档的唯一方法是将其转换为 Word 文档或其他可以编辑的文件类型。将 PDF 转换为 Word 是根据需要编辑 PDF 内容的最快方法。有许多免费的…

WeLive开源在线客服系统源码 /PHP企业级在线客服聊天系统源码/支持移动+PC端+中英文双语自由切换

源码简介: WeLive开源在线客服系统源码 ,它作为企业级在线客服系统源码,可以支持移动PC端,中英文双语自由切换。 WeLive开源PHP在线客服系统源码 WeLive5是一个企业级的在线客服系统, 程序小巧使用简单。 WeLive5是一个企业级的…

C# WPF上位机开发(简易图像处理软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 图像处理是工业生产重要的环节。不管是定位、测量、检测还是识别,图像处理在工业生产中扮演重要的角色。而c#由于自身快速开发的特点&a…

28BYJ-48步进电机的驱动

ULN2003的工作原理 28BYJ48可以用ULN2003来驱动,STM32使用开漏模式外接5V上拉电阻也可以产生5V电压,为什么不直接使用单片机的 GPIO来驱动的原因是虽然电压符合电机的驱动要求,但单片机引脚产生的驱动电流太小,因此驱动步进电机要…

go语言 grpc 拦截器

文章目录 拦截器服务端拦截器一元拦截器流拦截器 客户端拦截器一元拦截器流拦截 多个拦截器 代码仓库 拦截器 gRPC拦截器(interceptor)是一种函数,它可以在gRPC调用之前和之后执行一些逻辑,例如认证、授权、日志记录、监控和统计…

CSS——标准流、浮动、Flex布局

1、标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 2、浮动 作用:让块元素水平排列 属性名:float 属性值: left:…

ubuntu22.04 安装nvidia GPU显卡驱动

下载 https://www.nvidia.com/Download/index.aspx 删除原有的NVIDIA驱动程序 sudo apt-get remove –purge nvidia*禁用nouveau 默认情况下,Ubuntu采用开源的nouveau驱动程序作为Nvidia显卡的驱动,需要将其禁用 打开编辑配置文件: sudo …

【MySQL】MySQL的varchar字段最大长度是65535?

在MySQL建表sql里,我们经常会有定义字符串类型的需求。 CREATE TABLE `user` ( `name` varchar(100) NOT NULL DEFAULT COMMENT 名字) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 比方说user表里的名字,就是个字符串。MySQL里有两个类型比较适合这个场景。 char和varchar。…

Python GUI教程:轻松构建用户界面

大家好,从网络开发到数据科学,Python被广泛应用于各个领域。本文将探索Python内置的用于创建图形用户界面(GUI)的库:Tkinter。无论是初学者还是经验丰富的开发者,了解如何创建Python GUI都可以增强构建交互…

Python VSCode 配置固定的脚本入口

Python VSCode 配置固定的脚本入口 打开或者新建一个启动配置 选择 .vscode目录下 launch.json文件 将 “program”: “${file}” 替换成 “program”: “mian.py”, //完成你自己的入口.py文件名即可 json启动配置文件 {// Use IntelliSense to learn about possible attrib…

微信小程序引入Vant Weapp修改样式不起作用,使用外部样式类进行覆盖

一、引入Vant Weapp后样式问题 在项目中使用第三方组件修改css样式时,总是出现各种各样问题,修改的css样式不起作用,没有效果,效果不符合预期等。 栗子(引入一个搜索框组件)实现效果: 左侧有一个搜索文字背景为蓝色,接着跟一个搜索框 wxml <view class"container&q…

解决Idea右侧无Maven选项的问题

在创建 Spring / SpringBoot 项目的时候可能会遇到没有 Maven 选项的问题&#xff0c;如下图&#xff1a; 我们通常这样解决&#xff1a;

解决微信小程序中 ‘nbsp;‘ 空格不生效的问题

在微信小程序开发中&#xff0c;我们经常会使用 来表示一个空格。这是因为在 HTML 中&#xff0c;空格会被解析为一个普通字符&#xff0c;而不会产生实际的空白间距。而 是一种特殊的字符实体&#xff0c;它被解析为一个不可见的空格&#xff0c;可以在页面上产生真正的空…

从互联网到云计算再到 AI 原生,百度智能云数据库的演进

1 数据库行业发展概述 如果说今年科技圈什么最火&#xff0c;我估计大家会毫不犹豫选择 ChatGPT。ChatGPT 是 2022 年 11 月 30 日由 OpenAI 发布的聊天应用。它创造了有史以来用户增长最快的纪录&#xff1a;自 11 月 30 日发布起&#xff0c;5 天就拥有了 100 万活跃用户&am…

【微软技术栈】发布自己造的轮子 -- 创建Nuget包(分布操作)

目录 1、您的项目 2、创建 .nuspec 文件 3、一张图片胜过一千个拉取请求 4、包括自述文件 MD 文件 5、构建软件包 6、将包部署到 Nuget.Org 7、手动上传软件包 8、自动化和脚本化部署 9、我们如何构建和部署 ErrLog.IO Nuget 包 10、Nuget统计数据 11、最后的思考 创建 Nuget 包…

Vue3使用Tailwind CSS

安装 Tailwind 以及其它依赖项 npm install -D tailwindcsslatest postcsslatest autoprefixerlatest生成配置文件&#xff1a; npx tailwindcss init -p.修改配置文件 tailwind.config.js 2.6版本 &#xff1a; module.exports {purge: [./index.html, ./src/**/*.{vue,j…