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

文章目录

  • 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的哨兵模式。

在这里插入图片描述

总结:

在这里插入图片描述

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

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

相关文章

LCD-STM32液晶显示中英文-(5.字符编码)

目录 字符编码 字符编码说明参考网站 字符编码 ASCII编码 ASCII编码介绍 ASCII编码表 中文编码 1. GB2312标准 区位码 2. GBK编码 3. GB18030 各个标准的对比说明 4. Big5编码 字符编码 字符编码说明参考网站 字符编码及转换测试:导航菜单 - 千千秀字 …

学习AJAX

AJAX 🚀 HTTP请求报文响应报文 🚄 express框架🚬 express基本使用 🚒 原生AJAX🚬 GET.HTML🚬 POST.HTML🚬 JSON.HTML🚬 nodemon工具可以帮助重启服务🚬 IE缓存问题&#…

Devops系列五(CI篇之pipeline libraray)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

一、说在前面的话 本文是CI篇的上文,因为上一篇已经作了总体设计,就不再赘述,有需要的请看前文。 我们将演示,使用CI工具–jenkins,怎么和CD工具–argocd串联,重点是在Jenkins该怎么做。准备工作和argocd等…

Java springBoot项目报LDAP health check failed

报错内容如下: 在bootstrap.yml文件里加 management:health:ldap:enabled: false 配置。 或者在application.properties文件里加: management.health.ldap.enabledfalse 参考答案:LDAP health check failed 难道没有人遇到这样的问题吗&…

TCP/IP基础知识笔记

应用层:为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等。 应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。 传输层:为应用层提供网络支持。 *TCP包含众多特性比如流量控制、超时重传、拥塞控制等因此可…

【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64

为什么叫x86和x86_64和AMD64? 为什么大家叫x86为32位系统? 为什么软件版本会注明 for amd64版本,不是intel64呢? x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令…

LinkNet分割模型搭建

原论文:LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation 直接步入正题~~~ 一、LinkNet 1.decoder模块 class DecoderBlock(nn.Module):def __init__(self, in_channels, n_filters): #512, 256super(DecoderBlock, self).__in…

linux kernel单独编译某项驱动

linux内核经常涉及编译某一项驱动代码的场景,本次以网卡驱动e1000为例说明整个步骤流程。 首先编译内核驱动不必要编译整个内核,但编译的驱动代码必须要和要安装的内核版本保持一致,否则经常会出现无法加载模块。 在编译驱动前,最…

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势,是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤,最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…

layui增删改查的实现

前言 在前三篇layui博客的基础上继续完善,这篇博客增加了数据表格来实现增删改查 这里要注意layui需要使用2.6以上的版本 dao方法的编写 package com.zking.dao;import java.util.List; import java.util.Map;import com.zking.entity.User; import com.zking.uti…

进销不匹配将被严查,增值税高怎么办?

进销不匹配将被严查,增值税高怎么办? 《税筹顾问》专注于园区招商、企业税务筹划,合理合规助力企业节税! 金税四期是通过对企业所得税、增值税、个人所得税等各类税种的统一管理,实现对企业财务活动的全面监管和规范&…

探索uni-app:构建跨平台应用的神奇工具

文章目录 &#x1f4da;1. 视图容器类组件⚡ <view>&#xff1a;视图容器&#xff0c;类似于div元素⚡<scroll-view>&#xff1a;可滚动的视图容器 &#x1f4da;2. 基础内容类组件⚡<text>&#xff1a;文本内容&#xff0c;类似于span元素⚡<icon>&am…

单例模式之常见模式详解

单例模式之常见模式详解 单例模式的定义单例模式的分类饿汉模式懒汉模式 单例模式的主要特点单例模式的应用场景总结 单例模式的定义 单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 在单例模式中&#xff0c;类…

MATLAB算法-数据挖掘算法详解,

Matlab是一种功能强大的数据分析和数据挖掘工具,提供了丰富的数据挖掘算法和函数。下面将介绍一些最著名的数据挖掘算法,并提供相应的代码示例。 K均值聚类算法(K-means Clustering): K均值聚类是一种常用的无监督学习算法,用于将数据集划分为K个不同的簇。以下是在Matla…

一些抄袭CSDN的爬虫网站(长期收集更新)

目录 一、CodeAntenna1. 简介2. 网址 二、待更新。。。 本文由CSDN点云侠原创&#xff0c;爬虫网站请努力加油爬。 一、CodeAntenna 1. 简介 互联网耻辱柱排行榜Top 1。本人博客里任何一点免费可读的部分都被该网站爬得体无完肤。 2. 网址 https://codeantenna.com/a/B4cMB…

【项目 进程3】2.6 exce函数族 2.7 进程退出、孤儿进程、僵尸进程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 2.6 exec函数族介绍&#xff08;execute 执行&#xff09;exec函数族 2.7 进程退出、孤儿进程、僵尸进程进程退出孤儿进程僵尸进程 2.6 exec函数族介绍&#xff08;…

前端做excel的录入解析,将excel的数据传给后端,显示在页面上。

具体的流程如图所示&#xff1a; 1.点击excel录入按钮 2.打开弹框 3.点击上传按钮&#xff0c;会自动打开计算机本地文件&#xff0c;选择想上传的文件&#xff0c;点击打开 4.会将excel的数据解析成一个表格&#xff0c;可以在表格中做删除操作&#xff0c;点击确定 5.将exc…

Web3的2048,Sui 8192能否打开全链游戏的大门?

作者&#xff1a;Peng SUN&#xff0c;Foresight News Sui 8192&#xff1a;一局游戏就是一个NFT Sui 8192智能合约基于Move语言编写&#xff0c;构成非常简单&#xff0c;包括游戏、Game Board与排行榜&#xff08;Leaderboard&#xff09;三部分&#xff0c;覆盖方块移动、…

IOS与Android APP开发的差异性

iPhone和 Android是全球最流行的两种移动平台&#xff0c;有许多不同的开发者开发了应用程序&#xff0c;并将它们发布到市场上。虽然大多数开发者都使用了这两个平台&#xff0c;但您仍然需要了解它们的差异。 虽然 iOS和 Android两个平台都是基于 Linux&#xff0c;但它们却…

SOPC之NiosⅡ系统(五)

NIOS Ⅱ系统实例 目录 2.创建BSP工程 2.1 创建BSP工程 2.2 BSP Editor 2.3 创建C代码文件 3.Nios Ⅱ实例 3.1 Hello NIOS Ⅱ 3.2 System ID与Timestamp 3.3 蜂鸣器定时鸣叫 3.4 拨码开关输入GIO控制 4.FPGA器件的代码固化 4.1 嵌入式软件HEX文件生成 4.2 程序存储…