Solr如何制作和還原備份

2018-12-21 11:51 更新

如果您擔(dān)心數(shù)據(jù)丟失,當(dāng)然您應(yīng)該這樣做,那么您需要一種備份Solr索引的方法,以便在出現(xiàn)災(zāi)難性故障的情況下能夠快速恢復(fù)。

Solr提供了兩種方法來(lái)備份和恢復(fù)Solr核心或集合,具體取決于您如何運(yùn)行Solr。如果在SolrCloud模式下運(yùn)行,則將使用Collections API。如果以獨(dú)立模式運(yùn)行Solr,則將使用復(fù)制處理程序。

SolrCloud備份

Collections API提供了運(yùn)行SolrCloud時(shí)支持備份的功能。這樣可以在多個(gè)碎片之間生成備份,并將其恢復(fù)為與原始分類(lèi)相同數(shù)量的碎片和副本。

有兩個(gè)命令可用:

  • action=BACKUP:該命令備份Solr索引和配置。有關(guān)更多信息,請(qǐng)參閱“備份集合”一節(jié)。
  • action=RESTORE:該命令將恢復(fù)Solr索引和配置?!斑€原收集”部分提供了更多信息。

獨(dú)立模式備份

備份和恢復(fù)使用Solr的復(fù)制處理程序。Solr包含對(duì)復(fù)制的隱式支持,因此可以使用此API。但是,可以通過(guò)在solrconfig.xml中定義自己的復(fù)制處理程序來(lái)自定義復(fù)制處理程序的配置。有關(guān)配置復(fù)制處理程序的詳細(xì)信息,請(qǐng)參閱“配置ReplicationHandler”一節(jié)。

Backup API

該backup API需要發(fā)送一個(gè)命令到/replication處理程序來(lái)備份系統(tǒng)。

您可以使用這樣的HTTP命令來(lái)觸發(fā)備份(用正在使用的核心名稱(chēng)替換“getting start”):

backup API示例如下:

http://localhost:8983/solr/gettingstarted/replication?command=backup

該backup命令是一個(gè)異步調(diào)用,它將表示來(lái)自最新索引提交點(diǎn)的數(shù)據(jù)。所有的索引和搜索操作將像往常一樣繼續(xù)對(duì)索引執(zhí)行。

在任何時(shí)間點(diǎn),只能對(duì)一個(gè)核心進(jìn)行一次備份調(diào)用。當(dāng)正在進(jìn)行的備份操作正在發(fā)生時(shí),隨后的恢復(fù)調(diào)用將引發(fā)異常。

備份請(qǐng)求還可以采用以下附加參數(shù):

location

將創(chuàng)建備份的路徑。如果路徑不是絕對(duì)的,則備份路徑將與Solr的實(shí)例目錄相關(guān)。|name |The snapshot將在名為snapshot.<name>的目錄中創(chuàng)建。如果沒(méi)有指定名稱(chēng),則目錄名稱(chēng)將具有以下格式:snapshot.<yyyyMMddHHmmssSSS>

numberToKeep

要保留的備份數(shù)量。如果maxNumberOfBackups已在solrconfig.xml中的復(fù)制處理程序指定,則始終使用maxNumberOfBackups并嘗試使用numberToKeep將導(dǎo)致錯(cuò)誤。另外,如果指定了備份名稱(chēng),則不會(huì)考慮此參數(shù)。有關(guān)maxNumberOfBackups的詳細(xì)信息,請(qǐng)參閱配置ReplicationHandler一節(jié)。

repository

用于備份的存儲(chǔ)庫(kù)的名稱(chēng)。如果沒(méi)有指定倉(cāng)庫(kù),那么本地文件系統(tǒng)倉(cāng)庫(kù)將被自動(dòng)使用。

commitName

使用CREATESNAPSHOT命令拍攝快照時(shí)使用的提交的名稱(chēng)。

Backup Status

可以監(jiān)視備份操作, 以便通過(guò)將details命令發(fā)送到/replication處理程序來(lái)查看它是否已完成,如以下示例所示:

Status API示例如下所示:

http://localhost:8983/solr/gettingstarted/replication?command=details

輸出代碼片段:

<lst name="backup">
  <str name="startTime">Sun Apr 12 16:22:50 DAVT 2015</str>
  <int name="fileCount">10</int>
  <str name="status">success</str>
  <str name="snapshotCompletedAt">Sun Apr 12 16:22:50 DAVT 2015</str>
  <str name="snapshotName">my_backup</str>
</lst>

如果失敗了,則會(huì)在響應(yīng)中發(fā)送 snapShootException。

Restore API

還原備份需要將restore命令發(fā)送到/replication處理程序,然后是要還原的備份的名稱(chēng)。

您可以使用如下命令從備份中還原:

用法示例:

http://localhost:8983/solr/gettingstarted/replication?command=restore&name=backup_name

這會(huì)將指定的索引快照還原到當(dāng)前的核心。還原完成后,搜索將開(kāi)始反映快照數(shù)據(jù)。

該restore請(qǐng)求可以采取這些附加參數(shù):

