--- title: "ES 数据比对之 INFINI Gateway" date: 2025-09-27 lastmod: 2025-09-27 description: "本文介绍如何使用INFINI Gateway对比ES索引数据,适用于Elasticsearch、Easysearch、Opensearch。" tags: ["Easysearch", "Gateway"] summary: "上一篇我们通过 INFINI Gateway 进行了索引 数据迁移,对索引迁移结果进行了初步且直观的校验,既对比索引的文档数是否一致。今天介绍个实实在在的数据比对方法,通过网关对比索引文档的内容在两个集群是否一致,此方法适用于 Elasticsearch、Easysearch、Opensearch。话不多说,就拿上次迁移的两个索引开整。 测试环境 # 软件 版本 Easysearch 1.12.0 Elasticsearch 7.17.29 INFINI Gateway 1.29.2 比对步骤 # 操作非常简单,拢共分两步: 准备网关配置 数据比对 比对实战 # 准备网关比对数据的配置 老样子去 github 拿就完了,戳 这里。下载完之后,稍作修改. 修改文件开头的变量,两个 ENDPOINT 分别指向两个集群。 1 env: 2 LR_GATEWAY_HOST: 127.0.0.1:8001 3 LR_GATEWAY_API_HOST: 127.0.0.1:9000 4 ELASTICSEARCH_ENDPOINT: http://127.0.0.1:9200 5 ELASTICSEARCH_ENDPOINT2: http://127.0.0.1:9201 6 SUITES_NAME: index-docs-diff 修改集群资源相关的配置" --- 上一篇我们通过 INFINI Gateway 进行了索引[数据迁移](https://infinilabs.cn/blog/2025/data-migration-using-infini-gateway/),对索引迁移结果进行了初步且直观的校验,既对比索引的文档数是否一致。今天介绍个实实在在的数据比对方法,通过网关对比索引文档的内容在两个集群是否一致,此方法适用于 Elasticsearch、Easysearch、Opensearch。话不多说,就拿上次迁移的两个索引开整。 ## 测试环境 | 软件 | 版本 | | -------------- | ------- | | Easysearch | 1.12.0 | | Elasticsearch | 7.17.29 | | INFINI Gateway | 1.29.2 | ## 比对步骤 操作非常简单,拢共分两步: 1. 准备网关配置 2. 数据比对 ## 比对实战 1. 准备网关比对数据的配置 老样子去 github 拿就完了,戳[这里](https://github.com/infinilabs/testing/blob/main/setup/gateway/cases/elasticsearch/index-docs-diff/gateway.yml)。下载完之后,稍作修改. 修改文件开头的变量,两个 ENDPOINT 分别指向两个集群。 ```plain 1 env: 2 LR_GATEWAY_HOST: 127.0.0.1:8001 3 LR_GATEWAY_API_HOST: 127.0.0.1:9000 4 ELASTICSEARCH_ENDPOINT: http://127.0.0.1:9200 5 ELASTICSEARCH_ENDPOINT2: http://127.0.0.1:9201 6 SUITES_NAME: index-docs-diff ``` 修改集群资源相关的配置 ```plain 36 elasticsearch: 37 - name: source 38 enabled: true 39 endpoints: 40 - $[[env.ELASTICSEARCH_ENDPOINT]] 41 basic_auth: 42 username: elastic 43 password: goodgoodstudy 44 45 - name: target 46 enabled: true 47 endpoints: 48 - $[[env.ELASTICSEARCH_ENDPOINT2]] 49 basic_auth: 50 username: admin 51 password: 14da41c79ad2d744b90c ``` pipeline 部分修改要对比的索引名称为 infinilabs 和 test1,是的一次对比两个。 ```plain pipeline: - name: index_diff_service auto_start: true keep_running: false processor: - dag: mode: wait_all parallel: - dump_hash: #dump es1's doc sort_document_fields: true indices: "infinilabs,test1" scroll_time: "10m" elasticsearch: "source" # query_string: "_id:c8es70pu46lgfdgmja9g-1646117763293610802-2" # fields: "doc_hash" output_queue: "source_docs" batch_size: 1000 slice_size: 1 # hash_func: "xxhash64" - dump_hash: #dump es2's doc indices: "infinilabs,test1" scroll_time: "10m" # fields: "doc_hash" # query_string: "_id:c8es70pu46lgfdgmja9g-1646117763293610802-2" batch_size: 1000 slice_size: 1 # hash_func: "xxhash64" elasticsearch: "target" output_queue: "target_docs" ``` 2. 执行数据比对 ```plain # 数据比对的配置文件名为 index-diff.yml ./gateway-mac-arm64 -config index-diff.yml ``` {{% load-img "/img/blog/2025/es-data-comparison/1.png" "" %}} 比对结果显示, infinilabs 和 test1 两个索引的数据在两个集群一致。如果数据不一致会是什么情况呢?这个任务交给屏幕前的你了,有问题欢迎找我交流。 {{% load-img "/img/blog/banner/about_yangf.png" "" %}}