当前线上的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
网友评论