【DevOps】Elasticsearch 数据跨集群同步方案

目录

1、Elasticsearch Cross-Cluster Replication (CCR)

1.1、优点

1.2、缺点

1.3、步骤

1.4、示例

2. Logstash 或其他 ETL 工具

2.1、优点

2.2、缺点

2.3、步骤

3. Apache Kafka 或 RabbitMQ

3.1、优点

3.2、缺点

3.3、步骤

4、使用 Reindex API 进行跨集群同步

4.1、优点

4.2、缺点

4.3、步骤

4.4、示例

总结


跨集群同步 ES 数据,意味着您希望将一个 Elasticsearch 集群的数据实时或接近实时地复制到另一个集群。 这对于灾难恢复、地理位置分布、数据隔离等场景非常有用。我会详细讲解Elasticsearch 数据跨集群同步的几种方案,并结合示例代码和配置,帮助您更好地理解。

1、Elasticsearch Cross-Cluster Replication (CCR)

CCR 是 Elasticsearch 官方提供的跨集群复制解决方案,适用于需要实时或接近实时数据同步的场景。它允许您将一个集群中的索引复制到另一个集群,并保持数据同步。

1.1、优点
  • 实时同步: 数据更改会自动从领导者索引复制到追随者索引。
  • 易于配置: CCR 的配置相对简单,只需要在源集群和目标集群上进行少量配置即可。
  • 高性能: CCR 使用 Elasticsearch 的内部机制进行数据复制,性能优异。
1.2、缺点
  • 版本要求: 仅支持 Elasticsearch 6.7 及更高版本。
  • 网络延迟: 对网络延迟敏感,如果两个集群之间的网络延迟较高,可能会影响同步性能。
1.3、步骤
  • 启用 CCR:

    • 在源集群和目标集群的 elasticsearch.yml 文件中添加以下配置:
      xpack.security.enabled: true
      xpack.license.self_generated.type: trial
      xpack.ccr.enabled: true
      
    • 重启两个集群。
  • 创建 Follower Index:

    • 在目标集群上执行以下请求,创建 follower index 并指定要同步的 leader index:
      PUT <follower_index_name>
      {"index": {"remote": {"name": "<remote_cluster_name>","connection": {"hosts": ["<leader_cluster_host_1>:<port>", "<leader_cluster_host_2>:<port>"]}},"leader_index": "<leader_index_name>"}
      }
      
    • 将 <follower_index_name> 替换为您要创建的 follower index 名称。
    • 将 <remote_cluster_name> 替换为源集群的名称 (在 elasticsearch.yml 中配置)。
    • 将 <leader_cluster_host_1>:<port> 等替换为源集群节点的主机名和端口。
    • 将 <leader_index_name> 替换为要同步的 leader index 名称。
  • 启动同步:

    • CCR 会自动启动同步过程。您可以使用以下 API 监控同步状态:
      GET /_ccr/stats
      
1.4、示例

假设您有两个集群:cluster_A (源集群) 和 cluster_B (目标集群)。您希望将 cluster_A 上的索引 logs 同步到 cluster_B

启用 CCR:

  • 在 cluster_A 和 cluster_B 的 elasticsearch.yml 文件中添加 CCR 配置 (如上所示)。

创建 Follower Index (在 cluster_B 上执行):

PUT logs_replica
{"index": {"remote": {"name": "cluster_A","connection": {"hosts": ["cluster_A_host_1:9200", "cluster_A_host_2:9200"]}},"leader_index": "logs"}
}

 监控同步状态:

GET /_ccr/stats

2. Logstash 或其他 ETL 工具

Logstash 是一款开源的数据处理管道工具,可以用于收集、解析、转换和传输数据。您可以使用 Logstash 将数据从源 Elasticsearch 集群同步到目标 Elasticsearch 集群。

2.1、优点
  • 灵活性: Logstash 支持各种数据源和目标,并提供了丰富的插件,可以进行数据转换和过滤。
  • 增量同步: 可以配置 Logstash 进行增量数据同步,只同步自上次同步以来更改的数据。
2.2、缺点
  • 复杂性: Logstash 的配置和维护比 CCR 更复杂。
  • 性能: Logstash 会对源集群造成一定的性能影响。
