【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 KafkaProducer
    
    producer = 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 Elasticsearch
    
    consumer = 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
        # 将数据写入 Elasticsearch
        es.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 是一个不错的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 Thingsboard 定制开发,国产化企业级、低代码 AIoT 物联网平台

项目源码&#xff0c;文末联系小编 01 ThingsKit 物联网平台 ThingsKit 是基于 Thingsboard 开源物联网平台二次开发&#xff0c;面向中小型企业开箱即用的低代码物联网平台&#xff0c;提供N1N&#xff08;N个终端产品1个物联网平台N个行业方案&#xff09;的产品服务矩阵&…

2024爱分析·AI Agent创新成就奖开启申报丨奖项征集

AI Agent正成为企业数字化转型的关键力量。它们不仅提升了工作效率&#xff0c;优化了客户体验&#xff0c;更是在数据分析、决策支持和自动化流程中扮演着至关重要的角色。随着技术的不断进步和应用场景的拓展&#xff0c;AI Agent正以其独特优势&#xff0c;引领企业进入一个…

我的第一个 iOS 程序:iTahDoodle

我的第一个 iOS 程序&#xff1a;iTahDoodle 我的第一个 iOS 程序&#xff1a;iTahDoodle应用功能对象图应用委托对象设置视图为按钮关联动作方法为 UITableView 对象提供数据保存并加载任务数据在模拟器上运行程序下载链接 我的第一个 iOS 程序&#xff1a;iTahDoodle 实现了…

QT——MySQL数据库联用

一、ODBC 1、ODBC简介 ODBC全称为Open Database Connectivity,是一种用于数据库操作的标准接口。要使用ODBC,首先需要安装相应的ODBC驱动程序,然后在系统中配置ODBC数据源。接着,可以通过编程语言(如C++、Java等)或者数据库工具(如SQL Server Management Studio)来连…

深度学习推理显卡设置

深度学习推理显卡设置 进入NVIDIA控制面板&#xff0c;选择 “管理3D设置”设置 "低延时模式"为 "“超高”"设置 “电源管理模式” 为 “最高性能优先” 使用锁频来获得稳定的推理 法一&#xff1a;命令行操作 以管理员身份打开CMD查看GPU核心可用频率&…

AIoT设备新一代高性能处理器瑞芯微RK3576,东胜物联RK3588等核心板定制开发

随着物联网、人工智能和嵌入式技术的不断发展&#xff0c;智能设备应用对芯片处理器的性能需求越来越高&#xff0c;以满足复杂的数据处理需求、实时性要求、复杂的算法运算和多任务处理能力。高性能的芯片可以为智能设备提供更强大的计算能力和更快速的响应速度&#xff0c;从…

通过nginx转发后应用偶发502bad gateway

序言 学习了一些东西&#xff0c;如何才是真正自己能用的呢&#xff1f;好像就是看自己的潜意识的反应&#xff0c;例如解决了一个问题&#xff0c;那么下次再碰到类似的问题&#xff0c;能直接下意识的去找到对应的信息&#xff0c;从而解决&#xff0c;而不是和第一次碰到一样…

新手如何入门Web3?

一、什么是Web3&#xff1f; Web3是指下一代互联网&#xff0c;它基于区块链技术&#xff0c;致力于将各种在线活动变得更加安全、透明和去中心化。Web3是一个广义的概念&#xff0c;涵盖了包括数字货币、去中心化应用、智能合约等在内的多个方面。它的主要特点包括去中心化、…

网络编程--网络理论基础(二)

这里写目录标题 网络通信流程mac地址、ip地址arp协议交换机路由器简介子网划分网关 路由总结 为什么ip相同的主机在与同一个互联网服务通信时不冲突公网ip对于同一个路由器下的不同设备&#xff0c;虽然ip不冲突&#xff0c;但是因为都是由路由器的公网ip转发通信&#xff0c;接…

Apache Paimon系列之:Append Table和Append Queue

Apache Paimon系列之&#xff1a;Append Table和Append Queue 一、Append Table二、Data Distribution三、自动小文件合并四、Append Queue五、压缩六、Streaming Source七、Watermark Definition八、Bounded Stream 一、Append Table 如果表没有定义主键&#xff0c;则默认为…

