由于公司的elasticsearch叢集隻是用了兩台伺服器。隻要一台伺服器資料丢失elasticsearch将丢失一半資料。是以資料的備份恢複就相當重要。elasticsearch 快照和恢複子產品可以建立單個索引或者整個叢集的快照到遠端的倉庫實作資料的備份及恢複。
下面以備份恢複.kibana索引為例
資料備份及恢複
1、修改elasticsearch配置檔案
vim elasticsearch.yml
添加 path.repo: ["/mnt/bak"]
#設定倉庫路徑
備注如果你有多台ealsticsearch伺服器作為叢集可以先關閉分片伺服器隻在master主節點伺服器上更改。或者在建立庫的之前設定建立共享檔案夾
2、建立倉庫
1
2
3
4
5
6
7
8
9
<code>curl -XPUT http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup</code> <code>-d '</code>
<code>{</code>
<code> </code><code>"type"</code><code>: </code><code>"fs"</code><code>,</code>
<code> </code><code>"settings"</code><code>: {</code>
<code> </code><code>"location"</code><code>: </code><code>"/mnt/bak"</code><code>,</code>
<code>"compress"</code><code>: </code><code>true</code>
<code> </code><code>}</code>
<code>}</code>
<code>'</code>
運作上面的指令後傳回結果{"acknowledged":true}
說明倉庫建立成功。
compress 是否壓縮
max_snapshot_bytes_per_sec 制作快照的速度預設20mb/s
max_restore_bytes_per_sec 快照恢複的速度預設20mb/s
檢視倉庫
<code>curl -GET http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot</code>
<code>{</code><code>"my_backup"</code><code>:{</code><code>"type"</code><code>:</code><code>"fs"</code><code>,</code><code>"settings"</code><code>:{</code><code>"compress"</code><code>:</code><code>"true"</code><code>,</code><code>"location"</code><code>:</code><code>"/mnt/bak"</code><code>}}}</code>
3、備份資料
<code>curl -XPUT http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup/snapshot_20161207</code>
執行上面的指令會快照ealsticsearch上所有的索引。
如果需要快照指定的索引
<code>curl -XPUT http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup/snapshot_20161207</code> <code>-d '</code>
<code> </code><code>"indices"</code><code>: </code><code>".kibana"</code>
如果成功傳回結果顯示{"accepted":true}
4、檢視備份
<code>curl -XGET http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup/snapshot_20161207</code>
此指令是檢視快照的情況傳回的資料會比較多
{"snapshots":[{"snapshot":"snapshot_20161207","version_id":2030599,"version":"2.3.5","indices":["es-index-
.........中間N行資料..........
{"total":71,"failed":0,"successful":37}}]}
也可以使用下面的指令檢視快照的狀态
<code>curl -XGET http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup/snapshot_20161207/_status</code>
<code>{</code><code>"snapshots"</code><code>:[{</code><code>"snapshot"</code><code>:</code><code>"snapshot_20161207"</code><code>,</code><code>"repository"</code><code>:</code><code>"my_backup"</code><code>,</code><code>"state"</code><code>:</code><code>"SUCCESS"</code><code>,</code><code>"shards_stats"</code><code>:{</code><code>"initializing"</code><code>:0,</code><code>"started"</code><code>:0,</code><code>"finalizing"</code><code>:0,</code><code>"done"</code><code>:1,</code><code>"failed"</code><code>:0,</code><code>"total"</code><code>:1},</code><code>"stats"</code><code>:{</code><code>"number_of_files"</code><code>:14,</code><code>"processed_files"</code><code>:14,</code><code>"total_size_in_bytes"</code><code>:143273,</code><code>"processed_size_in_bytes"</code><code>:143273,</code><code>"start_time_in_millis"</code><code>:1481060674078,</code><code>"time_in_millis"</code><code>:50},</code><code>"indices"</code><code>:{</code><code>".kibana"</code><code>:{</code><code>"shards_stats"</code><code>:{</code><code>"initializing"</code><code>:0,</code><code>"started"</code><code>:0,</code><code>"finalizing"</code><code>:0,</code><code>"done"</code><code>:1,</code><code>"failed"</code><code>:0,</code><code>"total"</code><code>:1},</code><code>"stats"</code><code>:{</code><code>"number_of_files"</code><code>:14,</code><code>"processed_files"</code><code>:14,</code><code>"total_size_in_bytes"</code><code>:143273,</code><code>"processed_size_in_bytes"</code><code>:143273,</code><code>"start_time_in_millis"</code><code>:1481060674078,</code><code>"time_in_millis"</code><code>:50},</code><code>"shards"</code><code>:{</code><code>"0"</code><code>:{</code><code>"stage"</code><code>:</code><code>"DONE"</code><code>,</code><code>"stats"</code><code>:{</code><code>"number_of_files"</code><code>:14,</code><code>"processed_files"</code><code>:14,</code><code>"total_size_in_bytes"</code><code>:143273,</code><code>"processed_size_in_bytes"</code><code>:143273,</code><code>"start_time_in_millis"</code><code>:1481060674078,</code><code>"time_in_millis"</code><code>:50}}}}}}]}</code>
5、取消備份
<code>curl -XDELETE http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup/snapshot_20161207</code>
6、恢複備份
<code>curl -XPOST http:</code><code>//192</code><code>.168.10.49:9200</code><code>/_snapshot/my_backup/snapshot_20160812/_restore</code>
如果你的是叢集而且在建立倉庫的時候沒有配置共享檔案夾那會報下面的錯誤
<code>{</code><code>"error"</code><code>:</code><code>"RepositoryException[[my_backup] failed to create repository]; nested: CreationException[Guice creation errors:\n\n1) Error injecting constructor, org.elasticsearch.repositories.RepositoryException: [my_backup] location [/mnt/bak] doesn't match any of the locations specified by path.repo because this setting is empty\n at org.elasticsearch.repositories.fs.FsRepository.<init>(Unknown Source)\n while locating org.elasticsearch.repositories.fs.FsRepository\n while locating org.elasticsearch.repositories.Repository\n\n1 error]; nested: RepositoryException[[my_backup] location [/mnt/bak] doesn't match any of the locations specified by path.repo because this setting is empty]; "</code><code>,</code><code>"status"</code><code>:500}</code>
解決方法關閉支點伺服器elasticsearch服務重新執行即可成功。
如果已經存在.kibana索引可以先關閉掉。
成功恢複資料後隻有主節點伺服器存在.kibana索引。我們希望所有的節點伺服器都存在此索引時執行下面的指令
<code>curl -XPUT </code><code>'http://192.168.10.49:9200/.kibanna/_settings'</code> <code>-d '</code>
<code> </code><code>"index"</code> <code>: {</code>
<code> </code><code>"number_of_replicas"</code> <code>: 1</code>
<code>}'</code>
<a href="http://s1.51cto.com/wyfs02/M02/8B/3F/wKiom1hHvBLRdaY3AAAapXtteRI780.png" target="_blank"></a>
本文轉自 irow10 51CTO部落格,原文連結:http://blog.51cto.com/irow10/1880365,如需轉載請自行聯系原作者