使用elasticsearch-repository-oss 插件对es 进行迁移

  • 首先讲依赖。依赖于阿里云的oss服务首先要新建好bucket 创建好存储空间 这里可以获取到密钥和appid 和bucketName 等等
  • 其次要以来与elasticsearch-repository-oss 这个插件,迁移端和被迁移端都需要安装此插件。这里切换es版本的时候会遇到一系列问题。这个在文末补充先讲主流程。(这里很恶心不是每个版本都有这个插件。迁移的时候需要迁就这个插件来更改es版本)
  • 在迁移端打镜像
    首先在es集群中创建仓库
    curl -H "Content-Type: application/json" -XPUT localhost:9200/_snapshot/<yourBackupName> -d' {"type": "oss", "settings": { "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",  "access_key_id": "<yourAccesskeyId>",  "secret_access_key":"<yourAccesskeySecret>", "bucket": "<yourBucketName>", "compress": true }}'
    或者在kibana使用一下命令进行创建仓库
    PUT _snapshot/<yourBackupName>
    {
        "type": "oss",
        "settings": {
            "endpoint": "oss-cn-hangzhou-internal.aliyuncs.com",
            "access_key_id": "<yourAccesskeyId>",
            "secret_access_key": "<yourAccesskeySecret>",
            "bucket": "<yourBucketName>",
            "compress": true
        }
    }
    为全部索引创建快照
    PUT _snapshot/my_backup/snapshot_1

    查看快照信息
    GET _snapshot/my_backup/_all

     

  • 在迁移目标端恢复快照。
    首先还是要创建相同的仓库 这里的配置和迁移端一致。
    PUT _snapshot/<yourBackupName>
    {
        "type": "oss",
        "settings": {
            "endpoint": "oss-cn-hangzhou-internal.aliyuncs.com",
            "access_key_id": "<yourAccesskeyId>",
            "secret_access_key": "<yourAccesskeySecret>",
            "bucket": "<yourBucketName>",
            "compress": true
        }
    }
    
    在目标端回复快照
    POST _snapshot/es_backup/snapshot_1/_restore
    {"indices":"*,-.monitoring*,-.security_audit*","ignore_unavailable":"true"}

    或者不依赖于kibana

     curl -XPOST http://localhost:9200/_snapshot/my_backup/snapshot_3/_restore -H 'Content-Type: application/json' -d '{"indices":"*,-.monitoring*,-.security_audit*,-.apm-agent-configuration,-.apm-custom-link,-.kibana*,-ilm-history-3-000001*","ignore_unavailable":"true"}'

      最后查看执行效果

     curl  'localhost:9200/_cat/indices?v&s=index'

     

  • 最后查看恢复效果 
    GET /_cat/indices?v
    -- 根据index 排序
    GET /_cat/indices?v&s=index

     

  • 在实际操作过程中会遇到的一些问题以及具体的解决方案 。
    • 首先是插件的版本和es的版本需要一致的问题。如果不一致会导致es起不来
    • 在切换es版本的时候kibana 可能起不来。 这是因为不同版本的 kibana 在es中的一些index不兼容导致的 这里可以通过先停止kibana容器然后在es 删除 旧版本的kibana index 
      curl -X DELETE http://localhost:9200/*kibana*
    • 在使用通配表达式的时候 7.10版本为了安全默认禁用了这种表达式会禁止使用这种表达式需要修改配置才能使上一步语句执行。
    • (报错如:Wildcard expressions or all indices are not allowed)解决方案
      1、可以在elasticsearch.yml 进行如下配置
      action.destructive_requires_name: false
      2、直接在kibana执行
      PUT /_cluster/settings
      {"persistent" : {"action.destructive_requires_name":false}}

      我用的是方法2.经过上述配置修改之后。就能使用正则进行批量删除了。这里建议迁移完毕之后上述参数还是要改成true 。

    • 在恢复快照过程中如果当前目标es 存在快照相同的index ,恢复过程会被中断。这里我是按照提示重复的index进行删除即可。
    • 分片不足导致kibana起不来
    • 报错如:[validation_exception]: Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [12399]/[10000] maximum shards open;
       curl -L -X PUT 'http://localhost:9201/_cluster/settings' \
      -H 'Content-Type: application/json' \
      -d '{
          "transient": {
              "cluster": {
                  "max_shards_per_node": 15000
              }
          }
      }'

       

    • 其实对于单个index的迁移可以使用dump命令来进行操作以下为势力
      --  index
      elasticdump --input=http://local:9201/index --output=./index.json --type=data
      
      elasticdump --input=http://local:9201/index --output=./index_mapping.json --type=mapping
       
      elasticdump --input=./index_mapping.json --output=http://local:9200/index --type=mapping
      
      elasticdump --input=./index.json --output=http://local:9200/index --type=data

       

  • from  https://help.aliyun.com/document_detail/170022.html
  • https://help.aliyun.com/document_detail/65675.htm?spm=a2c4g.11186623.0.0.63394a62bmDpXj#concept-b3z-3ts-zgb
posted @ 2022-07-14 10:06  雨V幕  阅读(598)  评论(0编辑  收藏  举报