更新时间:2024-11-29 GMT+08:00

使用快照迁移Elasticsearch数据

操作场景

使用HDFS作为快照存储仓库,将源端集群Elasticsearch数据迁移到目的端集群Elasticsearch。

为提升迁移速度,推荐将HDFS服务所在集群安装为普通模式。

支持开源Elasticsearch 6.8.0及其以上版本数据迁移到当前版本集群。

支持FusionInsight 6.5.1迁移到当前版本集群。

前提条件

  • HDFS组件已安装,如果HDFS组件与Elasticsearch集群都是安全模式且非同一集群则需要配置跨集群互信。
  • 源端和目的端集群Elasticsearch服务正常运行。

    HDFS组件可以与源端或目的端Elasticsearch组件安装在同一个集群,也可以安装在其他集群。

操作步骤

  1. 检查源端和目的端Elasticsearch是否为安全模式。

    在Manager首页,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch”,进入Elasticsearch概述页面,单击“配置”进入配置页面。在配置页面右上方搜索框输入“ELASTICSEARCH_SECURITY_ENABLE”,确认该参数是否可以查询到且参数值为“true”。

    • 是,执行2
    • 否,执行3

  2. 配置安全模式下使用curl命令。参考Linux下curl命令的使用中的“环境准备”。
  3. root用户登录任意已安装Elasticsearch客户端的EsNode节点。
  4. 在HDFS组件的Manager首页,选择“集群 > 待操作集群的名称 > 集群属性”,进入集群属性页面,查看认证模式是否为安全模式。

    • 是,执行5
    • 否,执行9

  5. 创建访问HDFS服务的机机用户。

    在HDFS组件的Manager界面选择“系统 > 权限 > 用户 > 添加用户”。填写“用户名”,例如test,“用户类型”为“机机”,加入用户组“supergroup”,选择“主组”为“supergroup”。

  6. 准备安全认证文件。

    在HDFS组件的Manager界面选择“系统 > 权限 > 用户”,在用户名中选择机机用户test,选择“更多 > 下载认证凭据”,保存后解压得到用户的“user.keytab”文件,并重命名为“krb5.keytab”。

  7. 使用WinSCP工具以omm用户登录源端和目的端集群主OMS节点,上传“krb5.keytab”到指定路径下。例如:“/home/omm”。
  8. 在源端集群和目的端Elasticsearch服务的每个实例配置路径“elasticsearch.install.path/cluster/实例目录/config/repository-hdfs”上传“krb5.keytab”文件。

    例如:

    在实例目录中上传krb5.keytab文件,例如:

    ./clusterscp.sh put /home/omm/krb5.keytab elasticsearch.install.path/cluster/EsMaster/config/repository-hdfs

    ./clusterscp.sh put /home/omm/krb5.keytab elasticsearch.install.path/cluster/EsNode1/config/repository-hdfs

    • elasticsearch.install.path:Elasticsearch组件安装目录。
    • 如果部署了EsNode2-9实例,请对所有实例执行上述命令。

  9. 准备HDFS客户端配置文件。

    1. 在HDFS组件的Manager首页,选择“集群 > 待操作集群的名称 > 服务 > HDFS”,在右上方选择“更多 > 下载客户端”,选择客户端类型为“仅配置文件”,单击“确定”下载配置文件压缩包。
    2. 解压配置文件压缩包,获取以下配置文件用于10

      core-site.xml

      hdfs-site.xml

  10. 登录源端集群Elasticsearch客户端所在EsNode节点,使用curl命令创建快照仓库。

    curl -XPUT --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup" -H 'Content-Type: application/json' -d'
    {
    "type": "hdfs",
    "settings": {
    "uri": "hdfs://hacluster/",        //core-site.xml fs.defaultFS
    "path": "/test/backup",            //HDFS存放路径,不用提前创建
    "security.principal": "test@HADOOP.COM",    //HDFS组件的机机用户,仅在HDFS组件为安全模式时配置
    "hadoop.security.authentication":"kerberos",    //需要指定认证为kerberos,仅在HDFS组件为安全模式时配置
    "load_defaults": true,
    "concurrent_streams": 5,
    "compress": "true",
    "conf.hadoop.rpc.protection":"privacy",
    "conf.dfs.nameservices":"hacluster",       //参照hdfs-site.xml中dfs.nameservices进行配置
    "conf.dfs.ha.namenodes.hacluster": "19,20",//参照hdfs-site.xml中dfs.ha.namenodes.hacluster进行配置
    "conf.dfs.namenode.rpc-address.hacluster.19":"192.168.168.11:8020",//参照hdfs-site.xml中dfs.namenode.rpc-address.hacluster.19进行配置,并将主机名替换为对应的IP
    "conf.dfs.namenode.rpc-address.hacluster.20":"192.168.168.22:8020",//参照hdfs-site.xml中dfs.namenode.rpc-address.hacluster.20进行配置,并将主机名替换为对应的IP
    "conf.dfs.client.failover.proxy.provider.hacluster":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
    "max_snapshot_bytes_per_sec":"500mb",      //每个节点的快照速率限制。默认为40mb每秒
    "max_restore_bytes_per_sec":"500mb"        //每个节点的恢复速率限制。默认为40mb每秒
    }
    }'

    返回结果为:

    {"acknowledged":true}
    • conf.dfs.namenode.rpc-address.hacluster.19和“conf.dfs.namenode.rpc-address.hacluster.20”参数名称中的19和20需要根据dfs.ha.namenodes.hacluster的实际值来配置。
    • 当HDFS集群为非安全模式时请删除参数"security.principal"和"hadoop.security.authentication"。
    • “--tlsv1.2”表示tlsv协议使用1.2版本,执行该curl命令时该参数可省略。如使用该参数时提示tlsv1.2不可用,则可能因为所使用的curl客户端不支持tlsv1.2版本。可通过curl --help命令查询对应的tlsv版本号,如tlsv1,参数应写为“--tlsv1”。

    快照存储仓库创建好后,可使用下面的命令来查询仓库信息:

    curl -XGET --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup?pretty"

  11. 创建快照。一个仓库可以包含相同集群的多个快照。一个快照在需要仓库内标记成一个唯一的名称。

    1. 创建快照,并开始备份数据。
      • 使用以下命令在“my_backup”的仓库中创建一个名为“snapshot_1”的快照指令,并备份指定索引的数据。

        curl -XPUT --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup/snapshot_1?wait_for_completion=true&pretty" -H 'Content-Type: application/json' -d' { "indices": "index_1,index_2" }'

        返回结果为:

        {
          "snapshot" : {
            "snapshot" : "snapshot_1",
            "uuid" : "_02NT1ZJTLCrSJ5uJwqOsA",
            "version_id" : 6070199,
            "version" : "7.10.2",
            "indices" : [
              "index_1",
              "index_2"
            ],
            "include_global_state" : true,
            "state" : "SUCCESS",
            "start_time" : "2020-03-10T07:32:21.458Z",
            "start_time_in_millis" : 1583825541458,
            "end_time" : "2020-03-10T07:32:25.283Z",
            "end_time_in_millis" : 1583825545283,
            "duration_in_millis" : 3825,
            "failures" : [ ],
            "shards" : {
              "total" : 20,
              "failed" : 0,
              "successful" : 20
            }
          }
        }

      “wait_for_completion”:标识此请求是否需要等待快照创建完成。默认立即返回,不等待快照创建结束。

      • 使用以下命令在“my_backup”的仓库中创建一个名为“snapshot_1”的快照指令,并备份所有打开索引的数据。

        curl -XPUT --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup/snapshot_1?wait_for_completion=true&pretty"

    2. 执行成功后,使用以下查询命令可以看到已经备份的数据。

      curl -XGET --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup/snapshot_1?pretty"

      使用以下命令可以看到所有备份的数据:

      curl -XGET --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup/_all?pretty"

  12. 在目的端集群Elasticsearch创建快照仓库。具体操作请参考10
  13. 在目的端集群Elasticsearch关闭已存在的待还原索引。

    例如,索引index_1在目的集群已存在并且是开启状态,需要先将索引index_1关闭。

    curl -XPOST --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/index_1/_close?pretty"

    返回结果为:

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "indices" : {
        "index_1" : {
          "closed" : true
        }
      }
    }

  14. 在目的端集群Elasticsearch还原快照即可还原已备份的索引。

    curl -XPOST --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup/snapshot_1/_restore"

    返回结果为:

    {
      "snapshot" : {
        "snapshot" : "snapshot_1",
        "indices" : [
          "index_1",
          "index_2"
        ],
        "shards" : {
          "total" : 20,
          "failed" : 0,
          "successful" : 20
        }
      }
    }

  15. 重复1114直到源端集群所有索引数据迁移到目的端集群。
  16. 目的端集群Elasticsearch是否为安全模式。

    • 是,执行17
    • 否,执行18

  17. 登录目的端集群Manager界面,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 更多”,查看是否“启用Ranger鉴权”。

  18. 完成Elasticsearch数据迁移后删除快照。

    curl -XDELETE --tlsv1.2 --negotiate -k -u : "https://10.131.112.121:24100/_snapshot/my_backup/snapshot_1?pretty"

    • 快照和还原机制只允许在同一个时间点运行一个快照和还原任务。
    • 当前正在运行的快照可以使用删除快照操作来终止,删除操作将停止该快照并从仓库中删除之前的快照数据。