【ElasticSearch】ES集群搭建、监控、故障转移

news2024/11/25 15:30:05

文章目录

  • 1、ES集群介绍
  • 2、搭建ES集群
  • 3、集群状态监控
  • 4、集群职责及脑裂
  • 5、分布式新增和查询流程
  • 6、ES故障转移

1、ES集群介绍

单机的ES做数据存储与搜索,必然面临两个问题:

  • 海量数据存储问题
  • 单点故障问题

因此,考虑使用ES集群:

  • 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点。如此,ES的存储能力就是所有节点存储能力的总和
    在这里插入图片描述

  • 单点故障问题:将分片数据在不同的节点备份(replica),即主分片和副本分片不能在同一个节点
    在这里插入图片描述

2、搭建ES集群

利用3个docker容器模拟3个es的节点:

  • 首先编写 docker-compoes.yml文件,内容:
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01  
      - cluster.name=es-docker-cluster  # 这里集群名称一样,集群名称相同的节点会形成集群
      - discovery.seed_hosts=es02,es03  # 集群中另外两个节点的IP,但这里我用容器模拟了,用容器名就能互连
      - cluster.initial_master_nodes=es01,es02,es03  # 集群有主从之分,这三个节点参与选举,产生主节点
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic  # 网络
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
	ports:
      - 9201:9200  # 宿主机9200已用,这里+1
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic
	ports:
      - 9202:9200

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge
  • es运行需要修改一些linux系统权限,修改/etc/sysctl.conf文件:
vi /etc/sysctl.conf
  • 添加内容:
vm.max_map_count=262144
  • 生效配置:
sysctl -p
  • 通过docker-compose启动集群:
docker-compose up -d

# yum install docker-compose

在这里插入图片描述

3、集群状态监控

kibana可以监控es集群,但新版需要依赖es的x-pack功能,配置复杂,这里用cerebro来监控es集群状态

# 官网
https://github.com/lmenezes/cerebro

# 网盘
链接:https://pan.baidu.com/s/1dj4HgTZsVfFSe6-hR2ydnA?pwd=9527 
提取码:9527
  • 下载完成后解压
    在这里插入图片描述

  • 进入bin,双击cerebro.bat
    在这里插入图片描述

  • 访问localhost:9000,输入任一节点的地址(地址后面有个/)
    在这里插入图片描述
    在这里插入图片描述

创建索引库

集群中,每个索引库的分片数量、副本数量都是在创建索引库时指定的,并且分片数量一旦设置以后无法修改。

语法如下:

PUT /test
{
  "settings": {
    "number_of_shards": 3, // 分片数量
    "number_of_replicas": 1 // 副本数量
  },
  "mappings": {
    "properties": {
      // mapping映射定义 ...
    }
  }
}

在cerebro中创建索引库:

在这里插入图片描述

填索引库名和分片数、副本数:

在这里插入图片描述

查看overview,实线为主分片,虚线为副本分片:

在这里插入图片描述

4、集群职责及脑裂

集群节点职责:

ES集群中,不同的节点有不同的职责:

在这里插入图片描述

以上角色的默认值都为ture,但不同的角色职责不同,对硬件的要求也不同,有的对CPU要求高,有的对硬盘要求高,因此,应该每个节点都有自己独立的角色。举个例子如下图,每个节点专门干一件事:

在这里插入图片描述

脑裂:

默认情况下,每个节点都是master eligible节点,因此一旦master节点宕机,其它候选节点会选举一个成为主节点。但当主节点只是与其他节点有暂时的网络通信故障时:

在这里插入图片描述

备选节点联系不上主节点,以为主节点宕机,选举出一个新的master,由此产生两个主节点,当网络恢复,就会出现数据不一致的情况。

在这里插入图片描述
为了避免脑裂,需要要求选票超过 ( eligible节点数量 + 1 )/ 2 才能当选为主,因此eligible节点数量最好是奇数。对应配置项是discovery.zen.minimum_master_nodes 。在es7.0以后,已经成为默认配置,因此一般不会发生脑裂问题

5、分布式新增和查询流程

没启动kibana,直接调接口插入三条doc:(在9201,即es01节点插入数据)

在这里插入图片描述
查询文档,不管在9201、9202、9203,三个节点都能查到数据:

