SpringCloud(10)— Elasticsearch集群

news2024/11/17 1:53:49

SpringCloud(10)— Elasticsearch集群

一 搭建ES集群

单机的 Elasticsearch 做数据存储,必然面临两个问题:海量数据存储问题,单点故障等

  • 海量数据存储问题:将索引库从逻辑上拆分为 N 个分片(shard),存储到多个节点
  • 单点故障问题:将分片数据在不同节点上备份(replica)

在这里插入图片描述

es 集群中的数据备份使用了错位备份的原理,即当前节点的数据将会备份在其他节点上。这样做保证了当某一节点宕机后,数据仍然完整

1.创建 docker-compose 文件

执行 docker-compose 文件之前,需要修改部分文件权限

# 1.进入文件进行编辑
vim /etc/sysctl.conf
# 2.添加如下内容
vm.max_map_count=262144
# 3.然后执行,让其生效
sysctl -p

创建 docker-compose 文件,复制一下内容到服务器。运行即可。

version: '3.4'

services:
  es01:
    image: elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: 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
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data02:/usr/share/elasticsearch/data
    ports:
      - 9201:9200
    networks:
      - elastic
  es03:
    image: 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
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data03:/usr/share/elasticsearch/data
    ports:
      - 9202:9200
    networks:
      - elastic

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

networks:
  elastic:
    driver: bridge

2.运行 docker-compose 文件

运行完成后,将创建 Elasticsearch 集群,其中有3台 Elasticsearch 服务器

docker-compose up -d

二 集群状态监控

1.使用 cerebro

这里不再使用 kibana 来监控集群状态(kibana 的配置较为复杂),而是通过 cerebro 来监控。

cerebro 的官方文档:GitHub - lmenezes/cerebro

Docker Hub 地址: https://hub.docker.com/r/lmenezes/cerebro/

使用 docker 部署 cerebro:

# 1.拉取镜像
docker pull lmenezes/cerebro
# 2.运行镜像
docker run --name renebro -p 9000:9000 -d lmenezes/cerebro
# 3.浏览器访问 9000 端口即可

2.访问 cerebro

在这里插入图片描述

在主界面输入任一ES集群的地址,即可进入管理界面,

例如:http://192.168.119.101:9200

在这里插入图片描述

集群列表中的 实心星星 表示为主节点,其余为 候选节点

3.设置分片

可在创建索引库时设置分片信息

PUT /test
{
  "settings": {
    "number_of_shards": 3,     //分片数量
    "number_of_replicas": 1    //副本树量
  },
  "mappings": {
    "properties": {
      "firstName": {
        "type": "keyword"
      },
      "lastName": {
        "type": "keyword"
      }
    }
  }
}

三 节点角色划分和脑裂

1.节点角色划分

elasticsearch中集群节点的不同的职责划分

在这里插入图片描述

elasticsearch中的每一个节点都有着属于自己的不同职责,因此建议集群部署时,每个节点都有独立的角色

在这里插入图片描述

2.脑裂问题

默认情况下,每个节点都是master-eligible,因此一旦master节点宕机,其他候选节点会选举一个新的节点成为主节点。

当主节点与其他节点网络故障时,可能发生脑裂问题。

脑裂问题:一个集群中因为某种原因出现了多个主节点,导致数据不同步

为了避免脑裂,需要要求 ”选票“ 数量超过 ( eligible +1 ) / 2 才能当选。因此 eligible 最好为奇数。

在这里插入图片描述

对应的配置项为 discovery.zen.minmun_master_nodes。在 es 7.0 以后已经成为了默认配置,因此一般不会发生脑裂。

四 ES集群的分布式存储

1.查看数据位置

新增文档时,应该保存到不同分片,保证数据均衡。

GET /test/_search
{
    "query":{
        "match_all":{}
    },
    "explain":true
}

explain:通过 explain 命令,可以看到插入的数据具体在集群上的哪一个分片中。

在这里插入图片描述

2.分布式存储算法

elasticsearch 通过 hash 算法来计算文档应该存储到哪个分片中

在这里插入图片描述

说明:

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

3.分布式新增流程

在这里插入图片描述

4.分布式查询流程

在这里插入图片描述

五 故障转移

集群中的 master 节点会监控集群中的节点状态,如果发现宕机,会立即将宕机节点的分片数据迁移到其他节点,确保数据安全。这个机制称之为故障转移

尝试停掉 es01服务,此时 cerebro 给出警告提示:

在这里插入图片描述

稍微等待一会儿,es 集群将会自己完成迁移,迁移完成后,索引库状况如下:

在这里插入图片描述

这样便保证了集群中数据的安全性

在这里插入图片描述

故障转移保证了 es 集群可以任意伸缩且不出现任何故障

Elasticsearch 知识点完结。后续想起什么了再补充

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

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

相关文章

直播回顾 | 如何运用数智化助力光伏上游产业节能降碳?

12月29日,【始祖双碳研习社-行业解决方案】系列直播课第一期直播顺利举办。 始祖科技解决方案专家张开宇在本次直播上进行了以《如何运用数智化助力光伏上游产业节能降碳》的主题分享,详细介绍了光伏行业产业链分析、光伏行业节能减排的现状与挑战、数智…

【Javassist】快速入门系列12 当检测到catch语句时在catch前插入代码

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 06 当有构造方法调用时替换方法调用的内容 07 当检测到字段被访问时使用语…

【C++学习】vector的使用及模拟实现

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! vector的使用及模拟实现🎇构造函数🧨模拟实现🧨vector的扩容机制&…

力扣(LeetCode)363. 矩形区域不超过 K 的最大数值和(2022.12.30)

