程序员新手指南数据分析师的日常程序员

es 数据备份到阿里云 oss 实践

2018-06-20  本文已影响15人  采菊东篱下

当前线上的ES集群都是搭建在阿里云的ECS上,考虑到OSS的价格相对扩展云盘较低,所以就把不常用的数据放到oss上备份起来。

配置安装 oss

首先将阿里云oss作为一个共享文件系统挂载到每个节点。这里假设已经在oss上开好了一个bucket,名字 es-snapshot-bigdata。

# 下载ossfs工具
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32196/cn_zh/1527232195135/ossfs_1.80.5_centos7.0_x86_64.rpm

# 本地安装
yum localinstall ossfs_1.80.5_centos7.0_x86_64.rpm -y

# 配置访问密码,access-key-id和secret去管理控制台查找或者生成
echo es-snapshot-bigdata:your-access-key-id:your-access-key-secret > /etc/passwd-ossfs

chmod 640 /etc/passwd-ossfs

# 挂载共享目录
mkdir /mnt/backups

ossfs es-snapshot-bigdata /mnt/backups -ourl=oss-cn-hangzhou-internal.aliyuncs.com -ouid=996 -ogid=994 -o allow_other

上面最关键的是最后一个命令,其中ouid和ogid通过id elasticsearch来获取,这里elasticsearch是es集群运行的用户名,不同节点这两个值可能不一样,要确认好。一定要添加allow_other选项,否则后续无法顺利备份。

将上述命令保存到一个sh文件中,chmod +x 加上执行权限后,在ES的所有节点上执行一遍。再强调一下,执行之前要讲uid和gid修改为当前节点的值。

配置es集群

如果之前没有配置es的快照功能,那么必须要修改ES的配置文件,重启整个ES集群,想不重启备份数据,不存在的。

修改 /etc/elasticsearch/elasticsearch.yml 文件,添加配置:

path.repo: ["/mnt/backups”]

重启整个es集群。如果数据量很大,那么建议滚动重启,这样安全性和稳定性可以能够保障,而且新的数据可以继续写入。

image

重启集群前先使用cerebro 把cluster.routing.allocation.enable设置为none,或者基于kibana的dev tools也行。等所有的节点都滚动重启完成,状态变绿之后再设置为all。

重启完成后,使用kibana的dev控制台创建一个es快照仓库。

PUT _snapshot/my_backup
{
    "type": "fs",
    "settings": {
        "location": "my_backup",
        "compress": true
    }
}

现在就可以讲一些数据备份到my_backup下面了。

备份数据

在kibana控制台通过http的方式备份和删除数据就可以了。之前es中的index都是按照天来生成的,由于数据太大,这里每次备份一个月。

# 备份2016年12月份的数据
PUT _snapshot/my_backup/snapshot_your_index_prefix_2016_12
{
    "indices": "your_index_prefix-2016.12.*"
}

# 获取备份的状态,如果成功会返回success
GET /_snapshot/my_backup/your_index_prefix_2016_12/_status

# 删除已经备份成功的数据
DELETE /your_index_prefix-2016.12.*

总结

断断续续备份了一年的数据,期间还是非常稳定的。整个过程中最开始在ossfs挂载时由于共享文件系统的权限问题捣鼓了半天,后来调通之后就一路顺利了。

这里没有用阿里云提供的es插件,是想着一切过程都可控。

参考

https://help.aliyun.com/document_detail/32196.html

https://github.com/aliyun/ossfs/wiki/FAQ

http://dig404.com/

上一篇下一篇

猜你喜欢

热点阅读