Elasticsearch的數據備份和恢復以及遷移

 目錄

1. 爲什麼備份?

2. 數據備份

3. 數據恢復

4. ES備份數據遷移目標服務器

5. 腳本備份恢復


1. 爲什麼備份?

常見的數據庫都會提供備份機制,以解決在數據庫無法使用的情況下通過備份來恢復數據減少損失。 Elasticsearch 雖然有良好的容災性,但以下原因,其依然需要備份機制:

1) 數據災備:在整個集羣無法正常工作時,可以及時從備份中恢復數據。

2) 歸檔數據:隨着數據的積累,比如日誌類的數據,集羣的存儲壓力會越來越大,不管是內存還是磁盤都要承擔數據增多帶來的壓力,此時我們往往會選擇只保留最近一段時間的數據,比如將1個月之前的數據刪除。如果不想刪除這些數據,以備後續有查看需求,那麼就可以將這些數據以備份的形式歸檔。

3) 遷移數據:當你需要將數據從一個集羣遷移到另一個集羣時,也可以用備份的方式來實現。

Elasticsearch備份兩種方式:

1) 將數據導出成文本文件,比如通過 elasticdumpesm 等工具將存儲在 Elasticsearch 中的數據導出到文件中。

2) 備份 elasticsearch data 目錄中文件的形式來做快照,藉助 Elasticsearch 中 snapshot 接口實現的功能。

第一種方式相對簡單,在數據量小的時候比較實用,當應對大數據量場景效率就顯得乏力。這裏本文着重講解下第二種備份方式,即 snapshot api 的使用。其次,備份集羣的唯一可靠方法是使用快照和還原功能。

版本兼容性:

1) 5.x中創建的索引快照可以還原爲6.x

2) 2.x中創建的索引快照可以還原爲5.x

3) 1.x中創建的索引快照可以還原爲2.x

2. 數據備份

1) 設置備份目錄

修改elasticsearch.yml

配置文件elasticsearch.yml中添加  path.repo: ["/home/gocode/app/backup/elk"],重啓ES。

創建ES數據備份的數據目錄

# mkdir -p /home/gocode/app/backup/elk

# chmod 755 /home/gocode/app/backup/elk

# chown es:es /home/gocode/app/backup/elk  //給es用戶目錄權限

2) 創建倉庫(creating the repository)

備份數據之前,要創建一個倉庫來保存數據,倉庫的類型支持Shared filesystem, Amazon S3, HDFS、Azure Cloud選擇。

創建了一個備份倉庫名爲datasvr 存儲目錄爲/home/gocode/app/backup/elk 的備份倉庫。

curl -H "Content-Type: application/json" -XPUT 'http://127.0.0.1:9200/_snapshot/datasvr' -d '
{
	"type": "fs",
	"settings": {
		"location": "/home/gocode/app/backup/elk",
		"compress": true
	}
}'

3) 創建快照(備份索引)

一個倉庫可以擁有同一個集羣的多個快照。在一個集羣中快照擁有一個唯一名字作爲標識。在倉庫 datasvr 中創建名字爲 snapshot_1 的快照。

#curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr/snapshot_1'

備份名稱爲snapshot_1 (自行定義備份名稱)

如果只想備份部分索引的話,可以加上indices 參數:

curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr/snapshot_1' -d '
{
	"indices": "index_1,index_2"
}'

執行完後,查看備份數據目錄下,已經備份在備份目錄下

4) 查看倉庫信息

瀏覽器中查看備份倉庫信息

http://172.20.32.241:9200/_snapshot/datasvr/

5) 查看倉庫存儲的所有快照

瀏覽器中查看備份倉庫某個快照信息

http://172.20.32.241:9200/_snapshot/datasvr/snapshot_1

瀏覽器中查看備份倉庫所有快照信息

http://172.20.32.241:9200/_snapshot/datasvr/_all

6) 刪除快照

# curl -X DELETE "localhost:9200/_snapshot/datasvr/snapshot_1"

7) 刪除倉庫

倉庫被註銷時,ElasticSearch 只刪除倉庫存儲快照的引用位置,快照本身沒有被刪除並且在原來的位置

# curl -X DELETE "localhost:9200/_snapshot/datasvr"

 

集羣備份恢復:

注意: 以上是單機的備份方法,集羣的備份恢復方法和單機模式一樣,只不過需要增加一個集羣共享目錄用來存放備份數據,使所有節點可訪問。

1) 配置集羣共享目錄

# yum install sshfs

2) 創建集羣共享目錄,並將各節點備份目錄掛載到共享目錄

 創建集羣共享目錄
        # mkdir -p /home/backup/elk_share

共享目錄掛載

# sshfs [email protected]:/home/backup/elk_share /home/backup/elk  -o allow_other

3) 數據備份恢復與單機備份恢復一樣,參考單機備份恢復

3. 數據恢復

# curl -H "Content-Type:application/json" -XPOST '127.0.0.1:9200/_snapshot/datasvr/snapshot_1/_restore'

用過head插件查看,數據已經恢復:

 

4. ES備份數據遷移目標服務器

1) 源數據備份

參考以上第二步

2) 源數據備份目錄拷貝目標ES備份目錄下

注意:這裏爲了方便,源備份目錄和目標備份目錄一致。

3) 目標ES機器創建源ES同名倉庫

4) 目標ES查看快照

5) 目標ES執行恢復操作

5. 腳本備份恢復

將用到的api封裝成shell腳本進行備份恢復操作較爲方便,後續有時間在補充。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章