一、所需环境
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()后看查看到