2.3、步骤
  • 安装 Logstash: 下载并安装 Logstash。

  • 配置 Logstash: 创建一个 Logstash 配置文件,用于从源集群读取数据,并将其写入目标集群。例如:

    input {elasticsearch {hosts => ["<source_cluster_host_1>:<port>", "<source_cluster_host_2>:<port>"]index => "<source_index_name>"query => '{ "match_all": {} }'}
    }output {elasticsearch {hosts => ["<target_cluster_host_1>:<port>", "<target_cluster_host_2>:<port>"]index => "<target_index_name>"}
    }
    
  • 运行 Logstash: 使用创建的配置文件运行 Logstash。

3. Apache Kafka 或 RabbitMQ

Apache Kafka 和 RabbitMQ 是流行的消息队列系统,可以用于构建高吞吐量、低延迟的数据管道。您可以使用它们将数据从源 Elasticsearch 集群异步复制到目标 Elasticsearch 集群。

3.1、优点
  • 解耦: 消息队列可以解耦数据生产者和消费者,提高系统可伸缩性和可靠性。
  • 可靠性: 消息队列支持数据持久化,可以保证数据不丢失。
3.2、缺点
  • 复杂性: 使用消息队列进行数据同步需要额外的组件和配置,架构比较复杂。
3.3、步骤
  • 配置消息队列: 安装并配置 Apache Kafka 或 RabbitMQ。
  • 创建生产者: 在源集群上创建数据生产者,将数据写入消息队列。
  • 创建消费者: 在目标集群上创建数据消费者,从消息队列读取数据并将其写入 Elasticsearch。

3.4、示例 (使用 Kafka):

  • 配置 Kafka: 安装并配置 Kafka 集群。

  • 创建生产者 (Python):

    from kafka import KafkaProducerproducer = KafkaProducer(bootstrap_servers=['<kafka_broker_1>:<port>', '<kafka_broker_2>:<port>'])# 从 Elasticsearch 读取数据
    # ...# 将数据发送到 Kafka topic
    producer.send('<topic_name>', data)
    
  • 创建消费者 (Python):

    from kafka import KafkaConsumer
    from elasticsearch import Elasticsearchconsumer = KafkaConsumer('<topic_name>', bootstrap_servers=['<kafka_broker_1>:<port>', '<kafka_broker_2>:<port>'])
    es = Elasticsearch(['<target_cluster_host_1>:<port>', '<target_cluster_host_2>:<port>'])for message in consumer:data = message.value# 将数据写入 Elasticsearches.index(index='<target_index_name>', document=data)
    

4、使用 Reindex API 进行跨集群同步

Reindex API 主要用于重建索引,但它也可以用于跨集群复制数据。

4.1、优点
  • 简单易用: Reindex API 使用方便,只需要指定源集群、目标集群和索引名称即可。
  • 支持版本间迁移: 可以使用 Reindex API 将数据从较低版本的 Elasticsearch 集群迁移到较高版本的集群。
  • 灵活的数据转换: 可以在 reindex 过程中使用脚本对数据进行转换。
4.2、缺点
  • 非实时同步: Reindex API 是一次性操作,不会实时同步数据。
  • 性能: 对于大型索引,reindex 操作可能需要很长时间,并且会对源集群和目标集群造成一定的性能影响。
4.3、步骤
  • 准备目标集群: 确保目标集群已经创建,并且具有足够的磁盘空间来存储数据。

  • 执行 Reindex API 请求: 在目标集群上执行以下请求,将数据从源集群复制到目标集群:

    POST _reindex
    {"source": {"remote": {"host": "<source_cluster_host>:<port>","username": "<username>","password": "<password>"},"index": "<source_index_name>"},"dest": {"index": "<target_index_name>"}
    }
    
    • 将 <source_cluster_host>:<port> 替换为源集群节点的主机名和端口。
    • 将 <username> 和 <password> 替换为具有足够权限访问源集群的用户的凭据。
    • 将 <source_index_name> 替换为要复制的索引名称。
    • 将 <target_index_name> 替换为目标索引名称。
  • 监控 reindex 进度: 可以使用以下 API 监控 reindex 操作的进度:

    GET _tasks/<task_id>
    
    • 将 <task_id> 替换为 reindex 操作返回的任务 ID。
4.4、示例

