一、所需環境
1、linux系統(內存分大點)
2、JDK
3、zookeeper
4、solr
二、安裝zookeeper
1、此次安裝3個zookeeper
2、tar -zxf zookeeper-3.4.6.tar.gz
3、在/usr/local/目錄下創建一個solrcloud目錄。把zookeeper解壓后的文件夾復制到此目錄下三份。分別命名為zookeeper1、2、zookeeper3
4、
[root@bogon ~]# mkdir /usr/local/solrcloud
[root@bogon ~]# mv zookeeper-3.4.6 /usr/local/solrcloud/zookeeper1
[root@bogon ~]# cd /usr/local/solrcloud
[root@bogon solrcloud]# ll
[root@bogon solrcloud]# cp -r zookeeper1 zookeeper2
[root@bogon solrcloud]# cp -r zookeeper1 zookeeper3
5、在每個zookeeper文件夾下創建一個data目錄,並在data文件夾下創建一個文件名稱為myid,文件的內容就是此zookeeper的編號1、2、3。
[root@bogon data]# echo 1 >> myid
[root@bogon data]# cat myid
1
6、在zookeeper2、3文件夾下分別創建data目錄和myid文件
[root@bogon solrcloud]# mkdir zookeeper2/data
[root@bogon solrcloud]# echo 2 >> zookeeper2/data/myid
[root@bogon solrcloud]# cat zookeeper2/data/myid
2
[root@bogon solrcloud]# mkdir zookeeper3/data
[root@bogon solrcloud]# echo 3 >> zookeeper3/data/myid
7、把zookeeper1下conf目錄下的zoo_sample.cfg文件復制一份改名為zoo.cfg
8、修改zoo.cfg的配置,其他的zookeeper的clientport遞增1,反正不同就可以。
9、啟動zookeeper:./zkServer.sh start
關閉:./zkServer.sh stop
查看狀態:./zkServer.sh status,其中的follower表示從節點,leader是主節點
[root@bogon solrcloud]# zookeeper1/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/solrcloud/zookeeper1/bin/../conf/zoo.cfg
Mode: follower
[root@bogon solrcloud]# zookeeper2/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/solrcloud/zookeeper2/bin/../conf/zoo.cfg
Mode: leader
[root@bogon solrcloud]# zookeeper3/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/solrcloud/zookeeper3/bin/../conf/zoo.cfg
Mode: follower
10、建立四個tomcat,端口改為8080~8083,每個tomcat都配置好solr,也就是四個solr,solr的配置請參考http://www.cnblogs.com/honger/p/5876289.html,最后目錄的結構是這樣的
11、把solrhome中的配置文件上傳到zookeeper集群。使用solr里的zookeeper的客戶端上傳。這個客戶端的位置在solr解壓后的solr-6.2.0/server/scripts/cloud-scripts/里的一個叫zkcli.sh的sell腳本
12、在solr-6.2.0/server/scripts/cloud-scripts/目錄下執行(注意,此時的zookeeper應當已經啟動)./zkcli.sh -zkhost 192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf
13、查看配置文件是否上傳成功,先進入zookeeper1的bin文件夾使用以下命令:
[root@bogon bin]# ./zkCli.sh
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf]
[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf
[admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]
[zk: localhost:2181(CONNECTED) 3]
如果可以看到solr的配置文件在,那就說明上傳成功了。
14、修改每個solrhome下的solr.xml文件,指定當前實例運行的ip地址及端口號8080~8083。
15、修改每一台solr的tomcat 的 bin目錄下catalina.sh文件中加入DzkHost指定zookeeper服務器地址:
JAVA_OPTS="-DzkHost=192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183"
JAVA_OPTS使用vim編輯器的查找功能找到修改。
16、啟動所有的tomcat,訪問其中一台tomcat,只有一片集群
17、變成多片集群,在你的瀏覽器中訪問
http://192.168.243.128:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
18、刪除collection1,在瀏覽器中輸入
http://192.168.243.128:8080/solr/admin/collections?action=DELETE&name=collection1,出現success表示成功。
三、使用java代碼訪問solr集群。
import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; public class SolrCloudTest { @Test public void test1() throws Exception { // 使用zookeeper的地址訪問 String zkHost = "192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183"; // 創建集群客戶端 CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build(); // 設置默認的索引庫 cloudSolrClient.setDefaultCollection("collection2"); // 設置document SolrInputDocument document = new SolrInputDocument(); // 創建這個document的結構 document.addField("id", "test001"); document.addField("name", "test"); // 添加內容 cloudSolrClient.add(document); // 提交 cloudSolrClient.commit(); } @Test public void delDocument() throws Exception { // 使用zookeeper的地址訪問 String zkHost = "192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183"; CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build(); cloudSolrClient.setDefaultCollection("collection2"); cloudSolrClient.deleteByQuery("*:*"); cloudSolrClient.commit(); } @Test public void query() throws Exception { // 使用zookeeper的地址訪問 String zkHost = "192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183"; CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build(); cloudSolrClient.setDefaultCollection("collection2"); SolrQuery query = new SolrQuery(); query.setQuery("*:*"); QueryResponse queryResponse = cloudSolrClient.query(query); SolrDocumentList list = queryResponse.getResults(); for (SolrDocument solrDocument : list) { String name = (String) solrDocument.get("name"); System.out.println(name); } cloudSolrClient.commit(); } }
運行test1()后看查看到