長(zhǎng)期運(yùn)維elasticsearch時(shí),你可能會(huì)遇到一個(gè)非常實(shí)用的需求:elasticsearch集群的存儲(chǔ)空間有限混移,而每天都有海量的日志數(shù)據(jù)流入集群中。但是舊數(shù)據(jù)往往使用頻率極低印荔,那么是不是可以定期將過(guò)期數(shù)據(jù)從集群中移除械哟,當(dāng)必須要使用的時(shí)候再移入。
一般使用Elasticsearch的公司都有hadoop集群怜森,那么我們可以這么做:把 Elasticsearch 索引數(shù)據(jù)轉(zhuǎn)移到 HDFS 上速挑,以解決 Elasticsearch 上的磁盤空間;而在我們需要的時(shí)候副硅,又可以從 HDFS 上把索引恢復(fù)回來(lái)繼續(xù)使用姥宝。
我們可以利用snapshot/restore兩個(gè)api做到這一點(diǎn)。注:如果想使用HDFS作為快照的存儲(chǔ)介質(zhì)恐疲,必須事先安裝repository-hdfs插件(官方還提供了S3,HDFS,Azure,GoogleCloudStorage對(duì)應(yīng)插件)
sudo bin/elasticsearch-plugin install repository-hdfs
創(chuàng)建repository
curl -XPUT 'localhost:9200/_snapshot/hdfs_repository' -d
'{
"type": "hdfs",
"settings": {
"uri": "hdfs://172.168.1.39:8020/",
"path": "elasticsearch/122_123_es-test"
}
}'
如果遇到問(wèn)題你可以看我的文章:[ElasticSearch填坑]創(chuàng)建hdfs repository: Permission Denied
創(chuàng)建snapshot
curl -XPUT 'localhost:9200/_snapshot/hdfs_repository/snapshot_1' -d
'{
"indices": "logs-181998",
"ignore_unavailable": true,
"include_global_state": false
}'
"ignore_unavailable": true
忽略有問(wèn)題的shard腊满,"include_global_state": false
快照里不放入集群global信息。
如果遇到問(wèn)題你可以看我的文章:[ElasticSearch填坑]創(chuàng)建Snapshot: SecurityException
還原restore
curl -XPUT 'localhost:9200/_snapshot/hdfs_repository/snapshot_1/_restore' -d
'{
"indices": "logs-181998",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "logs(.+)",
"rename_replacement": "restored_logs$1"
}'
rename_pattern
和rename_replacement
用于重命名index培己,因?yàn)闊o(wú)法將index還原到open的index碳蛋。
如果你想更深入的了解snapshot,可以看我的文章[Elasticsearch實(shí)戰(zhàn)]snapshot 探索