背景 :
docker版的ES7集群 (集群搭建 见文章 ELK合集持续更新(十五):ELK所有部署与集成)
已安装Kibana
ES数据备份到HDFS文件系统 (默认 已有现成的HDFS可用)
再从HDFS恢复数据到任一ES7集群 (当前的集群 和跨集群 分别演示)
snapshot 可以将ES集群的状态和数据 存储到一个外部文件系统(例如 HDFS)
首次备份是全量备份 之后增量备份
方式一 (慢 不用)
ES命令安装远程插件
$ ./bin/elasticsearch-plugin install repository-hdfs
重启集群
方式二
下载插件包 版本和ES一致
# 浏览器访问
https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-7.2.0.zip
上传到Linux服务器
cp到docker中/usr/share/elasticsearch/bin/下
docker命令安装本地插件包
$ cd /usr/share/elasticsearch
$ .bin/elasticsearch-plugin install file:///usr/share/elasticsearch/bin/repository-hdfs-7.2.0.zip
重启ES容器
# 操作每个节点
$ docker restart 容器ID
查看插件列表
# 浏览器访问
http://10.255.175.240:9200/_cat/plugins?v
ES数据的备份需要 存储在一个地方 这里存储在了HDFS文件系统上 ES自动将备份数据放在HDFS中的自定义目录(指定目录就是备份仓库了) 需要先创建这个目录 并给es用户附权限使可操作这个目录
在HDFS中创建目录并附权限
# 进入HDFS主机终端
# 切换到hdfs用户
$ su hdfs
# 创建目录
$ hdfs dfs -mkdir /es7_repository
# 给/es7_repository目录附es用户权限 (docker中默认es用户和组是elasticsearch)
$ hdfs dfs -chown -R elasticsearch:elasticsearch /es7_repository
kibana中 -> 点击[管理工具按钮] -> 点击[Snapshot Repositories] -> 点击[Register a repository]
填写仓库信息
验证存储库 (确保该存储库在集群的所有节点上都可正常运行)
POST /_snapshot/es7_repository/_verify
就是 给索引备份
方式一 快照所有索引
PUT /_snapshot/仓库名/自定义快照名
# kibana操作
PUT /_snapshot/es7_repository/snapshot_1
方式二 快照指定索引
PUT /_snapshot/仓库名/自定义快照名
{
“indices”: “索引名1,索引名2”,
“ignore_unavailable”: true, # 忽略不存在的索引
“include_global_state”: false # 不备份集群状态 只备份数据
}
# kibana操作
PUT /_snapshot/es7_repository/snapshot_1
{
"indices": "kibana_sample_data_logs",
"ignore_unavailable": true,
"include_global_state": false
}
监控指定快照/恢复运行状态
GET /_snapshot/仓库名/快照名
GET /snapshot/仓库名/快照名*,快照名2
GET /_snapshot/es7_repository/snapshot_1
或
监控指定快照/恢复详细运行状态
GET /_snapshot/仓库名/快照名/_status
GET /_snapshot/仓库名/快照名1,快照名2/_status
GET /_snapshot/es7_repository/snapshot_1/_status
快照(就是备份)存在HDFS中 也就是从HDFS中恢复数据到ES集群
确保目标索引是close的
如果目标索引不存在 则自动新建索引 直接恢复数据
如果目标索引已存在 需关闭索引
POST /rename_kibana_sample_data_logs/_close?wait_for_active_shards=1
方式一 恢复索引
POST _snapshot/仓库名/快照名/_restore
POST _snapshot/es7_repository/snapshot_1/_restore
方式二 恢复索引并重命名
POST /_snapshot/仓库名/快照名/_restore
{
“indices”: “index1name”,
“ignore_unavailable”: true, # 忽略不存在的索引
“include_global_state”: true, # 不恢复集群状态 只恢复数据
“rename_pattern”: “index1name”, # 匹配原索引名
“rename_replacement”: “rename_index1name” # 新索引名
}
POST /_snapshot/es7_repository/snapshot_1/_restore
{
"indices": "kibana_sample_data_logs",
"ignore_unavailable": true,
"include_global_state": true,
"rename_pattern": "kibana_sample_data_logs",
"rename_replacement": "rename_kibana_sample_data_logs"
}
查看恢复数据进度
GET 索引名/_recovery
GET kibana_sample_data_logs/_recovery
查看备份效果
停止并删除快照
DELETE /_snapshot/仓库名/快照名
DELETE /_snapshot/es7_repository/snapshot_1
查询所有快照信息
GET /_snapshot/仓库名/_all
GET /_snapshot/es7_repository/_all
查询当前运行的快照
GET /_snapshot/仓库名/_current
GET /_snapshot/es7_repository/_current
查询当前运行的快照状态
GET /_snapshot/es7_repository/_status
GET /_snapshot/es7_repository/_status
删除仓库
DELETE /_snapshot/仓库名
DELETE /_snapshot/es7_repository
删除仓库目录
# 删除
$ hdfs dfs -rm -r /es7_repository
# 查看确认
$ hdfs dfs -ls /
背景 : ES5 单点服务
0.修改plugin-security.policy文件
# 进入插件安装目录
$ cd /opt/elasticsearch-5.3.3/plugins/repository-hdfs
$ vi plugin-security.policy
添加如下
grant {
// Hadoop UserGroupInformation, HdfsConstants, PipelineAck clinit
permission java.lang.RuntimePermission "getClassLoader";
// UserGroupInformation (UGI) Metrics clinit
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
// org.apache.hadoop.util.StringUtils clinit
permission java.util.PropertyPermission "*", "read,write";
// org.apache.hadoop.util.ShutdownHookManager clinit
permission java.lang.RuntimePermission "shutdownHooks";
// JAAS is used always, we use a fake subject, hurts nobody
permission javax.security.auth.AuthPermission "getSubject";
permission javax.security.auth.AuthPermission "doAs";
permission javax.security.auth.AuthPermission "modifyPrivateCredentials";
##### ------ 以下为我添加的配置 -------------------
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "shutdownHooks";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission javax.security.auth.AuthPermission "doAs";
permission javax.security.auth.AuthPermission "getSubject";
permission javax.security.auth.AuthPermission "modifyPrivateCredentials";
permission java.security.AllPermission;
permission java.util.PropertyPermission "*", "read,write";
permission javax.security.auth.PrivateCredentialPermission "org.apache.hadoop.security.Credentials * \"*\"", "read";
};
1.修改ES的JVM配置
# 进入ES配置目录
$ cd /opt/elasticsearch-5.3.3/config
$ vi jvm.options
最后一行添加
-Djava.security.policy=/opt/elasticsearch-5.3.3/plugins/repository-hdfs/plugin-security.policy
2.重启ES服务
3.可以正常创建快照了