天天看點

ElasticSearch資料備份與恢複

ES備份快照的時候可以用<code>NFS</code>或者<code>HDFS</code>。<code>NFS</code>有點麻煩,我們使用<code>HDFS</code>。

<code>bin/elasticsearch-plugin install repository-hdfs</code>

注意下載下傳後會提示是否安裝,一定要輸入 <code>y</code>,否則視為取消安裝。 安裝完之後要重新開機ES叢集.

注意源叢集的IP和hdfs的IP不要寫錯了

這裡<code>conf.dfs.client.read.shortcircuit</code>如果設定為true,那麼hdfs裡需要配置一些額外的東西,我試了沒成功。設定為true能減少通信次數,加快速度,如果您和我一樣不想折騰,還是建議設定為false。

<code>curl -XGET '192.168.40.11:9200/_snapshot/my_hdfs_repository?pretty'</code>

<code>curl -XPUT '192.168.40.11:9200/_snapshot/my_hdfs_repository/snapshot_20171215?wait_for_completion=false&amp;pretty'</code>

注意:

<code>wait_for_completion=true</code>會一直等待備份結束。

<code>wait_for_completion=false</code>會立即傳回,備份在背景進行,可以使用下面的api檢視備份的進度:

<code>curl -XGET '192.168.40.11:9200/_snapshot/my_hdfs_repository/snapshot_20171215/_status?pretty'</code>

我使用<code>master</code>這個使用者操作的,快照備份在hdfs的這個目錄下,可以檢視一下:

<code>hdfs dfs -ls /user/master/elasticsearch/repositories/my_hdfs_repository</code>

注意目标叢集的IP,hdfs的IP,hdfs的路徑都不要寫錯了

注意:如果恢複的時候報這個錯:<code>cannot restore index [janusgraph_vertices] because it's open ...</code>

說明目标叢集裡已經有這個索引了,要把這個索引删掉,然後再恢複,因為快照裡已經有schema資訊了:

<code>curl -XDELETE '192.168.40.15:9200/janusgraph_vertices?pretty'</code>

注意恢複快照的時候分片的數量是不能改變的(要想改變分片數量隻能re-index)。但是副本的數量是可以重新指定的(<code>index.number_of_replicas</code> )。還有其他的一些參數也是可以重新指定的。
咱們的snapshot_20171215備份的是所有索引, 這裡的<code>indices</code>可以寫多個索引的名字,逗号隔開。indices指定的索引,其參數會被覆寫。 indices沒有指定的索引,其參數跟以前保持一緻。因為備份的時候,索引的配置參數和schema也一并備份了。

在ES head插件上看:

紅色狀态表示ES正在恢複主分片, 黃色狀态表示主分片已經恢複完成,正在進行建立副本的操作,綠色狀态表示所有的主分片和副本都恢複完成。

如果不放心還可以用<code>du -sh ./data</code> 看一下檔案夾的容量有沒有增加。

注意剛恢複完不要急着查詢,這時候查詢會報錯誤,要等一會兒再查詢!恢複的過程中也不要查詢資料!

<code>curl -XDELETE '192.168.40.11:9200/_snapshot/my_hdfs_repository/snapshot_20171215?pretty'</code>