elasticsearch5.6.14的数据搬到elasticsearch5.6.16

目的:ES5.6.14 数据迁移至ES5.6.16

原理:保存在快照(snapshot)中的信息没有绑定任何版本的ES,因此可以通过拍snapshot实现不同版本之间的数据传输

注:通过snapshot最多跨越一个大版本(即4.x==>5.x)

步骤:

  • ES5.6.14操作
  1. 配置文件elasticsearch.yml添加快照的仓库repo路径

path.repo: ……/指定位置

  1. 关闭ES14自动平衡,据说会浪费大量时间在IO上,官方文档有,全英看的眼花

# 我使用的是ES命令,如果是curl操作,自行转换,不作赘述

PUT _cluster/settings

{

  "transient": {

    "cluster.routing.allocation.enable": "none"

  }

}

  1. 重启ES14(我就是简单的kill再重启,不知道合适否)
  2. 启动自平衡

PUT _cluster/settings

{

  "transient": {

    "cluster.routing.allocation.enable": "all"

  }

}

  1. 根据简书的意见,上述1~4操作需要单个节点一个一个往复单独操作,具体原因我也不懂
  2. 设置集群快照

# 创建快照仓库client_statistic(仓库名称随便自己喜好)

PUT _snapshot/client_statistic

{

  "type": "fs" # 文件系统

  , "settings": {

    "location": "……" #仓库存放位置,应该与前面所配置的path.repo路径一致

    , "compress": true

    , "max_snapshot_bytes_per_sec": "50mb"

    , "max_restore_bytes_per_sec": "50mb"

  }

}

其中或许或出现一些报错,简书有提供一些错误的解决方法

  1. 在仓库中创建指定索引的快照

# 制作快照

PUT _snapshot/{仓库名称0}/{快照名称}

{

  "indices": "{索引index}"

}

 

 

由于我的ES14与ES16在同一台机器上,我设置了相同的仓库目录,所以不需要将ES14仓库搬到ES16仓库中(不同机器可以考虑scp传输)

  • ES5.6.16操作
  1. 修改YML文件,同上,增加一项path.repo
  2. 关闭自动平衡,同上
  3. 创建数据仓库,同上(仓库同名,这样就能在新的ES上使用拷贝过来的快照仓库)
  4. 快照恢复

POST _snapshot/{仓库}/{快照}/_restore?wait_for_completion=true

{

  "include_global_state": false

  , "ignore_unavailable": true

}

参数意义可参照官方文档

理论上我做到这一步后,只要我重启ES,ES5.6.14的数据就算成功迁移到ES5.6.16,但是当我使用

{"query": {"match_all": {}}}

发现还是查不到数据,而且报500错误

参展文章,

运行命令

POST _flush/synced

意思大概就是刷新同步的意思把,才真正查询到数据

展开阅读全文

没有更多推荐了,返回首页