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