前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 快照存储库实现数据灾备在线恢复

Elasticsearch 快照存储库实现数据灾备在线恢复

作者头像
Kevin song
发布2020-12-08 11:05:09
2K0
发布2020-12-08 11:05:09
举报
文章被收录于专栏:运维监控日志分析

Elasticsearch 提供了 replica 解决方案,它可以帮我们解决了如果有一个或多个 node 失败了,那么我们的数据还是可以保证完整的情况,并且搜索还可以继续进行。但是,有一种情况是我们的所有的 node,或者有一部分 node 失败,可能会造成我们的数据的丢失。也就是说 replca 不能提供一种灾难性的保护机制。我们需要一种完整的备份机制。

Snapshot 及 Restore

在 Elastic 里,提供了一个叫做 snapshot 及 restore API 的接口。可以使用数据和状态快照备份您的 Elasticsearch 索引和集群。快照很重要,因为快照会在出现问题时提供数据的副本。如果需要回滚到旧版本的数据,则可以从存储库中还原快照。快照中的数据是增量进行了,即当前快照里面某个index的数据不在比它早的快照数据中,因此可以多次进行快照操作,而不用担心占用过多存储空间。

Restore 到一个新的 cluster

ELK集群间数据迁移,我们可以恢复从另外一个 cluster 中备份的 snapshot 到当前的 cluster 中来。我们必须在新的 cluster 中注册这个 repository 才可以进行下面的操作。

快照的流程

客户端请求->协调节点->主节点->[数据节点1,数据节点2…数据节点n],快照涉及3类型节点;

协调节点:接收客户端请求,转发到主节点。

主节点:将创建快照相关的请求信息放到集群状态中广播下去,数据节点收到后执行数据复制;主节点同时负责在仓库中写入集群状态数据。

数据节点:由于数据发布在各个节点,因此复制操作必须由数据节点执行,每个数据节点将快照请求中本地存储的主分片复制到仓库。

Repository (存储库)

支持存储库类型

Respository

配置类型

Shared file system

"type": "fs"

Read-only URL

"type": "url"

S3

"type": "s3"

HDFS

"type": "hdfs"

Azure

"type": "azure"

Google Cloud Storage

"type": "gcs"

存储库插件

repository-s3支持s3存储库

在Hadoop环境中支持hdfs存储库

存储库azure for azure存储库

存储库gcs for Google云存储库

集群主机

hostname

ip

elk-node1

192.168.10.235

es 7.5

elk-node2

192.168.10.236

es 7.5

nfs-server

192.168.250.252

NFS 服务器

在集群环境中,每台主机相同用户账号,但是分配的uid/gid是不同的。当多主机后端的存储为同一个共享存储,这时就会遇到一个问题,NFS协议是通过uid来控制文件读写权限的,主机中用户写入的文件uid与其他主机不同,就无法被其他主机读取或修改,出现权限错误的问题。NFS Server 服务器 elasticsearch 用户的uid和gid 和ELK 集群服务器的elasticsearch 用户的uid和gid保持一致。

创建用户

代码语言:javascript
复制
useradd  -u 997 -s /sbin/nologin  -M elasticsearch

-u : 指定用户uid

-M: --no-create-home 不创建用户home目录

-s : --shell 指定用户的shell

修改用户id和组id

代码语言:javascript
复制
usermod  -u 997 elasticsearch
groupmod -g  995 elasticsearch

或通过配置文件修改用户id和组id

代码语言:javascript
复制
[root@nfs-server /]# cat /etc/passwd |grep elasticsearch
elasticsearch:x:997:995:elasticsearch user:/nonexistent:/sbin/nologin
[root@nfs-server /]# cat /etc/group |grep elasticsearch
elasticsearch:x:995

创建 nfs 共享目录

代码语言:javascript
复制
mkdir /data/nfschown -R elasticsearch:elasticsearch /mnt/public

编辑 nfs 配置文件

代码语言:javascript
复制
[root@nfs-server /]# vim /etc/exports/mnt/public 192.168.10.0/255.255.255.0(rw,sync,all_squash,anonuid=997,anongid=995)

查看当前配置为nfs共享的目录及其状态

