小记Elasticsearch数据迁移

背景

机房需迁移,决定使用阿里云作为临时过渡,因此需要将数据从久的集群迁移到新的机器上。
迁移的方法有很多种,可以使用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

你可能感兴趣的:(小记Elasticsearch数据迁移)