暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch数据的备份和恢复

Java Miraculous 2021-06-16
4035
ES7.1.0集群搭建以及分片和副本解析这篇文章中介绍了,ES的数据是存在分片中的,不同的索引可能存到不同的分片里,每个分片对应有一个以上的副本,副本你可以认为是对应分片中数据的拷贝,不同的分片中的数据肯定是不同的,假设现在线上集群中某个分片和它对应的副本所在的机器都挂掉了并且暂时不可恢复,那这个分片上所有的索引数据是不可用的,为了将损失降到最低,我们可以将索引备份,以备不时之需。
ES提供了一个叫快照的内置系统来快速备份和还原数据,ES快照允许在远程存储库中创建单个索引或者整个集群的快照,它具有以下特点:
  1. 快照的过程可以后台进行

  2. 快照时会将保存该索引的全部数据

  3. 同一仓库下的同一快照只能执行一次

  4. 本次快照会基于上次仓库之前的快照进行增量保存

  5. 快照保存的内容:索引数据、集群全局状态

  6. 同一时刻只允许一个快照执行

下面演示下ES快照的应用
前置条件:
  • Centos7系统

  • 两台机器组成的ES集群(我的ip:192.168.209.128、192.168.209.129)

  • 安装有kibana可视化工具

  • 一、安装sshfs

sshfs 这个工具可以把远程主机的文件系统映射到本地主机上,透过 SSH 把远程文件系统挂载到本机上,这样我们可以不必使用 scp 工具就可以做到直接复制及删除远程主机的文件了,就像操作本地磁盘一样方便。
  • 1.1、安装EPEL扩展源

运行
yum -y install epel-release
注:两台机器都要执行。

yum clean all
yum -y install fuse-sshfs

  • 1.2、测试

  • 挂载远程目录

运行在192.168.209.128
mkdir /data/es_backup
mkdir /mnt/backup(后续需要使用,先创建)
运行(在192.168.209.129上)
mkdir /mnt/backup
sshfs 192.168.209.128:/data/es_backup mnt/backup -o allow_other

注:提示输入密码,就是你机器的登录密码。

  • 查看挂载

运行
df -h

上面命令的意思是,将192.168.209.128机器上的/data/es_backup目录挂载到本机的/mnt/backup目录下,-o allow_other表示允许其他用户访问这个目录
  • 卸载远程目录

运行
umount mnt/backup
卸载后记得重新挂载上去,等会下面需要使用。

  • 二、利用sshfs对ES的索引进行备份和恢复

注:下面的步骤基于上面创建的文件夹进行,所以上面创建文件夹的动作必须执行

  • 2.1、修改ES的配置文件

运行
vi etc/elasticsearch/elasticsearch.yml
添加:path.repo: mnt/backup/
注:两台机器都要修改

  • 2.2、利用命令进行备份相关操作

  • 2.2.1、创建备份仓库

    PUT _snapshot/AyoBackup
    {
    "type": "fs",
    "settings": {
    "location": "/mnt/backup/compress_snapshot",
    "compress": true
    }
    }

    • 2.2.2、查看刚创建备份仓库

      GET _snapshot?pretty

      • 2.2.3、备份索引数据

      先看下现在集群中存在的索引:
        GET _cat/indices

        备份单个索引,比如备份mybooks这个索引:
          PUT _snapshot/AyoBackup/mybooks_202106
          {
          "indices": "mybooks"
          }

          查看备份状态:
            GET /_snapshot/AyoBackup/mybooks_202106?pretty

            备份多个索引,比如同时备份mybooks-join、.kibana_1:
              PUT /_snapshot/AyoBackup/snapshot_some_name 
              {
              "indices": "mybooks-join,.kibana_1"
              }

              注:备份全部索引是PUT /_snapshot/AyoBackup/snapshot_all,这里不再演示。

              • 2.2.4、恢复索引数据

              上面我们把ES集群中存在的3个索引都备份了,现在我们把它删掉,然后恢复下看看。
              删除集群中的索引:
                DELETE /mybooks-join
                DELETE /.kibana_1
                DELETE /mybooks

                删除完后再查看:
                  GET /_cat/indices

                  恢复单个索引:
                    POST /_snapshot/AyoBackup/mybooks_202106/_restore
                    {
                    "indices": "mybooks", "rename_replacement": "restored_mybooks_202106"
                    }

                    查看恢复状态:
                      GET /_snapshot/AyoBackup/mybooks_202106/_status

                      再查询下看是否已恢复:

                      恢复全部索引,还有两个没有恢复,这里直接执行恢复全部看看效果:
                        POST /_snapshot/AyoBackup/snapshot_some_name/_restore

                        再查询下看是否已恢复:

                        关于ES的数据备份就先说这么多,后续有线上案例的话我会及时更。
                        最后,618期间,武陟创臻少儿编程优惠幅度很大,武陟的朋友们,孩子有要学编程的,这是个好时机,详询荆老师!

                        全民618,奶粉活动多多,乐爱多奶粉活动更是火爆,价格降至冰点,错过一次,后悔一年,机会难得,识别小程序进入商城购买!

                        关注我,更多福利等着您!

                        文章转载自Java Miraculous,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论