location

備份快照文件的位置。如果未指定,它將在Solr的數(shù)據(jù)目錄中查找備份。

name

要還原的備份索引快照的名稱(chēng)。如果沒(méi)有提供該名稱(chēng),則snapshot.<timestamp>在位置目錄中查找?guī)в懈袷降膫浞荨K谶@種情況下選擇最新的時(shí)間戳備份。

repository

用于備份的存儲(chǔ)庫(kù)的名稱(chēng)。如果沒(méi)有指定倉(cāng)庫(kù),那么本地文件系統(tǒng)倉(cāng)庫(kù)將被自動(dòng)使用。

該restore命令是一個(gè)異步調(diào)用。一旦恢復(fù)完成,反映的數(shù)據(jù)將是還原的備份索引。

在一個(gè)時(shí)間點(diǎn)上只能對(duì)一個(gè)核心進(jìn)行一次restore調(diào)用。當(dāng)正在進(jìn)行的還原操作正在發(fā)生時(shí),隨后的還原調(diào)用將引發(fā)異常。

Restore Status API

您還可以通過(guò)將restorestatus命令發(fā)送到/replication處理程序來(lái)檢查restore操作的狀態(tài),如下例所示:

Status API 示例:

http://localhost:8983/solr/gettingstarted/replication?command=restorestatus

Status API輸出:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
  <lst name="restorestatus">
    <str name="snapshotName">snapshot.<name></str>
    <str name="status">success</str>
  </lst>
</response>

狀態(tài)值可以是“In Progress”,“success”或“failed”。如果失敗了,那么也會(huì)在響應(yīng)中發(fā)送一個(gè)“exception”。

Create Snapshot API

快照(snapshot)功能與備份(backup)功能不同,因?yàn)樗饕募粫?huì)復(fù)制到任何位置。索引文件在同一個(gè)索引目錄中被快照,并且可以在進(jìn)行備份時(shí)被引用。

您可以用這樣的HTTP命令觸發(fā)一個(gè)快照命令(將 "techproducts" 替換為您正在使用的核心名稱(chēng)):

Create Snapshot API示例:

http://localhost:8983/solr/admin/cores?action=CREATESNAPSHOT&core=techproducts&commitName=commit1

所述CREATESNAPSHOT請(qǐng)求參數(shù)是:

commitName

將快照存儲(chǔ)為的名稱(chēng)。

core

要在其上執(zhí)行快照的核心的名稱(chēng)。

async

請(qǐng)求ID來(lái)跟蹤這個(gè)將被異步處理的操作。

List Snapshot API

該LISTSNAPSHOTS命令列出了特定核心的所有拍攝快照。

您可以使用像這樣的 HTTP 命令觸發(fā)列表快照命令(將 "techproducts" 替換為您正在使用的核心的名稱(chēng)):

List Snapshot API示例:

http://localhost:8983/solr/admin/cores?action=LISTSNAPSHOTS&core=techproducts&commitName=commit1

列表快照請(qǐng)求參數(shù)是:

core

要列出其快照的核心的名稱(chēng)。

async

請(qǐng)求ID來(lái)跟蹤這個(gè)將被異步處理的動(dòng)作。

Delete Snapshot API

該DELETESNAPSHOT命令刪除特定核心的快照。

您可以像這樣使用HTTP命令來(lái)觸發(fā)刪除快照(將“techproducts”替換為正在使用的核心的名稱(chēng)):

Delete Snapshot API示例:

http://localhost:8983/solr/admin/cores?action=DELETESNAPSHOT&core=techproducts&commitName=commit1

刪除快照請(qǐng)求參數(shù)是:

commitName

指定要?jiǎng)h除的提交名稱(chēng)

core

我們要?jiǎng)h除快照的核心的名稱(chēng)

async

請(qǐng)求ID來(lái)跟蹤這個(gè)將被異步處理的操作

備份/還原存儲(chǔ)庫(kù)

Solr提供了接口來(lái)插入不同的存儲(chǔ)系統(tǒng)進(jìn)行備份和還原。例如,您可以在本地文件系統(tǒng)(如EXT3)上運(yùn)行Solr群集,但可以將索引備份到HDFS文件系統(tǒng),反之亦然。

存儲(chǔ)庫(kù)接口需要在solr.xml文件中配置。在運(yùn)行備份/恢復(fù)(backup/restore )命令時(shí),我們可以指定要使用的存儲(chǔ)庫(kù)。

如果未配置任何存儲(chǔ)庫(kù),則將自動(dòng)使用本地文件系統(tǒng)存儲(chǔ)庫(kù)。

示例solr.xml部分用于配置類(lèi)似HDFS的存儲(chǔ)庫(kù):

<backup>
  <repository name="hdfs" class="org.apache.solr.core.backup.repository.HdfsBackupRepository" default="false">
    <str name="location">${solr.hdfs.default.backup.path}</str>
    <str name="solr.hdfs.home">${solr.hdfs.home:}</str>
    <str name="solr.hdfs.confdir">${solr.hdfs.confdir:}</str>
  </repository>
</backup>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)