ES 数据比对之 INFINI Gateway
2025-09-27
上一篇我们通过 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
修改集群资源相关的配置
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,是的一次对比两个。
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"
- 执行数据比对
# 数据比对的配置文件名为 index-diff.yml
./gateway-mac-arm64 -config index-diff.yml
比对结果显示, infinilabs 和 test1 两个索引的数据在两个集群一致。如果数据不一致会是什么情况呢?这个任务交给屏幕前的你了,有问题欢迎找我交流。