本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
ES多轮分批融合迁移方案(ES索引级别融合迁移方案)
● 版本
Elasticsearch版本:7.7.0
● 配置
节点数量:3
内存:4G
硬盘:高性能云盘 50G
CPU核心数:2
● 版本
Elasticsearch版本:7.10.1(腾讯云 Elasticsearch Service 基础版)
● 配置
节点数量:3
内存:4G
硬盘:高性能云盘 20G
CPU核心数:2
集群名称 | 集群版本 | 节点信息 | 云上ID | 迁移方案 |
---|---|---|---|---|
tencent-drill(自建) | 7.7.0 | 10.0.0.10 node-0110.0.0.29 node-0210.0.0.45 node-03 | / | / |
tencent-drill | 7.10.1 | 10.0.0.42 166791864200329513210.0.0.36 166791864200329493210.0.0.33 1667918642003295032 | es-7k9lokog | 首次融合迁移 |
tencent-drill-once | 7.10.1 | 10.0.0.41 166791956600329993210.0.0.35 166791956600329983210.0.0.32 1667919566003300032 | es-fqetcgvk | 二次融合迁移 |
集群情况:
一共3个节点
索引情况:
一共20个索引,数据在持续写入
对自建集群设置索引分片分配属性策略
curl -H "Content-Type: application/json" -XPUT 10.0.0.10:9200/_all/_settings?pretty -d '{
"index.routing.allocation.include._name" : "node-01, node-02, node-03"
}'
集群融合,修改云上集群的配置文件,追加自建集群的节点ip
该操作执行完,集群不会正式融合,还需要统一集群元数据
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-7k9lokog",
"operator": "daemonyue",
"es_config": {
"discovery.seed_hosts": "[\"10.0.0.10:9300\", \"10.0.0.29:9300\", \"10.0.0.45:9300\", \"10.0.0.42:9300\", \"10.0.0.36:9300\", \"10.0.0.33:9300\"]"
},
"restart_type": "full_cluster_restart"
}'
重启后,在腾讯云集群的cvm上执行
su - c_log
killall /data/c_log/repository/jdk/kona11.0.9.1.b1/bin/java
cd /data1/containers/*/es/
./bin/elasticsearch-node detach-cluster (选择y)
初始化完云上集群元数据之后,自建与云上集群融合成功
这里首次融合迁移我们只迁5个索引:
curl -H "Content-Type: application/json" -XPUT 10.0.0.10:9200/es_index-1,es_index-2,es_index-3,es_index-4,es_index-5/_settings?pretty -d '{
"index.routing.allocation.include._name" : "1667918642003295132, 1667918642003294932, 1667918642003295032"
}'
发起迁移之后,数据迁移到了云上。
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-7k9lokog",
"operator": "daemonyue",
"es_config": {
"gateway.auto_import_dangling_indices": "true",
"discovery.seed_hosts": "null"
},
"restart_type": "full_cluster_restart"
}'
重启后,在腾讯云集群的cvm上执行
su - c_log
killall /data/c_log/repository/jdk/kona11.0.9.1.b1/bin/java
cd /data1/containers/*/es/
mkdir ~/_statebak
mv data/nodes/0/_state/* ~/_statebak
成功分离后,索引正常,符合预期。
对自建集群设置索引分片分配属性策略
curl -H "Content-Type: application/json" -XPUT 10.0.0.10:9200/_all/_settings?pretty -d '{
"index.routing.allocation.include._name" : "node-01, node-02, node-03"
}'
修改云上集群的配置文件,追加自建集群的节点ip
该操作执行完,集群不会正式融合,还需要统一集群元数据
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-fqetcgvk",
"operator": "daemonyue",
"es_config": {
"discovery.seed_hosts": "[\"10.0.0.10:9300\", \"10.0.0.29:9300\", \"10.0.0.45:9300\", \"10.0.0.41:9300\", \"10.0.0.35:9300\", \"10.0.0.32:9300\"]"
},
"restart_type": "full_cluster_restart"
}'
重启后,在腾讯云集群的cvm上执行
su - c_log
killall /data/c_log/repository/jdk/kona11.0.9.1.b1/bin/java
cd /data1/containers/*/es/
./bin/elasticsearch-node detach-cluster (选择y)
初始化完云上集群元数据之后,自建与云上集群融合成功
二次融合迁移我们迁7个索引:
curl -H "Content-Type: application/json" -XPUT 10.0.0.10:9200/es_index-6,es_index-7,es_index-8,es_index-9,es_index-10,es_index-11,es_index-12/_settings?pretty -d '{
"index.routing.allocation.include._name" : "1667919566003299932, 1667919566003299832, 1667919566003300032"
}'
发起迁移之后,数据迁移到了云上。
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-fqetcgvk",
"operator": "daemonyue",
"es_config": {
"gateway.auto_import_dangling_indices": "true",
"discovery.seed_hosts": "null"
},
"restart_type": "full_cluster_restart"
}'
重启后,在腾讯云集群的cvm上执行
su - c_log
killall /data/c_log/repository/jdk/kona11.0.9.1.b1/bin/java
cd /data1/containers/*/es/
mkdir ~/_statebak
mv data/nodes/0/_state/* ~/_statebak
成功分离后,索引正常,符合预期。
二次融合迁移之后,数据迁移到了云上新建的小集群里,但由于数据还需要整合到云上主集群,所以还有一步快照迁移的操作。
PUT _snapshot/tencent-drill
{
"type": "cos",
"settings": {
"app_id": "xxxxxxxxxx",
"access_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"access_key_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"bucket": "dy-escos",
"region": "ap-shanghai",
"compress": true,
"chunk_size": "500mb",
"base_path": "/tencent-drill"
}
}
PUT _snapshot/tencent-drill/tencent-drill1
{
"indices": "es_index-6,es_index-7,es_index-8,es_index-9,es_index-10,es_index-11,es_index-12,es_index-13,es_index-14,es_index-15,es_index-16,es_index-17,es_index-18,es_index-19"
}
备份成功:
POST _snapshot/tencent-drill/tencent-drill1/_restore
{
"ignore_index_settings": [
"index.routing.allocation.include._name"
]
}
恢复完成,数据条数符合预期:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。