SpringCloud学习路线(13)——分布式搜索ElasticSeach集群

news2024/11/25 3:49:55

前言

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

如何解决这两个问题?

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

缺点是什么? 造成资源的消耗的N倍的。

一、搭建ES集群

使用docker容器模拟ES的节点

1、一键启动文件 docker-compose.yml

version: '2.2'
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

volums:
    data01:
        driver: local
    data02:
        driver: local
    data03:
        driver: local

networks:
    elastic:
        driver: bridge

2、更改linux系统权限 /etc/sysctl.conf,并启动docker

# command
vi /etc/sysctl.conf

#添加内容
vm.max_map_count=262144

#执行命令,完成配置
sysctl -p

#一键部署docker
docker-compose up -d

效果图
在这里插入图片描述

3、利用cerebro监控es集群状态

kibana当然可以监控es集群,但新版本需要依赖es的 x-pack 功能,配置较为复杂。
所以我们使用cerebro监控es集群,官网:https://github.com/lmenezes/cerebro

使用的是 cerebro-0.9.4

开启 cerebro: 双击/bin/cerebro.bat 即可。

访问localhost:9000

在这里插入图片描述

我们可以输入任意一个ES地址,例如虚拟机IP:9200

在这里插入图片描述

4、创建索引库

方式一:kibana的DevTools创建索引库

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

方式二:利用cerebro创建索引

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、集群脑裂问题

(一)ES集群的节点角色

节点类型配置参数默认值节点职责
master-eligiblenode.mastertrue
备选主节点
主节点可以管理和记录集群状态
决定分片在哪个节点
处理创建和删除索引库的请求
datanode.datatrue
数据节点:存储数据、搜索、聚合、CRUD
ingestnode.ingesttrue
数据存储之前的预处理
coordinating上面三个都为false则为coordinating节点
路由请求到其它节点
合并其它节点处理的结果,返回用户

(二)ES集群的分布式查询

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

分布式查询流程

用户 》 负载均衡器 》 coordinating 节点 》 data 节点 》 master-eligible

(三)集群的脑裂

1、概念: 指的是主节点由于网络问题与其他节点失去联系,其它节点处于选举时期,重新选取一个备用主节点,当网络恢复时,集群当中可能会产生两个及以上的主节点,这就是脑裂。

2、解决方式: 通过配置选票条件,当选票(超过主节点数+1)当选为主节点,因此主节点的数量最好是奇数。discovery.zen.minimum_master_nodes,在es7.0后,称为默认配置,一般不会发生脑裂问题。


三、集群故障转移

(1)故障转移: 集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全。

我们不需要自己实现故障转移,master节点已经实现了故障转移


四、集群分布式存储

当新增文档时,应该保存到不同的分片,保证数据均衡,那么 coordinating node如何确定数据存储到哪个分片上?

(1)负载均衡的原理

ES通过hash算法来计算文档的存储位置,shard = hash(_routing) % number_of_shards

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

(2)新增文档的流程

  • 用户新增文档id=1,向coordinating 节点发起请求
  • 经过hash运算,hash=2
  • coordinating 节点路由到分配了2号分片的节点
  • 在分配了2号分片的节点存储文档,并查询对应的备份节点
  • 存储的节点向有2号备份分片备份的节点同步数据
  • 主分片与备用分片所在节点公共返回结果给coordinating 节点
  • coordinating 节点将结果返回给用户

五、集群分布式查询

ES查询的两个阶段:

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

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

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

相关文章

C++笔记之memset分析

C笔记之memset分析 code review! 文章目录 C\笔记之memset分析1.介绍2.误区总结3.代码一,char数组和uint8_t使用memset4.代码三,int数组使用memset 1.介绍 2.误区总结 参考文章:Cmemset踩坑 3.代码一,char数组和uint8_t使用mem…

2023年河北省研究生数学建模竞赛D题中国钢铁工业低碳转型与高质量发展路径优化研究思路和代码

D题中国钢铁工业低碳转型与高质量发展路径优化研究 目前已写出D题初步代码,下载地址:【2023年河北省研究生数学建模竞赛D题初步思路和代码-哔哩哔哩】 https://b23.tv/g2ATbX5 随着我国工业化、城镇化进程的加快和消费结构持续升级,能源需求…

tty(五)串口的打开过程

一、字符设备完成注册 我们知道,在serial核心层提供了2个重要接口 uart_register_driver uart_add_one_port 上者通过调用tty核心的接口,完成了tty_driver的动态分配和注册,然而此时并没有看到创建字符设备, 通过对uart_add_one…

货拉拉基于 Flink 计算引擎的应用与优化实践

