日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【最佳实践】Elasticsearch Snapshot 备份的使用方法

發布時間:2024/9/3 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【最佳实践】Elasticsearch Snapshot 备份的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:常見的數據庫都會提供備份的機制,以解決在數據庫無法使用的情況下,可以開啟新的實例,然后通過備份來恢復數據減少損失。

作者介紹

魏彬,普翔科技 CTO,開源軟件愛好者,中國第一位 Elastic 認證工程師,《Elastic日報》和 《ElasticTalk》社區項目發起人,被 elastic 中國公司授予 2019 年度合作伙伴架構師特別貢獻獎。對 Elasticsearch、Kibana、Beats、Logstash、Grafana 等開源軟件有豐富的實踐經驗,為零售、金融、保險、證券、科技等眾多行業的客戶提供過咨詢和培訓服務,幫助客戶在實際業務中找準開源軟件的定位,實現從 0 到 1 的落地、從 1 到 N 的拓展,產生實際的業務價值。


原文鏈接:https://developer.aliyun.com/article/767043?utm_content=g_1000151932


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

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

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

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

Elasticsearch 做備份有兩種方式,

1、將數據導出成文本文件,比如通過 elasticdump、esm 等工具將存儲在 Elasticsearch 中的數據導出到文件中。
2、以備份 elasticsearch data 目錄中文件的形式來做快照,也就是 Elasticsearch 中 snapshot 接口實現的功能。

第一種方式相對簡單,在數據量小的時候比較實用,當應對大數據量場景效率就大打折扣。

我們今天就著重講解下第二種備份的方式,即 snapshot api 的使用。備份要解決備份到哪里、如何備份、何時備份和如何恢復的問題,那么我們接下來一個個解決。

一、備份到哪里

在 Elasticsearch 中通過 repository 定義備份存儲類型和位置,存儲類型有共享文件系統、AWS 的 S3存儲、HDFS、微軟 Azure的存儲、Google Cloud 的存儲等,當然你也可以自己寫代碼實現國內阿里云的存儲。我們這里以最簡單的共享文件系統為例,你也可以在本地做實驗。

首先,你要在 elasticsearch.yml 的配置文件中注明可以用作備份路徑 path.repo ,如下所示:

path.repo: ["/mount/backups", "/mount/longterm_backups"]

配置好后,就可以使用 snapshot api 來創建一個 repository 了,如下我們創建一個名為 my_backup 的 repository。

PUT /_snapshot/my_backup {"type": "fs","settings": {"location": "/mount/backups/my_backup"} }

之后我們就可以在這個 repository 中來備份數據了。

二、如何備份

有了 repostiroy 后,我們就可以做備份了,也叫快照,也就是記錄當下數據的狀態。如下所示我們創建一個名為 snapshot_1 的快照。

PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

wait_for_completion 為 true 是指該 api 在備份執行完畢后再返回結果,否則默認是異步執行的,我們這里為了立刻看到效果,所以設置了該參數,線上執行時不用設置該參數,讓其在后臺異步執行即可。

執行成功后會返回如下結果,用于說明備份的情況:

{"snapshots": [{"snapshot": "snapshot_1","uuid": "52Lr4aFuQYGjMEv5ZFeFEg","version_id": 6030099,"version": "6.3.0","indices": [".monitoring-kibana-6-2018.05.30",".monitoring-es-6-2018.05.28",".watcher-history-7-2018.05.30",".monitoring-beats-6-2018.05.29","metricbeat-6.2.4-2018.05.28",".monitoring-alerts-6","metricbeat-6.2.4-2018.05.30"],"include_global_state": true,"state": "SUCCESS","start_time": "2018-05-31T12:45:57.492Z","start_time_in_millis": 1527770757492,"end_time": "2018-05-31T12:46:15.214Z","end_time_in_millis": 1527770775214,"duration_in_millis": 17722,"failures": [],"shards": {"total": 28,"failed": 0,"successful": 28}}] }

返回結果的參數意義都是比較直觀的,比如 indices 指明此次備份涉及到的索引名稱,由于我們沒有指定需要備份的索引,這里備份了所有索引;state 指明狀態;duration_in_millis 指明備份任務執行時長等。

我們可以通過 GET _snapshot/my_backup/snapshot_1獲取 snapshot_1 的執行狀態。

