Solr:設(shè)置一個(gè)外部ZooKeeper集合

2018-12-27 11:45 更新

雖然Solr與Apache ZooKeeper捆綁在一起,但您應(yīng)該認(rèn)為自己不建議在生產(chǎn)環(huán)境中使用這個(gè)內(nèi)部的ZooKeeper。

關(guān)閉一個(gè)冗余的Solr實(shí)例也會(huì)關(guān)閉它的ZooKeeper服務(wù)器,這可能不是那么多余的。由于ZooKeeper集合必須有超過(guò)半數(shù)的服務(wù)器在任何給定的時(shí)間運(yùn)行,這可能是一個(gè)問(wèn)題。

解決這個(gè)問(wèn)題的方法是建立一個(gè)外部的ZooKeeper集合。幸運(yùn)的是,雖然這個(gè)過(guò)程由于強(qiáng)大的選項(xiàng)數(shù)量而顯得嚇人,但建立一個(gè)簡(jiǎn)單的集合實(shí)際上是非常簡(jiǎn)單的,如下所述。

有多少ZooKeepers?

在ZooKeeper指南(http://zookeeper.apache.org/doc/r3.4.10/zookeeperAdmin.html)中提到:為ZooKeeper服務(wù)處于活動(dòng)狀態(tài),必須有大多數(shù)的 non-failing(非故障)機(jī)器,可以相互溝通。要?jiǎng)?chuàng)建一個(gè)能夠容忍 F 計(jì)算機(jī)失敗的部署,您應(yīng)該依靠部署2xF + 1機(jī)器進(jìn)行計(jì)數(shù)。因此,由三臺(tái)計(jì)算機(jī)組成的部署可以處理一個(gè)故障,部署五臺(tái)計(jì)算機(jī)可以處理兩個(gè)故障。請(qǐng)注意,部署六臺(tái)機(jī)器只能處理兩次故障,因?yàn)槿_(tái)機(jī)器不占多數(shù)。因此,ZooKeeper的部署通常由奇數(shù)個(gè)的機(jī)器組成。

在規(guī)劃配置多少個(gè)ZooKeeper節(jié)點(diǎn)時(shí),請(qǐng)記住,ZooKeeper集成的主要原則是維護(hù)大部分服務(wù)器來(lái)處理請(qǐng)求。這個(gè)多數(shù)也被稱為“法定人數(shù)(quorum)”。

通常建議在您的集合中有一個(gè)奇怪的ZooKeeper服務(wù)器,所以大部分都是維護(hù)的。

例如,如果您只有兩個(gè)ZooKeeper節(jié)點(diǎn),而其中一個(gè)出現(xiàn)故障,則50%的可用服務(wù)器不是多數(shù),所以ZooKeeper將不再提供請(qǐng)求。但是,如果有三個(gè)ZooKeeper節(jié)點(diǎn),并且有一個(gè)出現(xiàn)故障,則有66%的可用服務(wù)器可用,而ZooKeeper將正常繼續(xù),而您正在修復(fù)一個(gè)向下節(jié)點(diǎn)。如果有5個(gè)節(jié)點(diǎn),則必要時(shí)可以繼續(xù)使用兩個(gè)向下的節(jié)點(diǎn)進(jìn)行操作。

有關(guān)ZooKeeper集群的更多信息,請(qǐng)參閱http://zookeeper.apache.org/doc/r3.4.10/zookeeperAdmin.html#sc_zkMulitServerSetup上的ZooKeeper文檔。

下載Apache ZooKeeper

設(shè)置Apache ZooKeeper的第一步當(dāng)然是下載軟件,您可以從http://zookeeper.apache.org/releases.html中獲得。

當(dāng)使用獨(dú)立的ZooKeeper時(shí),您需要注意使用Solr發(fā)布的最新版本來(lái)更新ZooKeeper的版本。由于您將其作為獨(dú)立應(yīng)用程序使用,因此升級(jí)Solr時(shí)不會(huì)升級(jí)。Solr目前使用Apache ZooKeeper v3.4.10。

創(chuàng)建一個(gè)獨(dú)立的ZooKeeper

創(chuàng)建實(shí)例

創(chuàng)建實(shí)例是將文件解壓縮到特定目標(biāo)目錄的簡(jiǎn)單方法。實(shí)際的目錄本身并不重要,只要你知道它在哪里,以及你想在哪里存放它的內(nèi)部數(shù)據(jù)。

配置實(shí)例

下一步是配置你的ZooKeeper實(shí)例。為此,請(qǐng)創(chuàng)建以下文件:<ZOOKEEPER_HOME>/conf/zoo.cfg。對(duì)此文件添加以下信息:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

參數(shù)如下:

tickTime

ZooKeeper的一部分功能是確定哪些服務(wù)器在任何給定的時(shí)間運(yùn)行,并且最短的會(huì)話時(shí)間被定義為兩個(gè)“ticks”。該tickTime參數(shù)以毫秒為單位指定每個(gè)刻度應(yīng)該有多長(zhǎng)時(shí)間。

dataDir

這是ZooKeeper將存儲(chǔ)關(guān)于集群的數(shù)據(jù)的目錄。這個(gè)目錄應(yīng)該從空白處開(kāi)始。

clientPort

這是Solr將訪問(wèn)ZooKeeper的端口。

一旦這個(gè)文件就位,你就可以開(kāi)始ZooKeeper實(shí)例了。

運(yùn)行實(shí)例

要運(yùn)行實(shí)例,可以簡(jiǎn)單地使用ZOOKEEPER_HOME/bin/zkServer.sh提供的腳本,如下所示:zkServer.sh start

同樣,ZooKeeper通過(guò)附加的配置提供了很大的能力,但是深入研究這些超出了本文檔的范圍,所以不多做介紹。但是,對(duì)于本示例,默認(rèn)值是正常的。

在實(shí)例中指向Solr

在您創(chuàng)建的ZooKeeper實(shí)例中指向Solr是使用bin / solr腳本時(shí)使用-z參數(shù)的簡(jiǎn)單方法。例如,為了將Solr實(shí)例指向您已經(jīng)在端口2181上啟動(dòng)的ZooKeeper,您需要執(zhí)行以下操作:

使用已經(jīng)在端口2181上運(yùn)行(所有其他的默認(rèn)值)的ZooKeeper來(lái)啟動(dòng)cloud例子:

bin/solr start -e cloud -z localhost:2181 -noprompt

在端口2181上添加指向現(xiàn)有ZooKeeper的節(jié)點(diǎn):

bin/solr start -cloud -s <path to solr home for new node> -p 8987 -z localhost:2181

關(guān)閉ZooKeeper

要關(guān)閉ZooKeeper,請(qǐng)使用帶“stop”命令的zkServer腳本:zkServer.sh stop。

建立一個(gè)ZooKeeper集合

使用外部ZooKeeper集成,與“入門(mén)(Getting Started)”示例相比,您需要更仔細(xì)地設(shè)置一些東西。

不同之處在于,不是簡(jiǎn)單地啟動(dòng)服務(wù)器,而是需要先配置它們以便相互了解和交流。所以您的原始zoo.cfg文件可能是這樣的:

dataDir=/var/lib/zookeeperdata/1
clientPort=2181
initLimit=5
syncLimit=2
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

在這里你看到三個(gè)新的參數(shù):

initLimit

允許追隨者連接和同步到leader的時(shí)間量 (以刻度為間隔)。在這種情況下,您有5刻度,每一個(gè)都是2000毫秒長(zhǎng),因此服務(wù)器將等待10秒,以便與leader連接并同步。

syncLimit

時(shí)間量(以時(shí)鐘周期為單位),以允許關(guān)注者與ZooKeeper同步。如果追隨者落后于領(lǐng)導(dǎo)者,他們將被拋棄。

server.X

這些是集合中所有服務(wù)器的ID和位置,它們是彼此通信的端口。服務(wù)器ID必須另外存儲(chǔ)在<dataDir>/myid文件中,并位于每個(gè)ZooKeeper實(shí)例中的dataDir。ID標(biāo)識(shí)每個(gè)服務(wù)器,所以在第一個(gè)實(shí)例的情況下,您將創(chuàng)建內(nèi)容為“1” 的/var/lib/zookeeperdata/1/myid文件。

現(xiàn)在,雖然Solr需要?jiǎng)?chuàng)建全新的目錄來(lái)運(yùn)行多個(gè)實(shí)例,您只需要一個(gè)新的ZooKeeper實(shí)例,即使它們位于同一臺(tái)計(jì)算機(jī)上測(cè)試的目的,是一個(gè)新的配置文件。為了完成這個(gè)例子,你將創(chuàng)建兩個(gè)更多的配置文件。

