W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本節(jié)提供有關(guān)如何設(shè)置 Solr 以在 * nix 平臺(如 Ubuntu)的生產(chǎn)中運(yùn)行的指南。具體來說,我們將介紹在 Linux 主機(jī)上運(yùn)行單個(gè) Solr 實(shí)例的過程,然后提供有關(guān)如何支持在同一主機(jī)上運(yùn)行的多個(gè) Solr 節(jié)點(diǎn)的提示。
Solr 包含一個(gè)服務(wù)安裝腳本(bin/install_solr_service.sh),它可以幫助您在 Linux 上將 Solr 作為服務(wù)安裝。目前,該腳本僅支持 CentOS、Debian、Red Hat、SUSE 和 Ubuntu Linux 發(fā)行版。在運(yùn)行腳本之前,您需要確定一些關(guān)于您的設(shè)置的參數(shù)。具體而言,您需要決定 Solr 的安裝位置以及哪些系統(tǒng)用戶應(yīng)該是 Solr 文件和進(jìn)程的所有者。
我們建議從 Solr 發(fā)行包中包含的文件中分離出實(shí)時(shí)的 Solr 文件,如日志和索引文件,因?yàn)檫@樣可以更容易地升級 Solr,系統(tǒng)管理員認(rèn)為這是一種很好的做法。
默認(rèn)情況下,服務(wù)安裝腳本將提取分發(fā)檔案到:/opt。當(dāng)您運(yùn)行安裝腳本時(shí),可以使用 -i 選項(xiàng)更改此位置。該腳本還會創(chuàng)建一個(gè)指向 Solr 的版本化目錄的符號鏈接。例如,如果您為 Solr 7.0.0 運(yùn)行安裝腳本,則將使用以下目錄結(jié)構(gòu):
/opt/solr-7.0.0
/opt/solr -> /opt/solr-7.0.0
使用符號鏈接可以使任何腳本不依賴于特定的 Solr 版本。如果您需要升級到更高版本的 Solr,則可以更新符號鏈接以指向升級版本的 Solr。我們將使用 /opt/solr 在本頁的其余部分中引用 Solr 安裝目錄。
您還應(yīng)該將可寫的 Solr 文件分隔到不同的目錄中;默認(rèn)情況下,安裝腳本使用:/var/solr,但您可以使用 -d 選項(xiàng)覆蓋此位置。采用這種方法,在 /opt/solr 中的文件將保持不變,并且所有在 Solr 運(yùn)行時(shí)更改的文件都將處于 /var/solr 下面。
出于安全考慮,建議不要以 root 身份運(yùn)行 Solr,并且 "控制腳本啟動(dòng)" 命令將拒絕這樣做。因此,您應(yīng)該確定將擁有所有 Solr 文件和正在運(yùn)行的 Solr 進(jìn)程的系統(tǒng)用戶的用戶名。默認(rèn)情況下,安裝腳本將創(chuàng)建 solr 用戶,但您可以使用 -u 選項(xiàng)覆蓋此設(shè)置。如果您的組織對創(chuàng)建新的用戶帳戶有特定的要求,那么您應(yīng)該在運(yùn)行腳本之前創(chuàng)建用戶。安裝腳本將使 Solr 用戶成為 /opt/solr和/var/solr 目錄的所有者。
現(xiàn)在,您可以運(yùn)行安裝腳本了。
要運(yùn)行該腳本,您需要下載最新的 Solr 分發(fā)歸檔文件,然后執(zhí)行以下操作:
tar xzf solr-7.0.0.tgz solr-7.0.0/bin/install_solr_service.sh --strip-components=2
前面的命令 install_solr_service.sh 將檔案中的腳本提取到當(dāng)前目錄中。如果在 Red Hat 上安裝,請確保在運(yùn)行 Solr 安裝腳本之前安裝了 lsof(sudo yum install lsof)。安裝腳本必須以 root 身份運(yùn)行:
sudo bash ./install_solr_service.sh solr-7.0.0.tgz
默認(rèn)情況下,該腳本將分發(fā)歸檔文件提取到 /opt,配置 Solr 將文件寫入 /var/solr,并以 solr 用戶身份運(yùn)行 Solr 。因此,下面的命令產(chǎn)生與上一個(gè)命令相同的結(jié)果:
sudo bash ./install_solr_service.sh solr-7.0.0.tgz -i /opt -d /var/solr -u solr -s solr -p 8983
您可以使用傳遞給安裝腳本的選項(xiàng)自定義服務(wù)名稱、安裝目錄、端口和所有者。要查看可用選項(xiàng),請執(zhí)行以下操作:
sudo bash ./install_solr_service.sh -help
腳本完成后,Solr 將作為服務(wù)安裝并在服務(wù)器的后臺運(yùn)行(在端口 8983 上)。為了驗(yàn)證,您可以這樣做:
sudo service solr status
如果您不想立即啟動(dòng)服務(wù),請傳遞 -n 選項(xiàng)。然后,您可以稍后手動(dòng)啟動(dòng)服務(wù),例如在完成配置設(shè)置之后。
我們將介紹一些您可以進(jìn)行的其他配置設(shè)置,以便稍后微調(diào)您的 Solr 設(shè)置。在繼續(xù)之前,讓我們仔細(xì)看一下安裝腳本執(zhí)行的步驟。這樣可以幫助您更好地了解并閱讀本指南中的其他頁面,幫助您了解有關(guān) Solr 安裝的重要細(xì)節(jié):例如當(dāng)一個(gè)頁面提到 Solr 主頁時(shí),您就會知道系統(tǒng)中的具體位置。
Solr 主目錄(不要與 Solr 安裝目錄混淆)是 Solr 使用索引文件管理核心目錄的地方。默認(rèn)情況下,安裝腳本使用:/var/solr/data。如果在安裝腳本中使用 -d 選項(xiàng),則這將更改為給定 -d 選項(xiàng)的位置中的 data 子目錄。請花些時(shí)間檢查系統(tǒng)上的 Solr 主目錄的內(nèi)容。如果您沒有在 ZooKeeper 中存儲 solr.xml,則主目錄必須包含一個(gè) solr.xml 文件。當(dāng) Solr 啟動(dòng)時(shí),Solr 控制腳本將使用-Dsolr.solr.home=…?
系統(tǒng)屬性傳遞主目錄的位置。
服務(wù)安裝腳本將創(chuàng)建一個(gè)特定于環(huán)境的包含文件,該文件將重寫 bin/solr 腳本所使用的默認(rèn)值。使用包含文件的主要優(yōu)點(diǎn)是它提供了一個(gè)單一的位置,在這個(gè)位置上定義了所有特定于環(huán)境的重寫。請花點(diǎn)時(shí)間檢查 /etc/default/solr.in.sh 文件的內(nèi)容,這是安裝腳本設(shè)置的默認(rèn)路徑。如果您在安裝腳本中使用 -s 選項(xiàng)更改服務(wù)的名稱,則文件名的第一部分將會不同。對于名為 solr-demo 的服務(wù),該文件將被命名為 /etc/default/solr-demo.in.sh。有很多設(shè)置可以用這個(gè)文件重寫。但是,這個(gè)腳本至少需要定義 SOLR_PID_DIR 和 SOLR_HOME 變量,比如:
SOLR_PID_DIR=/var/solr
SOLR_HOME=/var/solr/data
該 SOLR_PID_DIR 變量設(shè)置控制腳本將寫入包含 Solr 服務(wù)器進(jìn)程 ID 的文件的目錄。
Solr 使用 Apache Log4J 進(jìn)行日志記錄。安裝腳本復(fù)制 /opt/solr/server/resources/log4j.properties 到 /var/solr/log4j.properties。請花一點(diǎn)時(shí)間通過在 /etc/default/solr.in.sh 中檢查以下設(shè)置以驗(yàn)證 Solr 包含文件是否配置為將日志發(fā)送到正確的位置:
LOG4J_PROPS=/var/solr/log4j.properties
SOLR_LOGS_DIR=/var/solr/logs
有關(guān) Log4J 配置的詳細(xì)信息,請參閱: 配置日志記錄。
在 Linux 上運(yùn)行 Solr 等服務(wù)時(shí),通常需要設(shè)置 init.d 腳本,以便系統(tǒng)管理員可以使用服務(wù)工具來控制 Solr,例如:service solr start。安裝腳本創(chuàng)建一個(gè)非常基本的init.d 腳本來幫助您入門。請花點(diǎn)時(shí)間檢查 /etc/init.d/solr 文件,這是安裝腳本設(shè)置的默認(rèn)腳本名稱。如果在安裝腳本中使用 -s 選項(xiàng)更改服務(wù)的名稱,則文件名將會不同。請注意,根據(jù)傳遞給安裝腳本的參數(shù)為您的環(huán)境設(shè)置了以下變量:
SOLR_INSTALL_DIR=/opt/solr
SOLR_ENV=/etc/default/solr.in.sh
RUNAS=solr
SOLR_INSTALL_DIR 和 SOLR_ENV 變量應(yīng)該是不言而喻的。該 RUNAS 變量設(shè)置 Solr 進(jìn)程的所有者,例如 solr;如果不設(shè)置此值,腳本將以 root 身份運(yùn)行 Solr ,這是不建議用于生產(chǎn)的。您可以以 root 身份使用 /etc/init.d/solr 腳本來啟動(dòng) Solr,執(zhí)行以下操作:
service solr start
該 /etc/init.d/solr 腳本還支持停止、重新啟動(dòng)和狀態(tài)命令。請記住,Solr 附帶的初始化腳本非?;荆荚谙蚰故救绾螌?Solr 設(shè)置為服務(wù)。但是,使用更高級的工具(如 supervisord 或 upstart)來控制 Solr 作為 Linux 上的服務(wù)也很常見。在展示如何將 Solr 與 supervisord 等工具整合在一起超出本指南的范圍時(shí),init.d/solr腳本應(yīng)該提供足夠的指導(dǎo)來幫助您入門。而且,安裝腳本將 Solr 服務(wù)設(shè)置為在主機(jī)初始化時(shí)自動(dòng)啟動(dòng)。
在下一節(jié)中,我們將介紹一些其他的環(huán)境設(shè)置,以幫助您微調(diào)您的生產(chǎn)設(shè)置。但是,在我們繼續(xù)之前,讓我們回顧一下迄今為止取得的成就。具體來說,你應(yīng)該能夠使用 /etc/init.d/solr 控制 Solr。請驗(yàn)證以下命令是否與您的安裝程序一起使用:
sudo service solr restart
sudo service solr status
status 命令應(yīng)該提供一些關(guān)于正在運(yùn)行的 Solr 節(jié)點(diǎn)的基本信息,如:
Solr process PID running on port 8983
{
"version":"5.0.0 - ubuntu - 2014-12-17 19:36:58",
"startTime":"2014-12-19T19:25:46.853Z",
"uptime":"0 days, 0 hours, 0 minutes, 8 seconds",
"memory":"85.4 MB (%17.4) of 490.7 MB"}
如果該 status 命令不成功,請?jiān)?/var/solr/logs/solr.log 中查找錯(cuò)誤消息。
默認(rèn)情況下,bin/solr 腳本將最大 Java 堆大小設(shè)置為 512M(-Xmx512m),這對于 Solr 入門是很好的。對于生產(chǎn),您將希望根據(jù)您的搜索應(yīng)用程序的內(nèi)存需求增加最大堆大??;對于生產(chǎn)服務(wù)器,10 到 20 千兆字節(jié)的值并不少見。當(dāng)您需要更改 Solr 服務(wù)器的內(nèi)存設(shè)置時(shí),請使用 SOLR_JAVA_MEM 包含文件中的變量,例如:
SOLR_JAVA_MEM="-Xms10g -Xmx10g"
此外,Solr 控制腳本還附帶一組預(yù)先配置的 Java 垃圾收集設(shè)置,這些設(shè)置對于許多不同的工作負(fù)載都顯示出與 Solr 的良好配合。但是,這些設(shè)置可能不適用于您對Solr 的具體使用。因此,您可能需要更改 GC 設(shè)置,這也應(yīng)該使用 /etc/default/solr.in.sh 包含文件中的 GC_TUNE 變量來完成。有關(guān)調(diào)整內(nèi)存和垃圾收集設(shè)置的更多信息,請參閱:JVM 設(shè)置。
bin/solr 腳本注冊的 bin/oom_solr.sh 腳本將被 JVM 調(diào)用,如果出現(xiàn)一個(gè) OutOfMemoryError。該 oom_solr.sh 腳本將向 kill -9Solr 進(jìn)程發(fā)出一個(gè)經(jīng)驗(yàn)OutOfMemoryError。在 SolrCloud 模式下運(yùn)行時(shí)建議使用此行為,以便立即通知 ZooKeeper 某個(gè)節(jié)點(diǎn)遇到不可恢復(fù)的錯(cuò)誤。請花點(diǎn)時(shí)間檢查 /opt/solr/bin/oom_solr.sh 腳本的內(nèi)容,以便熟悉腳本如果由 JVM 調(diào)用時(shí)將執(zhí)行的操作。
要以 SolrCloud 模式運(yùn)行 Solr,您需要在包含文件中設(shè)置 ZK_HOST 變量,以指向您的 ZooKeeper 集合。在生產(chǎn)環(huán)境中不支持運(yùn)行嵌入式 ZooKeeper。例如,如果您在默認(rèn)客戶端端口 2181(zk1,zk2 和 zk3)上的以下三臺主機(jī)上托管 ZooKeeper 集成,則可以設(shè)置:
ZK_HOST=zk1,zk2,zk3
當(dāng) ZK_HOST 變量被設(shè)置時(shí),Solr 將以“cloud”模式啟動(dòng)。
如果您使用的是其他系統(tǒng)共享的 ZooKeeper 實(shí)例,建議使用 ZooKeeper 的 chroot 支持來隔離 SolrCloud znode 樹。例如,要確保 SolrCloud 創(chuàng)建的所有 znode都存儲在 /solr 下面,您可以在 ZK_HOST 連接字符串的末尾放置 /solr,例如:
ZK_HOST=zk1,zk2,zk3/solr
首次使用 chroot 之前,您需要使用 Solr 控制腳本在 ZooKeeper 中創(chuàng)建根路徑(znode)。我們可以使用 mkroot命令:
bin/solr zk mkroot /solr -z <ZK_node>:<ZK_PORT>
Tip:你還想用現(xiàn)有的 solr_home 引導(dǎo) ZooKeeper,你可以改為使用 zkcli.sh 或zkcli.bat bootstrap命令,如果它不存在,也會創(chuàng)建 chroot 路徑。有關(guān)更多信息,請參閱命令行實(shí)用程序。
使用 SOLR_HOST 包含文件中的變量來設(shè)置 Solr 服務(wù)器的主機(jī)名。
SOLR_HOST=solr1.example.com
建議設(shè)置 Solr 服務(wù)器的主機(jī)名,尤其是在 SolrCloud 模式下運(yùn)行時(shí),因?yàn)檫@決定了在向 ZooKeeper 注冊時(shí)節(jié)點(diǎn)的地址。
Solr 允許使用 -Dproperty=value 語法在啟動(dòng)時(shí)傳遞的 Java 系統(tǒng)屬性重寫配置屬性。例如,在 solrconfig.xml 中,默認(rèn)的 "自動(dòng)軟提交" 設(shè)置被設(shè)置為:
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
</autoSoftCommit>
一般來說,無論何時(shí)在使用 ${solr.PROPERTY:DEFAULT_VALUE} 語法的 Solr 配置文件中看到一個(gè)屬性,都可以使用 Java 系統(tǒng)屬性重寫它。例如,要將 soft-commits 的 maxTime 設(shè)置為10秒,則可以使用以下命令啟動(dòng) Solr -Dsolr.autoSoftCommit.maxTime=10000,例如:
bin/solr start -Dsolr.autoSoftCommit.maxTime=10000
該 bin/solr 腳本只是在啟動(dòng)時(shí)將以 -D 開頭的選項(xiàng)傳遞給 JVM。為了在生產(chǎn)環(huán)境中運(yùn)行,我們建議在 include 文件中定義 SOLR_OPTS 的變量中設(shè)置這些屬性。按照我們的 soft-commit 例子,在 /etc/default/solr.in.sh 中,你可以這樣做:
SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=10000"
該 bin/solr 腳本能夠在一臺機(jī)器上運(yùn)行多個(gè)實(shí)例,但對于典型的安裝,這不是推薦的設(shè)置。每個(gè)額外的實(shí)例都需要額外的 CPU 和內(nèi)存資源。單個(gè)實(shí)例可以很容易地處理多個(gè)索引。
Tip:何時(shí)忽略該建議?
對于每個(gè)建議,都有例外。對于上面的建議,該異常在討論極限可伸縮性時(shí)主要適用。在一臺主機(jī)上運(yùn)行多個(gè) Solr 節(jié)點(diǎn)的最佳原因是減少了對非常大的堆的需求。
當(dāng) Java 堆變得非常大時(shí),即使啟動(dòng)腳本默認(rèn)提供了 GC 調(diào)整,也可能導(dǎo)致非常長的垃圾回收暫停。堆被認(rèn)為是“非常大”的確切點(diǎn)將取決于如何使用 Solr。這意味著沒有可作為閾值的硬數(shù)字,但是如果你的堆達(dá)到了16到32千兆字節(jié)的鄰域,那么可能是考慮拆分節(jié)點(diǎn)的時(shí)候了。理想情況下,這將意味著更多的機(jī)器,但預(yù)算的限制可能會使這一切不可能。
一旦堆達(dá)到32GB,還有另外一個(gè)問題。在32GB以下,Java 能夠使用壓縮的指針,但是在那之上,需要更大的指針,它使用更多的內(nèi)存并且減慢了 JVM 的速度。
由于潛在的垃圾收集問題以及在32GB時(shí)發(fā)生的特定問題,如果單個(gè)實(shí)例需要64GB的堆,那么如果機(jī)器設(shè)置了兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的堆大小為31GB,則性能可能會大大提高。
如果您的用例需要多個(gè)實(shí)例,則至少您需要為要運(yùn)行的每個(gè)節(jié)點(diǎn)分配獨(dú)特的 Solr 主目錄;理想情況下,每個(gè)主頁都應(yīng)位于不同的物理磁盤上,以便多個(gè) Solr 節(jié)點(diǎn)在訪問磁盤上的文件時(shí)不必相互競爭。擁有不同的 Solr 主目錄意味著每個(gè)節(jié)點(diǎn)都需要一個(gè)不同的包含文件。而且,如果使用/etc/init.d/solr
腳本來控制 Solr 作為服務(wù),那么每個(gè)節(jié)點(diǎn)都需要單獨(dú)的腳本。最簡單的方法是使用服務(wù)安裝腳本在同一主機(jī)上添加多個(gè)服務(wù),例如:
sudo bash ./install_solr_service.sh solr-7.0.0.tgz -s solr2 -p 8984
上面顯示的命令將 solr2 在端口 8984 上添加一個(gè)名為 running 的服務(wù),使用 /var/solr2 可寫(即“l(fā)ive”)文件;第二臺服務(wù)器將仍然由 solr 用戶擁有并運(yùn)行,并將使用 /opt 其中的 Solr 分發(fā)文件。安裝 solr2 服務(wù)之后,通過執(zhí)行以下操作驗(yàn)證它是否正常工作:
sudo service solr2 restart
sudo service solr2 status
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: