ElasticSearch数据备份与恢复

ElasticSearch数据备份与恢复

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

192.168.1.10
192.168.1.11
192.168.1.12

1. 创建共享目录

  • 每个节点安装sshfs, 创建相同目录用于挂载共享目录
apt-get install fuse sshfs
mkdir /mnt/backup
  • 选取其中一个节点的目录(非系统盘)作为共享目录, 设置其他节点免密码登录到该节点
    假设选择的节点ip为192.168.1.10:
# 192.168.1.10上创建目录
mkdir /data/es_backup
# 每个节点挂载同样操作挂载/mnt/backup
sshfs 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/backup
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 --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"
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值