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

这篇具有很好参考价值的文章主要介绍了SpringCloud学习路线(13)——分布式搜索ElasticSeach集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

单机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

效果图
SpringCloud学习路线(13)——分布式搜索ElasticSeach集群,spring cloud,学习,分布式

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

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

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

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

4、创建索引库

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

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

方式二:利用cerebro创建索引

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

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

二、集群脑裂问题

(一)ES集群的节点角色

节点类型 配置参数 默认值 节点职责
master-eligible node.master true
备选主节点
主节点可以管理和记录集群状态
决定分片在哪个节点
处理创建和删除索引库的请求
data node.data true
数据节点:存储数据、搜索、聚合、CRUD
ingest node.ingest true
数据存储之前的预处理
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查询的两个阶段:文章来源地址https://www.toymoban.com/news/detail-608723.html

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

到了这里,关于SpringCloud学习路线(13)——分布式搜索ElasticSeach集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud系列(十六)[分布式搜索引擎篇] - DSL 查询及相关性算分的学习 (部分)

    在SpringCloud系列(十五)[分布式搜索引擎篇] - 结合实际应用场景学习并使用 RestClient 客户端 API这篇文章中我们已经对 RestClient 有了初步的了解, 并且已经将一些数据进行了存储, 但是这并不是我们学习 ElasticSearch 的目的, ElasticSearch 最擅长的还是对数据的搜索及分析, 因此本篇

    2024年02月17日
    浏览(45)
  • 【Springcloud】分布式搜索elasticsearch

    先看下翻译: elasticsearch是一款非常强大的 开源搜索引擎 ,可以帮助我们 从海量数据中快速找到需要的内容 以下是生活中ES的使用场景: 项目在运行的时候会产生海量的日志信息,而elasticsearch结合kibana、Logstash、Beats,也就是elastic stack( ELK ),即ELK技术栈。被广泛应用在

    2024年02月08日
    浏览(41)
  • 微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

    聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一些值,比如:最大值

    2024年03月26日
    浏览(61)
  • Springcloud中间件-----分布式搜索引擎 Elasticsearch

    该笔记是根据黑马程序员的课来自己写了一遍的,b站有对应教程和资料 第一部分 第二部分 第三部分 预计看完跟着练习5小时足够 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如:

    2024年02月08日
    浏览(53)
  • SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈

    我们发现在微服务中有一个令人头疼的问题——部署,用Docker去解决这个部署难题 1、项目部署的问题 2、Docker 扔到一台机器上,它们的依赖难道没有干扰吗?不会,docker将打包好的程序放到一个隔离容器去运行,使用沙箱机制,避免互相干扰,之间不可见,这样就解决了混

    2023年04月24日
    浏览(44)
  • (黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以让我们极其方便

    2024年03月12日
    浏览(52)
  • (黑马出品_高级篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 消息队列在使用过程中,面

    2024年03月19日
    浏览(46)
  • Redis学习路线(6)—— Redis的分布式锁

    一、分布式锁的模型 (一)悲观锁: 认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。例如Synchronized、Lock都属于悲观锁。 优点: 简单粗暴 缺点: 性能略低 (二)乐观锁: 认为线程安全问题不一定会发生,因此不加锁,只有在更新数据时

    2024年02月14日
    浏览(34)
  • SpringCloud分布式搜索引擎、数据聚合、ES和MQ的结合使用、ES集群的问题

    目录 数据聚合 聚合的分类 ​编辑 DSL实现Bucket聚合 ​编辑  DSL实现Metrics聚合​编辑 RestAPI实现聚合  对接前端接口​编辑  自定义分词器​编辑 Completion suggester查询 Completion suggester查询 酒店数据自动补全 实现酒店搜索框界面输入框的自动补全  数据同步问题分析​编辑 同

    2024年02月16日
    浏览(49)
  • 微服务学习——分布式搜索

    elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 Lucene是一个

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包