此時如果去 /mount/backups/my_backup 查看,會發現里面多了很多文件,這些文件其實都是基于 elasticsearch data 目錄中的文件生成的壓縮存儲的備份文件。大家可以通過 du -sh . 命令看一下該目錄的大小,方便后續做對比。

三、何時備份

通過上面的步驟我們成功創建了一個備份,但隨著數據的新增,我們需要對新增的數據也做備份,那么我們如何做呢?方法很簡單,只要再創建一個快照 snapshot_2 就可以了。

PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true

當執行完畢后,你會發現 /mount/backups/my_backup 體積變大了。這說明新數據備份進來了。要說明的一點是,當你在同一個 repository 中做多次 snapshot 時,elasticsearch 會檢查要備份的數據 segment 文件是否有變化,如果沒有變化則不處理,否則只會把發生變化的 segment file 備份下來。這其實就實現了增量備份。

Elasticsearch 的資深用戶應該了解 force merge 功能,即可以強行將一個索引的 segment file 合并成指定數目,這里要注意的是如果你主動調用 force merge api,那么 snapshot 功能的增量備份功能就失效了,因為 api 調用完畢后,數據目錄中的所有 segment file 都發生變化了。

另一個就是備份時機的問題,雖然 snapshot 不會占用太多的 cpu、磁盤和網絡資源,但還是建議大家盡量在閑時做備份。

四、如何恢復

所謂“養兵千日,用兵一時”,我們該演練下備份的成果,將其恢復出來。通過調用如下 api 即可快速實現恢復功能。

POST /_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true {"indices": "index_1","rename_replacement": "restored_index_1" }

通過上面的 api,我們可以將 index_1 索引恢復到 restored_index_1 中。這個恢復過程完全是基于文件的,因此效率會比較高。

雖然我們這里演示的是在同一個集群做備份與恢復,你也可以在另一個集群上連接該 repository 做恢復。我們這里就不做說明了。

五、其他

由于 Elasticsearch 版本更新比較快,因此大家在做備份與恢復的時候,要注意版本問題,同一個大版本之間的備份與恢復是沒有問題的,比如都是 5.1 和 5.6 之間可以互相備份恢復。但你不能把一個高版本的備份在低版本恢復,比如將 6.x 的備份在 5.x 中恢復。而低版本備份在高版本恢復有一定要求:

1、5.x 可以在 6.x 恢復
2、2.x 可以在 5.x 恢復
3、1.x 可以在 2.x 恢復

其他跨大版本的升級都是不可用的,比如1.x 的無法在 5.x 恢復。這里主要原因還是 Lucene 版本問題導致的,每一次 ES 的大版本升級都會伴隨 Lucene 的大版本,而 Lucene 的版本是盡量保證向前兼容,即新版可以讀舊版的文件,但版本跨越太多,無法實現兼容的情況也在所難免了。

六、繼續學習

本文只是簡單對 snapshot 功能做了一個演示,希望這足夠引起你的興趣。如果你想進一步深入的了解該功能,比如備份的時候如何指定部分索引、如何查詢備份和還原的進度、如何跨集群恢復數據、如何備份到 HDFS 等,
可以詳細閱讀官方手冊
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html

聲明:本文由原文《Elasticsearch snapshot 備份的使用方法》作者“魏彬”授權轉載,對未經許可擅自使用者,保留追究其法律責任的權利。


【阿里云Elastic Stack】100%兼容開源ES,獨有9大能力,提供免費X-pack服務(單節點價值$6000)

相關活動


更多折扣活動,請訪問阿里云 Elasticsearch 官網

阿里云 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費
阿里云 Logstash 2核4G首月免費


原文鏈接:https://developer.aliyun.com/article/767043?

版權聲明:本文中所有內容均屬于阿里云開發者社區所有,任何媒體、網站或個人未經阿里云開發者社區協議授權不得轉載、鏈接、轉貼或以其他方式復制發布/發表。申請授權請郵件developerteam@list.alibaba-inc.com,已獲得阿里云開發者社區協議授權的媒體、網站,在轉載使用時必須注明"稿件來源:阿里云開發者社區,原文作者姓名",違者本社區將依法追究責任。 如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至:developer2020@service.aliyun.com 進行舉報,并提供相關證據,一經查實,本社區將立刻刪除涉嫌侵權內容。

總結

以上是生活随笔為你收集整理的【最佳实践】Elasticsearch Snapshot 备份的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。