ElasticSearch数据备份与恢复

来源:互联网 发布:oracle distinct 优化 编辑:程序博客网 时间:2024/06/14 22:30

ElasticSearch数据备份与恢复

最近线上业务ES日志量过于庞大, 达到500亿条(约30TB)记录,需要对旧的索引进行归档处理。
用scan和scroll的方式导出备份基本是不可能的了, 本文主要是记录(Ubuntu环境)通过sshfs共享文件系统来进行快照方式备份数据。
假设ES集群有三个节点:

192.168.1.10192.168.1.11192.168.1.12

1. 创建共享目录

  • 每个节点安装sshfs, 创建相同目录用于挂载共享目录
apt-get install fuse sshfsmkdir /mnt/backup
  • 选取其中一个节点的目录(非系统盘)作为共享目录, 设置其他节点免密码登录到该节点
    假设选择的节点ip为192.168.1.10:
# 192.168.1.10上创建目录mkdir /data/es_backup# 每个节点挂载同样操作挂载/mnt/backupsshfs 192.168.1.10:/data/es_backup /mnt/backup -o allow_other# 如果修改了默认ssh端口, 比如23566, 则可以这样:# sshfs 192.168.1.10:/data/es_backup /mnt/backup -p 23566 -o allow_other

其中的参数-o allow_other允许了其他用户访问这个目录。

  • 测试运行ES的用户对共享目录是否有写权限
sudo -u elasticsearch touch /mnt/backup/test

2. 修改ES配置

  • 在elasticsearch.yml中加入一行:
path.repo:  /mnt/backup/
  • 或者直接修改/etc/init.d/elasticsearch,

将原来的DAEMON_OPTS选项

DAEMON_OPTS="-d -p $PID_FILE --default.path.home=$ES_HOME --default.path.logs=$LOG_DIR --default.path.data=$DATA_DIR --default.path.conf=$CONF_DIR"

修改为:

REPO_DIR=/mnt/backupDAEMON_OPTS="-d -p $PID_FILE --default.path.home=$ES_HOME --default.path.logs=$LOG_DIR --default.path.data=$DATA_DIR --default.path.conf=$CONF_DIR --default.path.repo=$REPO_DIR"

具体可能遇到的问题可参考这里: https://discuss.elastic.co/t/path-repo-is-empty/25166/4
修改后重启es集群。

3. 创建备份仓库

curl -XPUT 'http://192.168.1.10:9200/_snapshot/EsBackup_zip' -d '{"type": "fs","settings": {    "location": "/mnt/backup/compress_snapshot",    "compress": true    }}'

成功后结果返回{"acknowledged":true}. 这时查看刚创建的仓库:

curl -XGET 'http://192.168.1.10:9200/_snapshot?pretty'

正常结果返回:

{  "EsBackup_zip" : {    "type" : "fs",    "settings" : {      "compress" : "true",      "location" : "/mnt/backup/compress_snapshot"    }  }}

4. 备份指定索引数据

假设要备份单个索引, 索引名为: user_behavior_201702

curl -XPUT 'http://192.168.1.10:9200/_snapshot/EsBackup_zip/snapshot_user_behavior_201702' -d '{"indices": "user_behavior_201702"}'

提交备份快照请求后, 查看备份状态:

curl -XGET 'http://192.168.1.12:9200/_snapshot/EsBackup_zip/snapshot_user_behavior_201702?pretty'

假设要备份多个索引, 比如idx_1, idx_2, idx_3, 则可以:

curl -XPUT 'http://192.168.1.10:9200/_snapshot/EsBackup_zip/snapshot_some_name' -d '{"indices": "idx_1,idx_2,idx_3"}'

假设要备份全部索引数据, 则可以:

curl -XPUT 'http://192.168.1.10:9200/_snapshot/EsBackup_zip/snapshot_all'

5. 恢复备份索引

删除已备份的索引:

curl -XDELETE "http://192.168.1.10:9200/user_behavior_201702"

恢复单个索引:

curl -XPOST 'http://192.168.1.10:9200/_snapshot/EsBackup_zip/snapshot_user_behavior_201702/_restore' -d '{    "indices": "user_behavior_201702",     "rename_replacement": "restored_ub_201702"}'

恢复整个快照索引:

curl -XPOST 'http://192.168.1.10:9200/_snapshot/EsBackup_zip/snapshot_some_name/_restore'

提交请求成功后返回{"accepted":true}
查看恢复状态:

curl -XGET "http://192.168.1.10:9200/_snapshot/EsBackup_zip/snapshot_user_behavior_201702/_status"
原创粉丝点击