您好,登錄后才能下訂單哦!
文章主要來源于對官方文檔的翻譯:
壓縮包bin目錄有個install_solr_service.sh腳本,幫助你安裝solr作為一個服務。目前支持CentOS, Debian, Red Hat, SUSE 和 Ubuntu Linux系統。
為了方便升級,建議將安裝目錄和solr數據文件的目錄分開,并且為安裝目錄創建軟連接(這些事情install_solr_service.sh都會為你做,你僅需指定目錄,-i 選項可以指定安裝目錄)。
假如版本為7.7,并且采用默認安目錄(/opt),軟連接方式如下:
/opt/solr-7.7.0
/opt/solr -> /opt/solr-7.7.0
不建議用root用戶運行solr,所以install_solr_service.sh會為你創建默認用戶solr,用戶solr將是solr系統的啟動者和文件擁有者(可以通過ps -ef|grep java驗證,ls -ls命令也可以驗證solr文件的擁有者)。-u選項可以指定用戶替代默認的solr。
? ?4. 具體安裝步驟(其實安裝只需執行這一步,其他都是對這一步的說明)
解壓:? tar xzf solr-7.7.0.tgz solr-7.7.0/bin/install_solr_service.sh --strip-components=2(用root用戶執行)
安裝:?sudo bash ./install_solr_service.sh solr-7.7.0.tgz(用root用戶執行),該命令等價于sudo bash ./install_solr_service.sh solr-7.7.0.tgz -i /opt -d /var/solr -u solr -s solr -p 8983(-i指定SOLR安裝目錄,-d指定SOLR數據目錄,-u指定SOLR系統的啟動和文件所有用戶,-p指定SOLR啟動端口)
? ? 5. 啟動和關閉,重啟命令,查看狀態
? ? ? ?service solr start?service solr stop?service solr restart?service solr status
? ?6.? 安裝目錄bin下的solr.sh腳本里有默認的數據目錄位置等啟動參數配置,也可以傳遞參數覆蓋腳本里的配置(如-Dsolr.solr.home=…可以指定數據目錄)。但強烈建議使用SOLR系統的配置文件,通常該文件是:/etc/default/solr.in.sh(該文件的目錄可以在執行安裝腳本install_solr_service.sh,用-s選項替代默認路徑),里面有所有涉及到的參數。
? ? 該配置文件至少配置了一下幾項:
????SOLR_PID_DIR="/var/solr"? ??
????SOLR_HOME="/var/solr/data"
????LOG4J_PROPS="/var/solr/log4j2.xml"
????SOLR_LOGS_DIR="/var/solr/logs"? --日志文件目錄
????SOLR_PORT="8983"
? ?7. init.d腳本。將solr安裝為服務(即用install_solr_service.sh安裝),會生成/etc/init.d/solr文件,用于幫助你管理solr服務(即可以用servce solr命令操????????? ?作,該腳本有啟動需要的位置信息,如下(如果采用默認安裝):
????? ?SOLR_INSTALL_DIR=/opt/solr? ?--solr的安裝目錄
????? ?SOLR_ENV=/etc/default/solr.in.sh? ---solr服務的配置文件
????? ?RUNAS=solr? ?---這里指定操作系統用戶名,即solr服務的所屬服務
????????).
? 8. 錯誤日志文件:?/var/solr/logs/solr.log
??
? 9. 調優部分
? Dynamic Defaults for ConcurrentMergeScheduler并發合并調度器的動態默認值
??Merge Scheduler在solrconfig.xml(每個核心都有該配置文件,/var/solr/data/test_core/conf/solrconfig.xml)配置。Merge Scheduler會啟動多個后臺線 程合并Lucene段(Lucene segments)。
?默認情況下,ConcurrentMergeScheduler.會自動檢測硬盤的類型:
?如果是機械硬盤(rotational disk):?maxThreadCount=1?maxMergeCount=6
?如果是固態硬盤 (SSD):??maxThreadCount=4 or CPU數的一半(指分給JVM的CPU,哪個值大就為哪個)。maxMergeCount=maxThreadCount+5
? 在LINUX系統中,系統會自動檢測硬盤類型,即使如此,也不能保證完全檢測正確。其他系統都當機械硬盤處理。所以,這兩個值的默認值是可能存在問題。而且這兩個值對性能影響很大,所以最好手工修正(官方文檔73頁)。
系統自動檢測的數據可以通過Metrics API獲取(solr.node:CONTAINER.fs.coreRoot.spins如果true表示是機械硬盤)。
建議: (一)最好在solrconfig.xml配置文件中根據你用的硬盤指定maxThreadCount和maxMergeCount兩個值。
? ? ? ? ? ? ?例如:?
????????????????<mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler">
????????????????? ? ?<int name="maxMergeCount">9</int>? --該行需自行在solrconfig.xml添加
????????????????? ? ?<int name="maxThreadCount">4</int>? --該行需自行在solrconfig.xml添加
????????????????</mergeScheduler>
? ? ? ? (二)?
????????????Alternatively, the boolean system property lucene.cms.override_spins can be set in the SOLR_OPTS
????????????variable in the include file to override the auto-detected value. Similarily, the system property
????????????lucene.cms.override_core_count can be set to the number of CPU cores to override the auto-detected
????????????processor count.
? ? ? ? ? ? 注釋: 可選擇的方法, 這里說可以在/etc/default/solr.in.sh文件中手動指定CPU數和硬盤類型。大概添加的內容如下(因為未找到,也未試過,建議用上面的方法):
? ? ? ? ? ? SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true" ---文件已有的內容
????????????SOLR_OPTS="$SOLR_OPTS -Dsolr.lucene.cms.override_spins=true" ---自己添加
????? ? ? ??SOLR_OPTS="$SOLR_OPTS -Dsolr.lucene.cms.override_core_count=2" --自己添加
? ?內存設置和垃圾回收(Memory and GC Settings)--Garbage Collection 垃圾回收
? ? 在/etc/default/solr.in.sh文件設置(默認為512M)
? ??SOLR_JAVA_MEM="-Xms512m -Xmx512m"---默認內容,可以根據實際情況修改,如改成10G: SOLR_JAVA_MEM="-Xms10g -Xmx10g"
? ? SOLR自帶了一組JAVA 垃圾回收的配置參數,對很多情況都比較合理,但對一些特別的SOLR情況,可能需要調整這些參數,就需要修改GC_TUNE變量在 /etc/default/solr.in.sh文件中。(JVM配置垃圾回收可以問其他人員)
? ?當OutOfMemoryError異常拋出,JVM會調用/opt/solr/bin/oom_solr.sh,這個腳本會發出kill -9命令,殺掉solr進程。這在SolrCloud mode模式是推薦的。可以看一下該腳本的內容,明白JVM出現異常后的的動作。
? ?JAVA JVM參數設置一般原則:
? ?-Xms指定初始化的堆大小 -Xmx指定堆的最大內存大小。當所需內存超過初始內存大小時,堆大小會慢慢自動擴展。
? ?根據應用實際所用內存,調大初始內存參數是合理的。因為初始大小較大,只會影響啟動速度(啟動時,初始化內存時慢些),卻可以避免后面的堆擴展,因為程序需要時再擴展,會引起應用等待。
? ? -Xmx的設置更關鍵,因為程序使用的內存超過這個值,對象創建可能會產生錯誤并拋出OutOfMemoryException.設置太大也會是不利的。
? ?當內存使用達到最大值參數時,垃圾回收機制會回收空閑內存,只有回收嘗試失敗時,才會向應用拋出異常。只要內存參數設置足夠大時,應用運行就不會出錯,如果頻繁強制內存垃圾回收時,系統運行將變得很慢(As long as the maximum is big enough, your app will run without error, but it may run more slowly if forced garbage collection kicks in frequently)。
? 內存堆越大,內存垃圾回收的時間也越長。更糟糕的是,還會出現隨機停頓,更嚴重的是,系統有時會停頓1分鐘甚至更多。------JAVA開發人員說JVM回收內存,是自動隔一段時間回收
? 當內存堆使用超過2G時(tow gigabytes)時,將會成為1個問題,即使操作系統還有很多可用內存。
? 如果操作系統資源有于,一般建議開多個JVMS,而不是一個JVM使用很大的內存(當然,可能有些JVM供應商,客制了一些特定的回收機制,能夠處理大內存堆)。
? 不要讓JVM使用操作系統的所有可用內存,因為操作系統會需要緩存文件句柄或做其他工作。盡量避免操作系統交換內存空間到磁盤,這會大大影響性能。
? ?對于讀寫頻繁的SOLR,要給操作系統留足夠多的內存。這個配置臨界值,最好經過多次實際的實驗。(1308頁)
??
? ?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。