Solr集羣
Solr集羣的架構
SolrCloud
需要用到solr+zookeeper
要完成的集羣結構
Zookeeper
1、集羣管理
主從的管理、負載均衡、高可用的管理。集羣的入口。Zookeeper必須是集羣才能保證高可用。Zookeeper有選舉和投票的機制。集羣中至少應該有三個節點。
2、配置文件的集中管理
搭建solr集羣時,需要把Solr的配置文件上傳zookeeper,讓zookeeper統一管理。每個節點都到zookeeper上取配置文件。
3、分佈式鎖
4、忘了
集羣需要的服務器
Zookeeper:3臺
Solr:4臺
僞分佈式,zookeeper三個實例、tomcat(solr)需要四個實例。
Zookeeper需要安裝jdk。
集羣搭建步驟
第一部分:Zookeeper集羣搭建
第一步:需要把zookeeper的安裝包上傳到服務器。
第二步:把zookeeper解壓。
第三步:把zookeeper向/usr/local/solr-cloud目錄下複製三份。
第三步:配置zookeeper。
1、在zookeeper01目錄下創建一個data文件夾。
2、在data目錄下創建一個myid的文件
3、Myid的內容爲1(02對應“2”,03對應“3”)
4、Zookeeper02、03以此類推。
5、進入conf文件,把zoo_sample.cfg文件改名爲zoo.cfg
6、修改zoo.cfg,把dataDir=屬性指定爲剛創建的data文件夾。
7、修改zoo.cfg,把clientPort指定爲不衝突的端口號(01:2181、02:2182、03:2183)
8、在zoo.cfg中添加如下內容:
server.1=192.168.25.154:2881:3881
server.2=192.168.25.154:2882:3882
server.3=192.168.25.154:2883:3883
第四步:啓動zookeeper。
Zookeeper的目錄下有一個bin目錄。使用zkServer.sh啓動zookeeper服務。
啓動:./zkServer.sh start
關閉:./zkServer.sh stop
查看服務狀態:./zkServer.sh status
第二部分:搭建solr集羣
第一步:安裝四個tomcat,修改其端口號不能衝突。8080~8083
第二步:向tomcat下部署solr。把單機版的solr工程複製到tomcat下即可。
第三步:爲每個solr實例創建一solrhome。
第四步:爲每個solr實例關聯對應的solrhome。修改web.xml
第五步:修改每個solrhome下的solr.xml文件。修改host、hostPort兩個屬性。分別是對應的ip及端口號。
第六步:把配置文件上傳到zookeeper。需要使用
/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh命令上傳配置文件。
把/usr/local/solr-cloud/solrhome01/collection1/conf目錄上傳到zookeeper。
需要zookeeper集羣已經啓動。
./zkcli.sh -zkhost 192.168.11.134:2181,192.168.11.134:2182,192.168.11.134:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf |
第七步:查看是否上傳成功。
使用zookeeper的zkCli.sh命令。
第八步:告訴solr實例zookeeper的位置。需要修改tomcat的catalina.sh添加
JAVA_OPTS="-DzkHost=192.168.11.134:2181,192.168.11.134:2182,192.168.11.134:2183"
每個節點都需要添加。
第九步:啓動每個solr實例。
第十步:集羣分片。
將集羣分爲兩片,每片兩個副本。
http://192.168.11.134:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
第十一步:刪除不用collection1
http://192.168.11.134:8080/solr/admin/collections?action=DELETE&name=collection1
使用solrJ連接集羣
@Test public void testSolrClout() throws Exception { //創建一個SolrServer對象 CloudSolrServer solrServer = new CloudSolrServer("192.168.11.134:2181,192.168.11.134:2182,192.168.11.134:2183"); //設置默認的collection solrServer.setDefaultCollection("collection2"); //創建一個文檔對象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", "test01"); document.addField("item_title", "title1"); //添加文檔 solrServer.add(document); //提交 solrServer.commit(); } |
項目切換到集羣
只需要在spring容器中配置一個集羣版的SolrServer對象即可。
以上,完成自己利用阿里雲服務器搭建的一個僞集羣,也算是模擬一下,供大家學習參考