# 1 安装插件:
elasticsearch-plugin install repository-hdfs
# 2 移除插件:
elasticsearch-plugin remove repository-hdfs
# 3 查看es集群nodes
curl -XGET 'http://es02:9200/_cat/nodes?pretty'
# 4 查看es集群健康状况
curl -XGET 'http://es02:9200/_cluster/health?pretty'
# 5 查看es集群索引
curl -XGET 'es02:9200/_cat/indices?v'
# 6 在hdfs上创建snapshot仓库
curl -XPUT 'http://es02:9200/_snapshot/my_hdfs_repo?pretty' -d '
{
"type": "hdfs",
"settings": {
"uri": "hdfs://es01:9000/",
"path": "hadoop/respositories/my_hdfs_repo"
}
}'
# 7 备份数据
curl -XPUT es02:9200/_snapshot/my_hdfs_repo/snapshot_2 -d'
{
"indices": "my_index",
"ignore_unavailable": true,
"include_global_state": false,
"partial": true
}'
返回{"accepted":true}
indices值中可以加逗号隔开多个索引,ignore_unavailable设置为true会忽略掉不可用的index,include_global_state阻止cluster的全局state也作为snapshot的一部分被备份,
默认情况下,如果某个索引的部分primary shard不可用,那么会导致备份过程失败,那么此时可以将partial设置为true。
# 8 查看指定的备份:
curl -XGET 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1?pretty'
返回
{
"snapshots" : [
{
"snapshot" : "snapshot_1",
"uuid" : "K2N0N24sR0SqfiYiY9gdKA",
"version_id" : 5050099,
"version" : "5.5.0",
"indices" : [
"my_index"
],
"state" : "SUCCESS",
"start_time" : "2018-05-27T03:54:52.866Z",
"start_time_in_millis" : 1527393292866,
"end_time" : "2018-05-27T03:54:55.044Z",
"end_time_in_millis" : 1527393295044,
"duration_in_millis" : 2178,
"failures" : [ ],
"shards" : {
"total" : 5,
"failed" : 0,
"successful" : 5
}
}
]
}
# 9 删除陈旧的备份快照:
curl -XDELETE 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1'
10、监控snapshotting的进度
使用wait_for_completion可以在前台等待备份完成,但是实际上也没什么必要,因为可能要备份的数据量特别大,难道还等待1个小时??
看着是不太现实的,所以一般还是在后台运行备份过程,然后使用另外一个监控api来查看备份的进度,
首先可以获取一个snapshot ID:GET _snapshot/my_backup/snapshot_3。如果这个snapshot还在备份过程中,
此时我们就可以看到一些信息,比如什么时候开始备份的,已经运行了多长时间,等等。然而,这个api用了跟snapshot一样的线程池去执行,
如果我们在备份非常大的shard,进度的更新可能会非常之慢。一个更好的选择是用_status API,GET _snapshot/my_backup/snapshot_3/_status,
这个api立即返回最详细的数据。这里我们可以看到总共有几个shard在备份,已经完成了几个,还剩下几个,包括每个索引的shard的备份进度:
curl -XGET 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1'
或者是因为不小心误操作发起了一次备份操作,这个时候就可以运行下面这条命令:DELETE _snapshot/my_backup/snapshot_1。
也就是立即删除这个snapshot,这个命令会去取消snapshot的过程,同时将备份了一半的仓库中的数据给删除掉。
curl -XDELETE 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1'
#hadoop namenode格式化
hdfs namenode -format
#hadoop查看文件
hadoop dfs -ls /
#hadoop离开安全模式
hadoop dfsadmin -safemode leave
#hadoop修改用户所属的租
hadoop fs -chgrp -R hadoop /
elasticsearch-plugin install repository-hdfs
# 2 移除插件:
elasticsearch-plugin remove repository-hdfs
# 3 查看es集群nodes
curl -XGET 'http://es02:9200/_cat/nodes?pretty'
# 4 查看es集群健康状况
curl -XGET 'http://es02:9200/_cluster/health?pretty'
# 5 查看es集群索引
curl -XGET 'es02:9200/_cat/indices?v'
# 6 在hdfs上创建snapshot仓库
curl -XPUT 'http://es02:9200/_snapshot/my_hdfs_repo?pretty' -d '
{
"type": "hdfs",
"settings": {
"uri": "hdfs://es01:9000/",
"path": "hadoop/respositories/my_hdfs_repo"
}
}'
# 7 备份数据
curl -XPUT es02:9200/_snapshot/my_hdfs_repo/snapshot_2 -d'
{
"indices": "my_index",
"ignore_unavailable": true,
"include_global_state": false,
"partial": true
}'
返回{"accepted":true}
indices值中可以加逗号隔开多个索引,ignore_unavailable设置为true会忽略掉不可用的index,include_global_state阻止cluster的全局state也作为snapshot的一部分被备份,
默认情况下,如果某个索引的部分primary shard不可用,那么会导致备份过程失败,那么此时可以将partial设置为true。
# 8 查看指定的备份:
curl -XGET 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1?pretty'
返回
{
"snapshots" : [
{
"snapshot" : "snapshot_1",
"uuid" : "K2N0N24sR0SqfiYiY9gdKA",
"version_id" : 5050099,
"version" : "5.5.0",
"indices" : [
"my_index"
],
"state" : "SUCCESS",
"start_time" : "2018-05-27T03:54:52.866Z",
"start_time_in_millis" : 1527393292866,
"end_time" : "2018-05-27T03:54:55.044Z",
"end_time_in_millis" : 1527393295044,
"duration_in_millis" : 2178,
"failures" : [ ],
"shards" : {
"total" : 5,
"failed" : 0,
"successful" : 5
}
}
]
}
# 9 删除陈旧的备份快照:
curl -XDELETE 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1'
10、监控snapshotting的进度
使用wait_for_completion可以在前台等待备份完成,但是实际上也没什么必要,因为可能要备份的数据量特别大,难道还等待1个小时??
看着是不太现实的,所以一般还是在后台运行备份过程,然后使用另外一个监控api来查看备份的进度,
首先可以获取一个snapshot ID:GET _snapshot/my_backup/snapshot_3。如果这个snapshot还在备份过程中,
此时我们就可以看到一些信息,比如什么时候开始备份的,已经运行了多长时间,等等。然而,这个api用了跟snapshot一样的线程池去执行,
如果我们在备份非常大的shard,进度的更新可能会非常之慢。一个更好的选择是用_status API,GET _snapshot/my_backup/snapshot_3/_status,
这个api立即返回最详细的数据。这里我们可以看到总共有几个shard在备份,已经完成了几个,还剩下几个,包括每个索引的shard的备份进度:
curl -XGET 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1'
11、取消snapshotting备份过程
如果我们想要取消一个正在执行的snapshotting备份过程,比如我们发现备份时间过于长,希望先取消然后在晚上再运行,或者是因为不小心误操作发起了一次备份操作,这个时候就可以运行下面这条命令:DELETE _snapshot/my_backup/snapshot_1。
也就是立即删除这个snapshot,这个命令会去取消snapshot的过程,同时将备份了一半的仓库中的数据给删除掉。
curl -XDELETE 'http://es02:9200/_snapshot/my_hdfs_repo/snapshot_1'
#hadoop namenode格式化
hdfs namenode -format
#hadoop查看文件
hadoop dfs -ls /
#hadoop离开安全模式
hadoop dfsadmin -safemode leave
#hadoop修改用户所属的租
hadoop fs -chgrp -R hadoop /