Vue3基础介绍

文章目录 一、简介1、简介2、性能提升3、源码升级4、拥抱TypeScript5、新特性 二、创建Vue3.0工程1、使用vue-cli创建2、使用vite创建 三、分析工程结构1、main.js2、组件中 一、简介 1、简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号(One Piece)海贼王 …

怎么用AI绘画完成设计创作?

AI绘画工具为设计师提供了强大的功能和便利性&#xff0c;用AI绘画进行艺术创作能够使设计师能够更快地迭代和优化设计方案&#xff0c;提高设计效率。那么怎么用AI绘画完成设计创作? 要使用AI绘画完成设计创作&#xff0c;首先需要选择一个合适的工具。目前市场上有很多优秀的…

KVB:怎么样选择最优交易周期?

摘要 在金融交易中&#xff0c;周期的选择是影响交易成败的重要因素之一。不同的交易周期对应不同的市场环境和交易策略&#xff0c;选择合适的周期可以提高交易的成功率。本文将详细探讨交易中如何选择最优周期&#xff0c;包括短周期、中周期和长周期的特点及适用情况&#…

CVE-2023-38836(文件上传+命令执行)

简介 BoidCMS v.2.0.0 存在文件上传漏洞&#xff0c;远程攻击者可通过添加 GIF 头部绕过 MIME 类型检查&#xff0c;执行任意代码。 过程 打开靶场 对网站进行目录扫描 发现后台&#xff0c;登录弱口令账号密码 admin/password 发现文件上传位置 根据简介提示&#xff0c;…

Vue57-组件的自定义事件_解绑

给谁绑的自定义事件&#xff0c;就找谁去触发&#xff1b;给谁绑的自定义事件&#xff0c;就找谁去解绑&#xff1b; 一、解绑自定义事件 1-1、解绑一个自定义事件 到student.vue组件中去解绑。 1-2、解绑多个自定义事件 使用数组来解绑多个。 1-3、解绑所有的自定义事件 二、…

django学习入门系列之第三点《快速了解 CSS》

文章目录 CSS快速了解CSS应用方式在标签上在head标签中写到文件中问题&#xff1a;用Flask框架开发不方便 往期回顾 CSS CSS 专门用来"美化"标签 基础CSS,写简单的界面 &能看懂 &会改就行模块&#xff0c;调整和修改 快速了解 style 这种就叫css样式 &l…

aasist-bladedisc 音频反欺骗算法模型

AASIST 论文 参考ASIST: Audio Anti-Spoofing using Integrated Spectro-Temporal Graph Attention Networks https://arxiv.org/pdf/2110.01200.pdf 模型结构 aasist是一种开源的音频反欺诈的模型&#xff0c;主要的模型结构如下所示&#xff1a; 算法原理 环境配置 Dock…

Python实现逻辑回归与判别分析--西瓜数据集

数据 数据data内容如下&#xff1a; 读取数据&#xff1a; import numpy as np import pandas as pd data pd.read_excel(D:/files/data.xlsx) 将汉字转化为01变量&#xff1a; label [] for i in data[好瓜]:l np.where(i 是,1,0)label.append(int(l)) data[label] lab…

测试单选框

单选按钮&#xff1a;用于在一组互相排斥的选项中选择其中一项&#xff1b; 由一个圆圈和紧随其后的文本标题组成&#xff0c;当它被选中时&#xff0c;圆圈中就标上一个黑点。 通常将一组单选按钮放在一个组框控件中&#xff0c;在一组单选按钮中&#xff0c;第一个(Tab键顺序…

深度神经网络——什么是NLP(自然语言处理)?

自然语言处理&#xff08;NLP&#xff09; 是对使计算机能够处理、分析、解释和推理人类语言的技术和工具的研究和应用。 NLP 是一个跨学科领域&#xff0c;它结合了语言学和计算机科学等领域已建立的技术。 这些技术与人工智能结合使用来创建聊天机器人和数字助理&#xff0c;…