ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操做。java
集群管理 主从的管理、负载均衡、高可用的管理。集群的入口。Zookeeper必须是集群才能保证高可用。Zookeeper有选举和投票的机制。集群中至少应该有三个节点。web
配置文件集中管理 搭建solr集群时,须要把Solr的配置文件上传zookeeper,让zookeeper统一管理。每一个节点都到zookeeper上取配置文件。shell
下载 ZooKeeperapache
上传 ZooKeeper 到服务器(sftp 或 lrzsz 工具)浏览器
将 ZooKeeper 解压tomcat
把 zookeeper 向 /usr/local/solr-cloud 下复制三份,分别命名为 zookeeper0一、zookeeper0二、zookeeper03。bash
配置 zookeeper。服务器
在 zookeeper01 目录下建立一个 data 文件夹负载均衡
在 data 目录下建立一个 myid 文件分布式
myid 的内容 为 1。(02 对应 “2”,03 对应 “3”)。
zookeeper0二、03 以此类推。
进入 conf ,将 zoo_sample.cfg 改名为 zoo.cfg。
修改 zoo.cfg
server.1=192.168.126.128: 2881:3881
server.2=192.168.126.128: 2882:3882
server.3=192.168.126.128: 2883:3883
复制代码
启动 zookeeper 使用 zookeeper 目录中 bin 目录下的 zkServer.sh,分别启动三个 zookeeper。 启动: ./zkServer.sh start 中止:./zkServer.sh stop 查看状态 ./zkServer.sh status
安装4个 tomcat,编辑 server.xml,修改端口 8081-8084。
向 tomcat 部署 solr。(细节可参考以前的博客)
为每个 solr 实例建立 solrhome。
编辑 web.xml ,将每一个 solr 实例和对应的 solrhome 关联
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr-cloud/solrhome1</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
复制代码
<solrcloud>
<str name="host">${host:192.168.126.128}</str>
<int name="hostPort">${jetty.port:8081}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
复制代码
./zkcli.sh -zkhost 192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome1/collection1/conf -confname myconf
复制代码
./zkCli.sh #便可链接上 zookeeper 集群
复制代码
而后就能够查看集群上文件
JAVA_OPTS="-DzkHost=192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183"
复制代码
每一个节点都要添加。
分别启动每一个 solr 实例
集群分片 将集群分为两片,每片两个副本。在浏览器地址栏访问:
http://192.168.126.128:8081/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
复制代码
获得以下结果,则分片成功。
刷新 solr cloud 页面。
http://192.168.126.128:8081/solr/admin/collections?action=DELETE&name=collection1
复制代码
@Test
public void testSolrClout() throws Exception {
//建立一个SolrServer对象
CloudSolrServer solrServer = new CloudSolrServer("192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183");
//设置默认的collection
solrServer.setDefaultCollection("collection2");
//建立一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "test01");
document.addField("item_title", "title1");
//添加文档
solrServer.add(document);
//提交
solrServer.commit();
}
复制代码
<bean id ="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
<constructor-arg name="zkHost" value="192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183"/>
<property name="defaultCollection" value="collection2"/>
</bean>
复制代码