solr叢集配置中遇到的問題及說明
阿新 • • 發佈:2019-02-07
引數說明:
#######################################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配置還是有問題
#######################################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配置還是有問題