利用内置的jetty+zookeeper搭建solrcloud集群服务环境
Jetty-solrcloud
Jetty集群不用搭建,使用内嵌的zookeeper,使用solr的example示例即可运行,本例实现运行三个node的solrcloud,新建一个文件夹命名为jettycloud,将example全部内容拷贝到该目录下三份,分别重新命名为node1,node2,node3
1、启动node1的jetty服务,cmd当前node1目录下执行如下命令:
java -DzkRun -DnumShards=2 -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -jar start.jar
然后访问 http://localhost:8983/solr/#/~cloud
单独的服务,8983为solr默认的端口,执行结果为collection1->shard1->172.20.163.63
Shard2
2、启动node2的jetty服务,cmd当前node2目录下执行如下命令:
java -Djetty.port=7574 -DzkHost=localhost:9983 -jar start.jar
注:需要更换jetty的端口号,避免冲突,和指定zk的端口
参数说明:
-Djetty.port:设置这个参数的原因是我们在同一台计算机上运行服务,不能使用Jetty的默认端口了,默认端口已经被node1占了,随便选一个和默认端口不一样的端口。当在不同的计算机上启动的时候,也可以使用一样的端口。
-DzkHost:这个参数告诉solr去哪里找ZooKeeper服务,默认情况下,ZooKeeper服务工作在solr端口加1000的那个端口上。jetty默认端口是8983,那么ZooKeeper的服务端口就是9983.
执行结果为:collection1->shard1->172.20.163.63:8983
Shard2->172.20.163.63:7574
Shard3
3、启动node3的jetty服务,cmd当前node2目录下执行如下命令:
java -Djetty.port=8584 -DzkHost=localhost:9983 -jar start.jar
执行结果为:collection1->shard1->172.20.163.63:8983
Shard2->172.20.163.63:7574
Shard3->172.20.163.63:8584
默认设置为-DnumShards=2,所以最多为2个shard,当启动两个jetty服务时,生成shard1和shard2,每个分支有一个活动的服务,并且为主服务,当再增加服务时,依次向shard1和shard2添加服务,个数始终保持平衡
4、还可以按照zookeeper ensemble集群
执行
java -DzkRun -DnumShards=2
-Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar
java -Djetty.port=7574 -DzkRun -DnumShards=2 -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar
java -Djetty.port=8900 -DzkRun -DnumShards=2 -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar
注:zookeeper按照jetty的端口号自动加1000