在这里插入图片描述
添加explain参数来看分片情况:三条数据在不同的分片

在这里插入图片描述

这是协调节点工作的结果,当新增文档时,它会将数据保存到不同分片,保证数据均衡。而coordinating node确实数据存到哪个分片是根据:

在这里插入图片描述

  • _routing默认是文档的id
  • number_of_shards即分片数量,算法与分片数量有关,因此索引库一旦创建,分片数量不能修改

存储和查询都依赖这个算法,因此分片数量不能再变,否则按某个分分片数量存进去后,分片数量改变,等查的时候按这个算法计算找文档就找不到了。

新增文档流程:

在这里插入图片描述
当然,根据id查询,还是这么个流程。但如果不知道文档id,该怎么查,比如match_all

ES集群的分布式查询

  • scatter phase:分散阶段,coordinating node会把请求分发到每一个分片
  • gather phase:聚集阶段,coordinating node汇总data node的搜索结果,并处理为最终结果集返回给用户

在这里插入图片描述
coordinating node可能为其中任一个节点,就像上面match_all查询,不管访问哪个节点,最终都可以拿到三条数据。

6、ES故障转移

集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,即故障转移。比如有条数据,存于三个节点的主分片分别为P-0、P-1、P-2,副本为R-0、R-1、R-2,此时node1节点宕机:

在这里插入图片描述

当然R0+P1+P2还是可以凑出这条数据,但此时数据已经不安全,需要迁移:

在这里插入图片描述

实际模拟一下,此时三个节点都正常,数据存在三分节点上:

在这里插入图片描述

//停掉es1容器,模拟节点宕机
docker stop es01

查看集群情况:变黄了,不健康了,数据分片0有两个(主副都在),但1、2分片都只有一个了
在这里插入图片描述

再等等,开始了数据迁移了:

在这里插入图片描述
重新启动es01,查看效果:

docker start es01

分片回去了,数据还是均衡的,但es01已不再是主节点。这倒有点想Redis的哨兵模式。

在这里插入图片描述

总结:

在这里插入图片描述

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

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

相关文章

AIGC浪潮席卷,亚马逊云科技携手海尔设计、Nolibox加速工业设计转型

从机器学习算法到深度学习再到强化学习,AI创新浪潮奔流不息。而AIGC(AI-generated Content,人工智能生成内容)的到来,更是让AI成为众多企业的得力助手,开拓了文本、图像、音视频等领域的天花板。 在洞悉到…

x86架构ubuntu18下运行mgba模拟器

0. 环境 i7 ubuntu18 1. 准备源码 到https://github.com/mgba-emu/mgba/releases下载源码 mgba-0.10.2.tar.gz tar -zvxf mgba-0.10.2.tar.gz cd mgba0.10.2 2. 编译 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX/home/xxjianvm/work/mgba-0.10.2/install .. make -j…

PROFINET转TCP/IP网关TCP/IP协议的含义是

大家好,今天要和大家分享一款自主研发的通讯网关,远创智控YC-PN-TCPIP。这款网关可是集多种功能于一身,PROFINET从站功能,让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗?一起来看看吧&…

【GeoDa实用技巧100例】004:绘制长沙市宾馆热度图

文章目录 一、加载宾馆分布数据二、绘制热度图三、加载范围数据四、加载底图数据 一、加载宾馆分布数据 加载专栏配套的案例数据data004.rar中的长沙市宾馆酒店.shp,如下图,选择Shapefile格式: 选择长沙市宾馆酒店,加载如下&…

完全平方数(力扣)动态规划 JAVA

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 示…

【指针进阶】(题目练习)