該<ZOOKEEPER_HOME>/conf/zoo2.cfg文件應(yīng)該具有以下內(nèi)容:

tickTime=2000
dataDir=/var/lib/zookeeperdata/2
clientPort=2182
initLimit=5
syncLimit=2
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

您還需要?jiǎng)?chuàng)建<ZOOKEEPER_HOME>/conf/zoo3.cfg:

tickTime=2000
dataDir=/var/lib/zookeeperdata/3
clientPort=2183
initLimit=5
syncLimit=2
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

最后,在每個(gè)dataDir目錄中創(chuàng)建您的myid文件,這樣每個(gè)服務(wù)器就知道它是哪個(gè)實(shí)例。每臺(tái)機(jī)器上的myid文件中的id必須與“server.X”定義相匹配。因此,上例中名為“server.1”的ZooKeeper實(shí)例(或計(jì)算機(jī))必須具有包含值“1” 的myid文件。該myid文件可以是1到255之間的任何整數(shù),并且必須與zoo.cfg文件中分配的服務(wù)器標(biāo)識(shí)相匹配。

要啟動(dòng)服務(wù)器,您可以簡(jiǎn)單地明確引用配置文件:

cd <ZOOKEEPER_HOME>
bin/zkServer.sh start zoo.cfg
bin/zkServer.sh start zoo2.cfg
bin/zkServer.sh start zoo3.cfg

一旦這些服務(wù)器正在運(yùn)行,您可以像以前一樣從Solr中引用它們:

bin/solr start -e cloud -z localhost:2181,localhost:2182,localhost:2183 -noprompt

保護(hù)ZooKeeper連接

您可能還希望保護(hù)ZooKeeper和Solr之間的通信。

要設(shè)置znode的ACL保護(hù),請(qǐng)參閱ZooKeeper訪問(wèn)控制。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)