Elasticsearch 系列(六)- ES数据同步和ES集群

这篇具有很好参考价值的文章主要介绍了Elasticsearch 系列(六)- ES数据同步和ES集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章将和大家分享ES的数据同步方案和ES集群相关知识。废话不多说,下面我们直接进入主题。

一、ES数据同步

1、数据同步问题

Elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,Elasticsearch也必须跟着改变,这个就是Elasticsearch与mysql之间的数据同步。

在微服务中,负责酒店管理(操作mysql )的业务与负责酒店搜索(操作Elasticsearch )的业务可能在两个不同的微服务上,数据同步该如何实现呢?

2、数据同步方案一:同步调用

Elasticsearch 系列(六)- ES数据同步和ES集群

3、数据同步方案二:异步通知

Elasticsearch 系列(六)- ES数据同步和ES集群

4、数据同步方案三:监听binlog

Elasticsearch 系列(六)- ES数据同步和ES集群

5、数据同步三种方案对比总结

方案一:同步调用

  • 优点:实现简单,粗暴
  • 缺点:业务耦合度高

方案二:异步通知

  • 优点:低耦合,实现难度一般
  • 缺点:依赖mq的可靠性

方案三:监听binlog

  • 优点:完全解除服务间耦合
  • 缺点:开启binlog增加数据库负担、实现复杂度高

二、ES集群

1、ES集群结构 

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

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

Elasticsearch 系列(六)- ES数据同步和ES集群

Elasticsearch 系列(六)- ES数据同步和ES集群

2、搭建ES集群

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

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

具体的ES搭建此处先不做介绍。

3、ES集群的节点角色

Elasticsearch中集群节点有不同的职责划分:

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

4、ES集群的分布式查询

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

Elasticsearch 系列(六)- ES数据同步和ES集群

5、ES集群的脑裂

默认情况下,每个节点都是master eligible节点,因此一旦master节点宕机,其它候选节点会选举一个成为主节点。当主节点与其他节点网络故障时,可能发生脑裂问题。

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

主从结构脑裂问题示意图:

1、正常时只有一个主节点
2、网络阻塞

Elasticsearch 系列(六)- ES数据同步和ES集群

Elasticsearch 系列(六)- ES数据同步和ES集群
3、另外两个候选节点node2和node3重新选举主节点
4、网络恢复,此时就出现了两个主节点,这就是脑裂问题

Elasticsearch 系列(六)- ES数据同步和ES集群

Elasticsearch 系列(六)- ES数据同步和ES集群

6、小结1

1)master eligible节点的作用是什么?

  • 参与集群选主
  • 主节点可以管理集群状态、管理分片信息、处理创建和删除索引库的请求

2)data节点的作用是什么?

  • 数据的CRUD

3)coordinator节点的作用是什么?

  • 路由请求到其它节点
  • 合并查询到的结果,返回给用户

7、ES集群的分布式存储

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

Elasticsearch会通过hash算法来计算文档应该存储到哪个分片:

shard = hash(_routing) % number_of_shards

说明:

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

新增文档流程:

Elasticsearch 系列(六)- ES数据同步和ES集群

8、ES集群的分布式查询

Elasticsearch的查询分成两个阶段:

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

Elasticsearch 系列(六)- ES数据同步和ES集群

9、小结2

1)分布式新增如何确定分片?

  • coordinating node根据id做hash运算,得到结果对shard数量取余,余数就是对应的分片。

2)分布式查询的两个阶段

  • 分散阶段:coordinating node将查询请求分发给不同分片
  • 收集阶段:将查询结果汇总到coordinating node,整理并返回给用户

10、ES集群的故障转移

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

故障转移示意图:

 1、正常状态  2、主节点宕机

Elasticsearch 系列(六)- ES数据同步和ES集群

Elasticsearch 系列(六)- ES数据同步和ES集群
 3、重新选举主节点

Elasticsearch 系列(六)- ES数据同步和ES集群

 4.1、数据迁移  4.2、数据迁移

Elasticsearch 系列(六)- ES数据同步和ES集群

Elasticsearch 系列(六)- ES数据同步和ES集群

故障转移:

  • master宕机后,EligibleMaster选举为新的主节点。
  • master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全。

至此本文就全部介绍完了,如果觉得对您有所启发请记得点个赞哦!!! 文章来源地址https://www.toymoban.com/news/detail-861390.html