这篇文章的思维导图在这里:思维导图 一维数组: int a[] {1,2,3,4}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a0)); printf("%d\n",sizeof(*a)); printf("%d\n",sizeof(a1)); printf("%d\n"…

Vit 实战营 Class2:图像与Transformer基础

文章目录 数组图像:图像与像素图像分类:机器如何学习?NMT:Neuron Machine TranslationTransformerVision Transformer代码实战 数组图像:图像与像素 什么是数字图像?在计算机图像的图像格式。每一个点叫pix…

全国节能宣传周丨物通博联智慧能源解决方案助力节能降碳

今年7月10日至16日,为全国第33个节能宣传周。今年全国节能宣传周活动主题是“节能降碳,你我同行”。 全国节能宣传周活动是在1990年国务院第六次节能办公会议上确定的活动周,开展该活动是实施全面节约战略、开展节能降碳宣传教育、推动形成绿…

ros系统生成kinova双臂机器人moveit配置包方法,详细过程,亲测有效!

环境:ubuntu18.04 ros:melodic 此博客前提你已经安装了moveit,如果未安装,可参考链接 一、启动MoveIt Setup Assistant roslaunch moveit_setup_assistant setup_assistant.launch点击:Create New MoveIt Configurat…

听产品大佬谈大语言模型的商业化价值

今年 3 月以来,全球各大厂商陆续发布大语言模型,无数人欢欣鼓舞,庆祝沉寂了几年的 AI 领域重新焕发生机。 然而热闹过后,一个现实的问题摆在面前:大语言模型的商业化价值该如何挖掘? 来自美洽的资深产品经…

CVE-2021-41773

CVE-2021-41773 Apache Httpd Server 路径穿越漏洞 Httpd(即 HTTP Daemon ,超文本传输协议守护程序的简称)是一款运行于网页服务器后台,等待传入服务器请求的软件。HTTP 守护程序能自动回应服务器请求,并使用 HTTP 协…

fastadmin调试前端js

当键盘按键抬起后打印id #username,点击箭头的除缓存 隐藏前端昵称 设置为 style"sidplay:none" 添加管理员组别的时候把此处的 NULL改为 1 就可以默认选择第一组别

springboot生鲜交易系统

生鲜交易管理方面的任务繁琐,以至于交易市场每年都在生鲜交易管理这方面投入较多的精力却效果甚微,生鲜交易系统的目标就是为了能够缓解生鲜交易管理工作方面面临的压力,让生鲜交易管理方面的工作变得更加高效准确。 本项目在开发和设计过程中涉及到原理和技术有: B/S、java技…

css 绘制直角梯形 和 平行四边形

<div:class"{isFirst: index 0,tab_item: index ! 0,}":style"{width: item?.label?.length > 4 ? 206px : 137px,}"><div>{{ item.label }}</div></div> isFirst是直角梯形 tab_item是平行四边形 直角梯形 .isFirstcur…

计算机系统结构与操作系统实验三(5)-中断

&#x1f4cd;实验要求 将中断处理程序放到C里编写 &#x1f4cd;实验过程 鉴于代码相比之前&#xff0c;多出了很多配套的固定代码&#xff0c;因此代码量和代码中来突增&#xff0c;本文就不再一个一个贴代码了&#xff0c;需要的直接去看我上传在csdn的代码吧(文末有链接…

音视频绕不开的话题之WebRTC

什么是WebRTC&#xff1f; 闲来无事&#xff0c;我们今天探讨下音视频绕不开的一个话题&#xff1a;WebRTC。WebRTC之于音视频行业&#xff0c;无异于FFMpeg&#xff0c;可以说WebRTC的开源&#xff0c;让音视频行业大跨步进入发展快车道。 WebRTC是一个支持实时音视频通信的开…

mac系统终端运行python文件

1.在要运行的python文件首行里添加python解释器路径代码 代码&#xff1a; #!/usr/bin/env python3 注意:上面代码中的python3是对应当前的python版本 例子&#xff1a; 2.复制要运行的python文件位置&#xff0c;在终端使用代码进入要运行的文件位置 终端运行代码&…

架构训练营3:架构设计流程和架构师职责

架构师相关职责&#xff1a; 架构师是业务和技术之间的桥梁&#xff0c;架构师不能只顾技术&#xff0c;不懂业务&#xff0c;架构师很容易两头不讨好 三个核心能力&#xff1a; 判断&#xff1a;1业务理解力2.技术能力3.沟通能力 拆解&#xff1a;1技术深度2.技术宽度3.技术…

出差在外,远程访问企业局域网象过河ERP系统【内网穿透】

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…

抖音seo软件技术开发源码搭建部署

抖音SEO矩阵系统源码开发流程分为以下几个步骤&#xff1a; 1.需求分析 在开发抖音SEO矩阵系统源码之前&#xff0c;首先需要对用户的需求进行分析&#xff0c;确定开发的功能和特性。 2.架构设计 根据需求分析的结果&#xff0c;进行架构设计&#xff0c;确定系统的整体框…