假设您要将名为 "source_index" 的索引从运行在 192.168.1.10:9200 的源集群复制到名为 "target_index" 的目标集群,可以使用以下命令:

curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d'
{"source": {"remote": {"host": "https://192.168.1.10:9200","username": "user","password": "password" },"index": "source_index"},"dest": {"index": "target_index"}
}
'

注意事项:

  • 确保目标集群中不存在与源集群索引同名的索引,否则数据可能会被覆盖。
  • 为了提高 reindex 性能,可以调整 reindex API 的参数,例如 slices(用于并行处理)和 batch_size(用于控制每次批量处理的文档数量)。

总结

选择哪种 ES 数据跨集群同步方案取决于您的具体需求,例如数据实时性要求、数据量、集群版本、网络环境等。 CCR 是官方推荐的解决方案,配置简单,性能优异,但需要 Elasticsearch 6.7 以上版本。 Logstash 和消息队列提供了更高的灵活性和可定制性,但配置和维护更复杂。使用 Reindex API 进行跨集群同步是一种简单直接的方法,但它不适用于需要实时同步数据的场景。 对于需要定期同步数据或进行一次性数据迁移的情况,Reindex API 是一个不错的选择。

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

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

相关文章

【LeetCode最详尽解答】42-接雨水 Trapping-Rain-Water

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 链接: 42-接雨水 直觉 通过可视化图形来解决这个问题会更容易理解和解决。 给定输入: height [0,1,…

mediasoup源码分析--channel创建及信令交互

mediasoup源码分析--channel创建及信令交互 概述跨职能图业务流程图代码剖析 概述 在golang实现mediasoup的tcp服务及channel通道一文中&#xff0c;已经介绍过信令服务中tcp和channel的创建&#xff0c;本文主要讲解c中mediasoup的channel创建&#xff0c;以及信令服务和medi…

基于CentOS的全新Linux机器安装Jenkins并生成Allure报告

目录 一、安装Docker 二、安装Docker Compose 三、准备测试用例 四、配置docker-compose.yml 五、启动Jenkins 六、配置Jenkins和Allure插件 七、创建含pytest的Jenkins任务 一、安装Docker 在CentOS上&#xff0c;首先更新包管理工具并安装所需的包。 sudo yum update…

12.3 Go 测试覆盖率

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

基于Elementui组件,在vue中实现多种省市区前端静态JSON数据展示并支持与后端交互功能,提供后端名称label和id

基于Elementui组件&#xff0c;在vue中实现多种省市区前端静态数据&#xff08;本地JSON数据&#xff09;展示并支持与后端交互功能&#xff0c;提供后端名称label和id 话不多说&#xff0c;先上图 1.支持传递给后端选中省市区的id和名称&#xff0c;示例非常完整&#xff0c…

阿里云 邮件系统DNS域名解析 搭配 postfix+dovecot 邮件服务器

1 创建邮箱域名A记录(一般邮箱客户端&#xff0c;增加pop,imap,stmp 3条记录) 登录阿里云控制台--云解析DNS 2 MX记录 3 SPF记录

【论文复现|智能算法改进】基于多策略的改进蜜獾算法及其应用

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜜獾算法&#xff08;HBA&#xff09;原理及实现 2.改进点 限制反向学习机制 在挖掘模式和蜂蜜模式不同路径更新的基础上引入限制反向学习机制&#xff0c;在算法迭代时&#xff0c;对当前的…

Fegin如何传参form-data文件

Form-data传输file参数&#xff0c;这个大家都比较清楚&#xff0c;那么针对于Fegin参数file参数该如何操作呢&#xff01;下面截图来找到对应的参数关系。 一、之前我们在postMan中是这种传参的&#xff0c;那么如果使用Feigin来传输文件File 二、在Fegin中传form-data参数&a…

C/C++ struct stat介绍

目录 前言 struct stat struct stat 使用 参考 共勉 前言 本文详细介绍了stat结构体的成员变量&#xff0c;以及使用案例&#xff0c;希望能够帮到您。 struct stat struct stat 结构体用于表示文件或者文件系统对象信息的一种结构体的声明&#xff0c;通常在POSIX&#x…

Mac M3 Pro 部署Flink-1.16.3

目录 1、下载安装包 2、解压及配置 3、启动&测试 4、测试FlinkSQL读取hive数据 以上是mac硬件配置 1、下载安装包 官网&#xff1a;Downloads | Apache Flink 网盘&#xff1a; Flink 安装包 https://pan.baidu.com/s/1IN62_T5JUrnYUycYMwsQqQ?pwdgk4e Flink 已…

【ComfyUI】Stable Diffusion 3 加Controlnet

基于 instantX-research/diffusers_sd3_control: &#x1f917; Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX. (github.com) 和 ZHO-ZHO-ZHO/ComfyUI-SD3-Medium-CN-Diffusers: ComfyUI SD3-Medium ControlNet&#…

html入门综合练习

综合练习 通过实际项目练习可以更好地理解和掌握HTML、CSS和JavaScript。以下是几个综合练习项目的建议&#xff1a; 项目1&#xff1a;个人简历网页 创建一个包含以下内容的个人简历网页&#xff1a; 个人简介&#xff08;姓名、照片、联系方式&#xff09;教育背景工作经…

Survival Animations

一套生存游戏的动画集,包括采集、建造、捕鱼、剥皮/鞣制、篝火等更多内容。 总动画数:89 建造/制作 30 篝火 28 饮水 3 水壶 3 觅食 2 治疗 3 空闲 1 原始捕鱼 7 剥皮 1 矛捕鱼 4 伐木 5 下载:​​Unity资源商店链接资源下载链接 效果图:

[自动驾驶 SoC]-4 特斯拉FSD

FSD, 参考资料来源FSD Chip - Tesla - WikiChip 另外可参考笔者之前分享文章&#xff1a;[自动驾驶技术]-6 Tesla自动驾驶方案之硬件&#xff08;AI Day 2021&#xff09;&#xff0c;​​​​​​​[自动驾驶技术]-8 Tesla自动驾驶方案之硬件&#xff08;AI Day 2022&#xf…

Java多线程下载工具,多线程,多任务,断点续传,GUI

目录 一、题目要求 二、效果展示 三、功能实现 四、代码 一、题目要求 序号 功能名称 功能需求标识 简要描述 1 下载功能 Download 当用户输入一个下载链接后&#xff0c;能识别链接并开始多线程下载工作&#xff0c;包括线程监听、线程管理等。 2 续传功能 …

MMpose安装实例

摘要&#xff1a; 这个大数据训练发展较快&#xff0c;各种版本问题&#xff0c;不太好匹配&#xff0c;仅是安装就会大费周章。本文图文并茂的描述了一种成功的安装方式。仅供参考。 使用的win版本是win11&#xff0c;英伟达显卡是GeForce GTX 1660 SUPER。 1.cuda版本选择 通…

浏览器f12控制台怎么获取vue实例,并且修改data数据

我们在日常的生产工作中&#xff0c;经常会遇到一些问题&#xff0c;比如&#xff0c;若产品已经部署&#xff0c;或是目前无法查看源代码&#xff0c;或者向用命令直接修改查询默认表单数据&#xff0c;那我们怎么去查看Vue实例呢&#xff1f; 我们在浏览器直接打印this不能得…

基于JSP技术的弹幕视频网站系统

开头语 你好&#xff0c;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;可以通过文末的联系方式找到我。 开发语言 JSP 数据库 MySQL 技术 JSP JavaBeans 工具 MyEclipse、Tomcat、Navicat 系统展示 首页 用户登录界面 视频信息界面…

《跟我一起学“网络安全”》——等保风评加固应急响应

等保风评加固应急响应 一、安全加固 背景 随着IP技术的飞速发展&#xff0c;一个组织的信息系统经常会面临内部和外部威胁的风险&#xff0c;网络安全已经成为影响信息系统的关键问题。 虽然传统的防火墙等各类安全产品能提供外围的安全防护&#xff0c;但并不能真正彻底的消…

新闻稿标题怎么写吸引人?建议收藏

一个好的标题&#xff0c;不仅能激发读者的好奇心&#xff0c;还能引导他们继续深入了解文章内容。本文伯乐网络传媒将为你揭秘新闻稿标题写作的十大技巧&#xff0c;让你轻松写出吸引人的标题。 1. 激发好奇心 a. 提出疑问&#xff1a;以问句的形式提出问题&#xff0c;让读者…