代码语言:javascript
复制
[root@nfs-server /]# exportfs  -rv
exporting 192.168.10.0/255.255.255.0:/mnt/public

Elasticsearch 配置

修改es 集群配置文件,添加存储库文件路径

代码语言:javascript
复制
[root@elk-node1 /]# cat  /etc/elasticsearch/elasticsearch.yml |grep  path.repo
path.repo: /repository
[root@elk-node2 ~]#  cat  /etc/elasticsearch/elasticsearch.yml |grep  path.repo
path.repo: /repository

修改存储库目录属性

代码语言:javascript
复制
chown -R elasticsearch:elasticsearch  /repository

elk-node1和elk-node2 挂载nfs 目录

代码语言:javascript
复制
mount -t nfs 192.168.250.252:/mnt/public /repositor

开机挂载NFS目录

代码语言:javascript
复制
#编辑fstab文件
cat  /etc/fstab  |grep  nfs
192.168.250.252:/mnt/public   /repository  nfs4     defaults        0 0
#验证fstab是否写正确
mount -a

创建共享文件系统存储库

存储库名称为repository ,路径为 /repository

代码语言:javascript
复制
curl -XPUT -uelastic:TcqinZLhbJDFFgCqXF8r  http://192.168.10.235:9200/_snapshot/repository -H "Content-Type: application/json"  -d '
> {
>           "type": "fs",
>           "settings": {
>               "location": "/repository",   
>               "max_restore_bytes_per_sec":"10mb",       
>               "compress":"true",                     
>               "max_snapshot_bytes_per_sec":"10mb",        
>               "chunk_size":"100mb"                         
>           }
>       }'

参数介绍

{

"type": "fs",

"settings": {

"location": "/repository", #存储库位置,要和配置文件里一致用户组是es

"max_restore_bytes_per_sec":"10mb", #恢复最大速率

"compress":"true", #是否压缩

"max_snapshot_bytes_per_sec":"10mb", #创建最大速率

"chunk_size":"100mb" #压缩块大小

}

验证存储库

curl -XGET -uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/

备份索引

1,备份指定索引

存储库为repository ,快照名称为networklogs-11

curl-XPUT-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/networklogs-11?wait_for_completion=true -H "Content-Type: application/json" -d '

{

"indices": "networklogs-2020.11.*"

}'

2,备份全部索引

存储库为repository ,快照名称为123

curl-XPUT-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/123?wait_for_completion=true -H "Content-Type: application/json"

验证备份快照

存储库为repository ,快照名称为123

curl-XGET-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/123

数据恢复到集群中

1、恢复单条索引

curl-XPOST-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/123/_restore -H "Content-Type: application/json" -d ' { "networklogs-*" }'

2、恢复全部索引

curl-XPOST-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/123/_restore -H "Content-Type: application/json"

3、恢复全部索引重命名索引

curl-XPOST-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/test-oxozjloutnawtrcaxggbbw/_restore -H "Content-Type: application/json" -d '{ "ignore_unavailable": "true", "include_global_state": false, "include_aliases": false, "partial": "false", "rename_pattern": "networklogs", "rename_replacement": "345"}'

4、恢复指定索引指定参数

curl-XPOST-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/123/_restore -H "Content-Type: application/json" -d '{ "indices": "networklogs-2020.11.24,networklogs-2020.11.25", "index_settings": { "index.number_of_replicas": 1 }, "ignore_unavailable": "true", "include_global_state": false, "include_aliases": false, "partial": "false", "rename_pattern": "networklogs", "rename_replacement": "678"}'

删除快照

curl-XDELETE-uelastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_snapshot/repository/networklogs-11

查看集群索引

curl -u elastic:TcqinZLhbJDFFgCqXF8r http://192.168.10.235:9200/_cat/indices | sort

命令行API操作繁琐,下面介绍如何使用Kibana Web 界面 实现快照存储库的相关操作

注册存储库

编辑存储库

验证存储库

创建策略

查看策略

查看快照

快照恢复

快照恢复参数

执行还原

查看还原操作

创建快照恢复索引名称

查看快照恢复数据

官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/snapshot-restore.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档