到了这里,关于Elasticsearch 系列(六)- ES数据同步和ES集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch实战-数据同步(解决es数据增量同步)

    之前测试的数据都是一次从mysql导入到es,随着时间的推移,每天都有可能发生增删改查,不可能每次都全量同步,所以需要考虑增量同步问题。 缺点: 耦合性高,服务之间会相互影响 依赖消息队列的可靠性 启动:端口8099

    2024年02月11日
    浏览(38)
  • hive表向es集群同步数据20230830

    背景:实际开发中遇到一个需求,就是需要将hive表中的数据同步到es集群中,之前没有做过,查看一些帖子,发现有一种方案挺不错的,记录一下。 我的电脑环境如下 软件名称 版本 Hadoop 3.3.0 hive 3.1.3 jdk 1.8 Elasticsearch 7.10.2 kibana 7.10.2 logstash 7.10.2 ES-Hadoop 7.10.2 ES-Hadoop的引入

    2024年02月09日
    浏览(17)
  • Elasticsearch --- 数据同步、集群

    elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的 数据同步 。   思路分析: 常见的数据同步方案有三种: 同步调用 异步通知 监听binlog   方案一:同步调用 基本步骤如下: hotel-demo对外提供接

    2024年02月03日
    浏览(20)
  • logstash同步数据从kafka到es集群

    背景:需求是这样的,原始文件是txt文件(每天300个文件),最终想要的结果是每天将txt中的数据加载到es中,开始的想法是通过logstash加载数据到es中,但是对logstash不太熟悉,不知道怎么讲程序弄成读取一个txt文件到es中以后,就将这个txt原始文件备份并且删除掉,然后就想

    2024年02月15日
    浏览(20)
  • mysql 5.7同步数据到es 7.6.2(集群)

    小伙伴们,你们好,我是老寇 mysql驱动、canal安装包:https://pan.baidu.com/s/1swrV9ffJnmz4S0mfkuBbIw  提取码:1111 一、前提条件 二、可选方案 三、es api同步数据 四、logstash同步数据到es 五、mysql通过binlog同步数据到es 一、前提条件 安装mycat 1.6,点点我 安装es 7.6.2集群,点点我 安装

    2024年02月02日
    浏览(33)
  • DataX实现Mysql与ElasticSearch(ES)数据同步

    jdk1.8及以上 python2 查看是否安装成功 查看python版本号,判断是否安装成功 在datax/job下,json格式,具体内容及主要配置含义如下 mysqlreader为读取mysql数据部分,配置mysql相关信息 username,password为数据库账号密码 querySql:需要查询数据的sql,也可通过colums指定需要查找的字段(

    2024年02月05日
    浏览(30)
  • FlinkCDC从Mongodb同步数据至elasticsearch(ES) 新版

    网上挺多flinksql方式同步数据,但是遇到数据比较杂乱,会经常无缘无故报错,笔者被逼无奈,采用API方式处理数据后同步,不知为何API资料笔者找到的资料很少,还很不全,摸着石头过河总算完成任务,收获颇丰,以此分享给大家。 有个大坑,我用该程序监控mongodb只能监控

    2024年02月11日
    浏览(24)
  • elasticsearch[四]-数据聚合排序查询、搜索框自动补全、数据同步、集群

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的 sql 要方便的多,而且查询速度非常快,可以实现近

    2024年01月19日
    浏览(33)
  • 【ElasticSearch】ES与MySQL数据同步方案及Java实现

    elasticsearch中的酒店数据来自于mysql数据库,当mysql中的数据发生改变时,es中的数据也要跟着改变,即es与mysql之间的数据同步。 操作mysql的微服务hotel-admin不能直接更新es的索引库,那就由操作es索引库的微服务hotel-demo来暴露一个更新索引库的接口给hotel-admin调用 同步调用方式

    2024年02月15日
    浏览(28)
  • Elasticsearch使用reindex命令同步跨集群索引数据(跨服务器)

    参考(不需要写协议名称http) 修改新的ES集群的配置,修改config/elasticsearch.yml ,添加上面的配置,修改完之后重新启动服务。 2. 在新的ES集群中执行请求 请求url:_reindex 请求方式:post 请求体 注意点 1.请求需要在新的ES集群中执行 2.如果执行有个别数据报错type类型无法转换,会终

    2024年02月14日
    浏览(20)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包