给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 示例 1: 输入:matrix [[1,0,1],[0,-2,3]], k 2 输出:2 解释&…

2022年-年度总结报告

目录1.攻克的技术难题问题1:2.学习的新技术1.system系统的学习2.网络3.游戏22年总结23年的计划1.先给自己画个大饼2.计划内的小饼1.攻克的技术难题 问题1: 跑VTS测试的时候,mkfs.exfat挂测失败,VTS刷最新的谷歌gsi没有过&#x…

大文件传输如何帮助媒体行业

过去几年,随着分辨率从4k到6k再到8k的升级,观众已经适应了高分辨率的时代。然而,许多媒体工作室的工作流程还停留在过去。 TB甚至PB大小的材料的传输让从业者无所适从。这就是高速文件传输对媒体行业有很大帮助的原因。 什么是大文件传输&am…

81.【SpringMVC】

SpringMVC(一)、认识MVC三层架构1.回顾MVC(1).什么是MVC三层框架(2).MVC要做那些事情?(3).常见的MVC三层框架结构(4).知识拓展2.代码回顾3.什么是SpringMVC(二)、第一个SpringMVC0.前提1.搭建环境2.配置WEB-INF的XML配置文件3.在资源Resource的包下设置springmvc-servlet.xml4…

30-深入Hotspot源码与Linux内核理解NIO/BIO/AIO

IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIO BIO(Blocking IO) 同步阻塞模型,一个客户端连接对应一个处理线程 缺点: 1、IO代码里read操作是阻塞操…

Spreadsheet与FineReport数据集对比

什么是数据集?在BI工具中指的是在报表开发前的取数过程,把需要的数据整合成一个数据集合,以便于在报表开发中使用。可以把它理解为我们基于数据库获取我们需要的数据。而数据库获取数据是有多种方式的,比如可以通过直接写SQL语句、…

基于verilog实现序列相关检测

题目来源牛客网,完整工程源码:https://github.com/ningbo99128/verilog 目录 1、VL25 输入序列连续的序列检测 题目介绍 思路分析 代码实现 仿真文件 2、VL26 含有无关项的序列检测 题目介绍 思路分析 代码实现 仿真文件 3、VL27 不重叠序列检…

Sleuth+Zipkin架构

为什么要链路追踪 小结: nacos 【name server】:注册中心,解决服务的注册与发现 nacos【config】:配置中心,微服务配置文件的中心化管理,同时配置信息的动态刷新 Ribbon:客户端负载均衡器&#…

《设计模式》享元模式

《设计模式》享元模式《设计模式》设计模式的基本原则 《设计模式》单例模式 《设计模式》工厂模式 《设计模式》原型模式 《设计模式》建造者模式 《设计模式》适配器模式 《设计模式》桥接模式 《设计模式》装饰者模式 《设计模式》组合模式 《设计模式》外观模式 《设计模式…

数据结构课设:迷宫问题

文章目录前言一、概要设计1、基本信息2、功能模块图3、功能描述4、调用关系图5、结果演示① 创建迷宫② 求解③ 清除多余路径二、完整代码前言 最近刚好在写自己的课设,匆匆忙忙写出来的课设系统,仍有不足,拿出来和大家分享一下,…

C. p-binary(二进制位)

Problem - 1225C - Codeforces Vasya会看中任何数字,只要它是2的整数次方。另一方面,Petya非常保守,只喜欢单一的整数p(可以是正数、负数或零)。为了结合他们的口味,他们发明了2xp形式的p-二进制数&#xf…

jmeter接口测试之导入测试用例/get请求中Url存在参数(工作日记2)

导入接口用例进行接口测试 以运营中心测试计划中的企业菜单管理为例 【前提条件】 1、有接口数据 2、有接口用例 我们需要把接口测试用例转换为CSV格式步骤如下: 右键选择打开方式为Notepad 需要将文件设置一下编码 文件留着备用 【步骤】 1、新建一个企业…

前端基础之PS和相关基础知识总结

PS安装: 淘宝 PS简介 面板简介(菜单栏、工具栏、辅助面板) 图片格式: jpgjpeg(色彩丰富的图片)png(半透明图片)gif(网页动态图)psd(ps设计源文…

android java udp广播 用于局域网搜索扫描设备。

DatagramSocket socket new DatagramSocket();//设置接收等待时长socket.setSoTimeout(LanCommConfig.RECEIVE_TIME_OUT);byte[] sendData new byte[1024];//使用广播形式(目标地址设为255.255.255.255)的udp数据包DatagramPacket sendPacket new Dat…

STC15单片机+DS18B20+LCD1602+PCF8574转IIC接口温度显示

STC15单片机+DS18B20+LCD1602+PCF8574转IIC接口温度显示 📺显示效果 LCD1602 IIC接口 ✨本示例基于自制的STC开发板,主控采用的:IAP15W4K61S4相关篇《【PCB开源分享】STC/IAP15W4K61S4开发板》《【开源分享】自制STC15W408AS开发板》🌼接线说明 🌿CD1602+PCF8574转IIC接…

stlink下载调试器使用说明(STM32采用stlink下载程序)

stlink能干什么? 最基本的功能:下载程序。 一般STM32支持ISP串口下载,也支持stlink、jlink等下载器下载 。 使用stlink、jlink下载要比串口方便很多,在keil里直接点击下载就行了,不需要去选择hex文件,速度…

你可能还不知道 golang 的高效编码细节

xdm,我们都知道 golang 是天生的高并发,高效的编译型语言 可我们也都可知道,工具再好,用法不对,全都白费,我们来举 2 个常用路径来感受一下 struct 和 map 用谁呢? 计算量很小的时候&#xf…