zoukankan      html  css  js  c++  java
  • Docker Elasticsearch数据备份与恢复

    前言:

    无论使用哪种存储软件,定期的备份数据都是重中之重,在使用ElasticSearch的时候,随着数据日益积累,存放es数据的磁盘空间也捉襟见肘,

    此时对于业务功能使用不到的索引数据,又不能直接删除,将它迁移到线下数据盘存储就变得十分必要。

    下面就记录一下在docker中部署的单节点以月份索引的es数据的备份和迁移过程。

    一:docker安装ES

    1:docker的安装:Docker-常用基建的安装与部署

    2:下载es镜像:

    docker pull elasticsearch:5.6.8

    3:elasticsearch.yml 配置:

    http.host: 0.0.0.0
    
    # Uncomment the following lines for a production cluster deployment
    #transport.host: 0.0.0.0
    #discovery.zen.minimum_master_nodes: 1
    cluster.name: "elasticsearch"
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    path.repo: ["/usr/share/elasticsearch/backup"]

    4:创建es容器

    docker run -d --name es -p 9200:9200 -p 9300:9300
      --net docker_default --ip 172.18.0.40
      --memory-swappiness=0
      -v /root/data/docker/es/data:/usr/share/elasticsearch/data
      -v /root/data/docker/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      -v /root/data/docker/es/logs:/user/share/elasticsearch/logs
      -v /root/data/docker/es/backup:/usr/share/elasticsearch/backup
      -e "discovery.type=single-node"
      --restart=always elasticsearch:5.6.8

    上面三步简单的创建完一个可用的es容器,接下来就用它来测试es的快照功能。

    二:快照索引

    snapshot API 是ES备份、迁移数据的重要手段。它支持增量备份,支持多种类型的仓库存储。

    ES的备份过程是"智能"的。你对一个索引的第一个快照会是这个索引的完整拷贝,但是所有后续的快照会保留的是已存快照和新数据之间的差异。

    随着你不时的对相同索引进行快照,备份也在增量的添加和删除。这意味着后续备份会相当快速,因为它们只传输很小的数据量。

    备份路径通过配置: path.repo: ["/usr/share/elasticsearch/backup"] ,注意该路径是es容器内部的,

    所以我们在创建es容器时,可以通过 -v /宿主机目录:/容器目录,将宿主机目录挂载到容器内部。

    1:创建一个备份仓库:my_backup

    curl -XPUT 127.0.0.1:9200/_snapshot/my_backup -d '{
    "type": "fs",
    "settings": {
    "location": "/usr/share/elasticsearch/backup/my_backup",
         "max_snapshot_bytes_per_sec" : "200mb",
         "max_restore_bytes_per_sec" : "200mb"
      }
    }'

    共享文件系统支持的配置如下图:

    如果报错:[my_backup] failed to create repository, 执行:chmod 777 /root/data/docker/es/backup

    2:开始备份指定索引(close状态的索引不可以执行快照),以 nova-202102 为例:

    curl -XPUT 127.0.0.1:9200/_snapshot/my_backup/nova-202102?wait_for_completion=true -d '{  
            "indices": "nova-202102"
    }'

    如果索引文件较大,可以去掉wait_for_completion=true,该命令会后台执行备份。

    如果备份是后台执行的,下面命令可以查询备份的状态 
    curl -XGET 127.0.0.1:9200/_snapshot/my_backup/nova-202102/_status

    状态值有:
    INITIALIZING 分片在检查集群状态看看自己是否可以被快照。这个一般是非常快的。
    STARTED 数据正在被传输到仓库。
    FINALIZING 数据传输完成;分片现在在发送快照元数据。
    DONE 快照完成!
    FAILED 快照处理的时候碰到了错误,这个分片/索引/快照不可能完成了。检查你的日志获取更多信息。

    # 取消正在备份的索引
    curl -XDELETE 127.0.0.1:9200/_snapshot/my_backup/nova-202102
    3:查询已经备份完成的索引
    curl -XGET 127.0.0.1:9200/_snapshot/my_backup/nova-202102

    三:快照恢复

    要恢复一个快照,该索引必须是关闭状态或者已经被删除。

    curl -XPOST 127.0.0.1:9200/_snapshot/my_backup/nova-202102/_restore

    监控快照恢复状态

    curl -XGET 127.0.0.1:9200/restored_nova-202102/_recovery

    恢复过程是基于ES标准恢复机制的,因此标准的恢复监控服务可以用来监视恢复的状态。

    当执行集群恢复操作时通常会进入Red状态,这是因为恢复操作是从索引的主分片开始的,在此期间主分片状态变为不可用,因此集群状态表现为Red。

    一旦ES主分片恢复完成,整个集群的状态将被转换成Yellow,并且开始创建所需数量的副分片。一旦创建了所有必需的副分片,集群转换到Green状态。

    四:参考文献

    1:Elasticsearch: 权威指南

    2:Elasticsearch源码解析与优化实战



    ==================================================================

    勇气是,尽管你感到害怕,但仍能迎难而上。
    尽管你感觉痛苦,但仍能直接面对。
    向前一步,也许一切都会不同。

    ==================================================================

  • 相关阅读:
    Visual Studio中View页面与Js页面用快捷键互相跳转
    使用NLog记录业务日志到数据库
    Js笛卡尔乘积
    多线程更新一个表里面的不同行也可能会死锁
    当请求参数与网站编码不一致时乱码解决方法
    WIN7下vs2010滑轮滚动不正确的解决方法
    VS 2017 代码报错编译正常
    C#表达式树
    .net core 学习 读取配置文件
    .net core 上传文件Demo
  • 原文地址:https://www.cnblogs.com/yxy-ngu/p/15131672.html
Copyright © 2011-2022 走看看