摘要:本文整理自货拉拉实时研发平台负责人王世涛,在Flink Forward Asia 2022 平台建设专场的分享。本篇内容主要分为六个部分: Flink 在货拉拉的使用现状Flink 平台化性能优化主题数据准确性主题稳定性主题未来展望 点击查看原文视频 & 演…

【leetcode】链表的中间节点|链表中倒数第k个节点

目录 1.链表的中间节点 2.链表中倒数第k个节点 1.链表的中间节点 思路1:遍历链表,统计节点个数count,返回第count/2 1个节点 📖Note:注意循环条件为--mid,--mid循环执行mid-1次,mid--循环mid次&#xf…

SpringBoot 8种异步实现方式

前言:异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:「发送短信、邮件、异步更新等」,这些都是…

采用串级控制和超高精度PID调节器的微张力精密控制技术

摘要:采用当前的各种涂布机很难适用气体扩散层这类脆性材料的涂布工艺,需要控制精度更高的微张力控制系统。为此本文基于串级控制原理,提出了采用双闭环PID控制模式和超高精度PID张力控制器的解决方案,一方面形成浮动摆棍闭环和主…

python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场…

kafka权威指南学习以及kafka生产配置

0、kafka常用命令 Kafka是一个分布式流处理平台,它具有高度可扩展性和容错性。以下是Kafka最新版本中常用的一些命令: 创建一个主题(topic): bin/kafka-topics.sh --create --topic my-topic --partitions 3 --replic…

【论文阅读22】Label prompt for multi-label text classification

论文相关 论文标题:Label prompt for multi-label text classification(基于提示学习的多标签文本分类) 发表时间:2023 领域:多标签文本分类 发表期刊:Applied Intelligence(SCI二区&#xff0…

生态系统景观指数-聚集度指数AI计算

景观指数是景观生态学的常见指标,可用于不同生态系统的特征识别。景观指数是反映景观结构与空间格局的定量指标,目前已成为景观生态学领域常用的分析景观格局、度量空间异质性的重要方法。不同水平下的指数结果往往代表不同含义,应在把握指数…

git冲突“accept theirs”和“accept yours”

Accept Yours 就是直接选取本地的代码,覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的res…

uniapp WIFI上下班打卡

大纲 🥙 uniapp官网:uni-app官网 🥙 WIFI功能模块: 1、下载 wifi 插件 uni-WiFi 2、在 manifest.json 中 App权限配置中 配置权限 1. ACCESS_WIFI_STATE (访问权限状态) 2. CHANGE_WIFI_STATE&#xff…

13.Netty源码之Netty中的类与API

highlight: arduino-light ServerBootstrap Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中ServerBootstrap 是服务端启动引导类。 java //泛型 AbstractB…

VMware上安装Ubuntu64

D:\VMware\Virtual Machines\Ubuntu64 D:\VMware\Virtual Machines\Ubuntu64\Ubuntu64.vmdk 继续

【ESP32】调试UART功能

1.创建示例项目uart_echo:VSCODE中->“查看”->”命令面板“->输入:Show Examples projects->选择Use current ESP-IDF(C:\Espressif\frameworks\esp-idf-v5.1)->弹出示例ESP-IDF Examples,选择peripherals->uart->uart…

泰晓科技发布 Linux Lab v1.2 正式版

导读近日消息,Linux Lab 是一套用于 Linux 内核学习、开发和测试的即时实验室,官方称其“可以极速搭建和使用,功能强大,用法简单”。 自去年 12 月份发布 Linux Lab v1.1 后,v1.2 正式版目前已经发布于 GitHub 及 Gite…

Tensorflow(二)

一、过拟合 过拟合现象:机器对于数据的学习过于自负(想要将误差减到最小)。 解决方法:利用正规化方法 二、卷积神经网络(CNN) 卷积神经网络是近些年来逐渐兴起的人工神经网络,主要用于图像分类、计算机视觉等。 卷积:例如对图片每一小块像素区域的处理&#xff…

微服务体系<1>

我们的微服务架构 我们的微服务架构和单体架构的区别 什么是微服务架构 微服务就是吧我们传统的单体服务分成 订单模块 库存模块 账户模块单体模块 是本地调用 从订单模块 调用到库存模块 再到账户模块 这三个模块都是调用的同一个数据库 这就是我们的单体架构微服务 就是…

RTaW-Pegase实时通信网络架构的建模,仿真和自动配置

RTaW-Pegase 用于构建和优化使用在汽车领域、航空航天领域以及工业领域的通信网络:时间敏感网络(TSN)、CAN (FD,XL)、LIN、Arinc、 NoC车载网络, 以及车外通信的无线网络。除了精确定时的仿真外…