1. 程式人生 > >solr叢集配置中遇到的問題及說明

solr叢集配置中遇到的問題及說明

引數說明:
#######################################zoo.cfg的配置########################################################  


# 心跳檢查的時間 2秒 zookeeper中使用的基本時間單位, 毫秒值 
tickTime=2000  


# 初始化時 連線到伺服器端的間隔次數,總時間10*2=20秒
#zookeeper叢集中的包含多臺server, 其中一臺為leader, 叢集中其餘的server為follower。
#initLimit引數配置初始化連線時, follower和leader之間的最長心跳時間. 
#此時該引數設定為5, 說明時間限制為5倍tickTime, 即5*2000=10000ms=10s.
initLimit=10  


# ZK Leader 和follower 之間通訊的次數,總時間5*2=10秒   
#該引數配置leader和follower之間傳送訊息, 請求和應答的最大時間長度. 
#此時該引數設定為2, 說明時間限制為2倍tickTime, 即4000ms
syncLimit=5  


# 儲存記憶體中資料庫快照的位置,如果不設定引數,更新事務日誌將被儲存到預設位置。  
dataDir=F:\\zk\\tmp\\zookeeper  


# 錯誤日誌的存放位置  
dataLogDir=F:\\zk\\logs\\zookeeper  


# ZK 伺服器端的監聽埠
#多個zookeeper伺服器都安裝在同一個伺服器上,需保證clientPort不相同
clientPort=2181  


# 偽叢集   
#2887 是server 之間通訊的,3887 是應用程式通訊的  
# 同時加入其他兩個服務的地址和埠資訊  
#server.X=A:B:C 其中X是一個數字, 表示這是第幾號server. 
#A是該server所在的IP地址. 
#B配置該server和叢集中的leader交換訊息所使用的埠. 
#C配置選舉leader時所使用的埠. 
#由於配置的是偽叢集模式, 所以各個server的B, C引數必須不同.
server.1=127.0.0.1:2887:3887   
server.2=127.0.0.1:2888:3888   
server.3=127.0.0.1:2889:3889 


#######################################tomcat的catalina.bat的配置###########################################


引數說明:
-DzkRun  在Solr中啟動一個內嵌的zooKeeper伺服器,該服務會管理叢集的相關配置。單機版(測試)使用,如果是叢集,用下面的-DzkHost來替換,含義一樣
例如:
JAVA_OPTS="$JAVA_OPTS -DzkRun  -Dbootstrap_conf=true -DnumShards=2"


-DzkHost 跟上面引數的含義一樣,允許配置一個ip和埠來指定用那個zookeeper伺服器進行協調
例如:
JAVA_OPTS = "$JAVA_OPTS 
-DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181
-Dbootstrap_conf=true
-DnumShards=2"


-Dbootstrap_confdir  zooKeeper需要準備一份叢集配置的副本,所以這個引數是告訴SolrCloud這些配置是放在哪裡,同時作為整個叢集共用的配置檔案


-Dcollection.configName 是在指定你的配置檔案上傳到zookeeper後的名字,建議和你所上傳的核心名字一致,這樣容易識別,當然你也可以在滿足規範的情況下自己起名


-bootstrap_conf=true將會上傳solr/home裡面的所有資料到zookeeper的home/data目錄,也就是所有的core將被叢集管理


-DnumShards=2 配置你要把你的資料分開到多少個shard中


-Djetty.port =8080 這個埠跟你所在埠保持一致,這個就是jetty的監聽埠,實現叢集之間進行通訊的,如果這個埠不這樣配置,那麼就是搜尋不到資料
當然這個引數也可以再solr/home/solr.xml下面配置:如下所示
<solrcloud>
    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8080}</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>
預設是8983,如果在catalina.sh中指定了,會覆蓋上圖solr.xml中配置的


注意:
-DnumShards, -Dbootstrap_confdir和-Dcollection.configName引數只需要在第一次將Solr執行在SolrCloud模式的時候宣告一次。
它們可以把你的配置載入到zooKeeper中;
如果你在日後重新聲明瞭這些引數重新運行了一次,將會重新載入你的配置,這樣你在原來配置上所做的一些修改操作可能會被覆蓋。
所以官方推薦只在第一個tomcat裡面加入這幾個引數,其他叢集的tomcat裡面不加,啟動的第一個Solr的埠號,它是你的SolrCloud叢集的overseer節點






************************************************************************************************************
概念說明:
zookeeper 偽叢集
上面例子我們看到,如果我們的監控室也停電了,那不是就監測不到KTV情況了?一般情況下,zk 也是作為分散式部署了,也就是有多臺監控,
由於監控多了,肯定要有一定為準(比如直播會有一些延遲),就要涉及到選舉的演算法,這裡暫時不介紹。
先搭建一個偽叢集,因為機器不夠,只能再一臺機器上模擬搭建,整個過程無非是將上面的一些配置copy 幾份,然後配置不同的 地址和埠就行。


SolrCloud 是基於Solr和Zookeeper的分散式搜尋方案,它的主要思想是使用Zookeeper作為叢集的配置資訊中心。


它有幾個特色功能:


1)集中式的配置資訊


2)自動容錯


3)近實時搜尋


4)查詢時自動負載均衡


************************************************************************************************************
注意事項:
如果叢集中節點的ip地址變更後,會遇到在管理頁面的cloud中,ip還有以前的ip,狀態是gone,這個時候需要把zookeeper中的一些資料刪除掉


************************************************************************************************************
問題1:


<lst name="responseHeader">
  <int name="status">503</int>
  <int name="QTime">78</int>
  <lst name="params">
    <str name="indent">true</str>
    <str name="q">*:*</str>
    <str name="_">1438759262278</str>
    <str name="wt">xml</str>
  </lst>
</lst>
<lst name="error">
  <str name="msg">no servers hosting shard: </str>
  <int name="code">503</int>
</lst>
</response>


問題2.
no registered leader was found after waiting for 4000ms


問題3.
NumberFormatException:forInputString:"java.math.BigDecimal:2"




目前多個zookeeper配置已經成功,單個zookeeper配置還是有問題