上一章講了solr單機版的搭建,本章將講解sole集群的搭建。solr集群的搭建需要使用到zookeeper,搭建參見zookeeper集群的安裝
一、solr實例的搭建
1. tomcat安裝
這里我們需要4個tomcat,分別是tomcat1,2,3,4
同時修改tomcat1,2,3,4的端口為8080-8083。保證兩個tomcat可以正常運行不發生端口沖突。
2.解壓solr-4.10.3.tar.gz壓縮包。從壓縮包中復制/solr-4.10.3/dist/solr-4.10.3.war到tomcat1,並重命名為solr.war。
3.啟動tomcat,解壓solr.war。解壓成功后關閉tomcat,刪除solr.war
4.將solr日志相關的jar包拷貝到解壓的solr項目的lib包中
5.創建solrhome文件
這里直接拷貝單機版中創建的solrhome
6.修改tomcat1-4中的solr的web.xml對應的env-entry-value值為/usr/local/solrcloud/solrhome1-4,指定對應的solrhome
7.其他的配置參見solr單機版的搭建
二、solr集群的搭建
1.把solrhome中的配置文件上傳到zookeeper集群。使用zookeeper的客戶端上傳。
使用solr安裝包中的/opt/mysoft/solr-4.10.3/example/scripts/cloud-scripts中的zkcli.sh
運行命令
./zkcli.sh -zkhost 192.168.198.130:2181,192.168.198.130:2182,192.168.198.130:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf
查看運行是否成功,使用zookeeper中的腳本
2.修改solrhome1-4下的solr.xml文件,指定當前實例運行的ip地址及端口號8080-8083。
3.修改每一台solr的tomcat 的 bin目錄下catalina.sh文件中加入DzkHost指定zookeeper服務器地址:
JAVA_OPTS="-DzkHost=192.168.198.130:2181,192.168.198.130:2182,192.168.198.130:2183"
4.重啟tomcat
查看運行結果
5.創建一個兩片的collection,每片是一主一備
http://192.168.198.130:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
回到主界面查看
6.刪除collection1
http://192.168.198.130:8080//solr/admin/collections?action=DELETE&name=collection1
查看主界面
三、java測試代碼
@Test public void testAddDocument() throws Exception { //創建一個和solr集群的連接 //參數就是zookeeper的地址列表,使用逗號分隔
String zkHost = "192.168.198.130:2181,192.168.198.130:2182,192.168.198.130:2183"; CloudSolrServer solrServer = new CloudSolrServer(zkHost); //設置默認的collection
solrServer.setDefaultCollection("collection2"); //創建一個文檔對象
SolrInputDocument document = new SolrInputDocument(); //向文檔中添加域
document.addField("id", "test001"); document.addField("item_title", "測試商品"); //把文檔添加到索引庫
solrServer.add(document); //提交
solrServer.commit(); } @Test public void queryDocument() throws Exception{ //創建一個和solr集群的連接 //參數就是zookeeper的地址列表,使用逗號分隔
String zkHost = "192.168.198.130:2181,192.168.198.130:2182,192.168.198.130:2183"; CloudSolrServer solrServer = new CloudSolrServer(zkHost); //設置默認的collection
solrServer.setDefaultCollection("collection2"); solrServer.deleteByQuery("*:*"); solrServer.commit(); }
四、spring集成
<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer"> <constructor-arg name="zkHost" value="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"></constructor-arg> <property name="defaultCollection" value="collection2"></property>
</bean>
java代碼使用方法不變,因為SolrServer是CloudSolrServer的父類