上一章講了solr單機版的搭建,本章將講解sole集羣的搭建。solr集羣的搭建須要使用到zookeeper,搭建參見zookeeper集羣的安裝html
1、solr實例的搭建java
1. tomcat安裝web
這裏咱們須要4個tomcat,分別是tomcat1,2,3,4spring
同時修改tomcat1,2,3,4的端口爲8080-8083。保證兩個tomcat能夠正常運行不發生端口衝突。apache
2.解壓solr-4.10.3.tar.gz壓縮包。從壓縮包中複製/solr-4.10.3/dist/solr-4.10.3.war到tomcat1,並重命名爲solr.war。tomcat
3.啓動tomcat,解壓solr.war。解壓成功後關閉tomcat,刪除solr.war服務器
4.將solr日誌相關的jar包拷貝到解壓的solr項目的lib包中post
5.建立solrhome文件測試
這裏直接拷貝單機版中建立的solrhomeurl
6.修改tomcat1-4中的solr的web.xml對應的env-entry-value值爲/usr/local/solrcloud/solrhome1-4,指定對應的solrhome
7.其餘的配置參見solr單機版的搭建
2、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
查看主界面
3、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(); }
4、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的父類