背景
机房需迁移,决定使用阿里云作为临时过渡,因此需要将数据从久的集群迁移到新的机器上。
迁移的方法有很多种,可以使用ES自带的reindex,也可以使用开源工具。我不想装其他东西,所以决定使用reindex。以下为操作记录。
步骤
1.设置白名单
A集群的数据迁移到B集群上,因此需要修改B集群的elasticsearch.yml
配置文件,添加以下配置
# reindex.remote.whitelist: A的IP:端口,例如:
reindex.remote.whitelist: 222.168.1.23:9200
然后重启es,让配置生效
2.创建索引
在新的集群创建索引表,我使用kibana工具进行创建
PUT new_article
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"id": {
"type": "keyword"
},
"title": {
"type": "keyword"
},
"content": {
"search_analyzer": "ik_smart",
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
3.开始迁移
同样是在kibana中进行操作。
POST _reindex?wait_for_completion=false
{
"source": {
"index": "old_article",
"remote": {
"host": "http://222.168.1.23:9200",
"username": "anson",
"password": "123456"
},
"query": {
"match_all": {}
},
"size": 1000
},
"dest": {
"index": "new_article"
}
}
执行完会返回一个taskIdV4HXRiU6TU0mTDTaf_w:906
,通过此id可以查询导入的进度
GET _tasks/V4HXRiU6TU0mTDTaf_w:906
ps. 如果迁移的数据量太大,不加wait_for_completion=false,接口会报超时错误
{"statusCode":502,"error":"Bad Gateway","message":"Client request timeout"}
4.取消任务
POST _tasks/V4HXRiU6TU0mTDTaf_w:906/_cancel