欢迎访问小景哥哥博客:打开链接
1 Solr集群的架构
SolrCloud
需要用到solr+zookeeper
要完成的集群结构
2 Zookeeper
(1)、集群管理
主从的管理、负载均衡、高可用的管理。集群的入口。Zookeeper必须是集群才能保证高可用。Zookeeper有选举和投票的机制。集群中至少应该有三个节点。
(2)、配置文件的集中管理
搭建solr集群时,需要把Solr的配置文件上传zookeeper,让zookeeper统一管理。每个节点都到zookeeper上取配置文件。
(3)、分布式锁
3 集群需要的服务器
Zookeeper:3台
Solr:4台
伪分布式,zookeeper三个实例、tomcat(solr)需要四个实例。
Zookeeper需要安装jdk。
4 集群搭建步骤
第一部分:Zookeeper集群搭建
第一步:需要把zookeeper的安装包上传到服务器。
第二步:把zookeeper解压。
第三步:把zookeeper向/usr/local/solr-cloud目录下复制三份。
第三步:配置zookeeper。
1、在zookeeper01目录下创建一个data文件夹。
2、在data目录下创建一个myid的文件
3、Myid的内容为1(02对应“2”,03对应“3”)
4、Zookeeper02、03以此类推。
5、进入conf文件,把zoo_sample.cfg文件改名为zoo.cfg
6、修改zoo.cfg,把dataDir=属性指定为刚创建的data文件夹。
7、修改zoo.cfg,把clientPort指定为不冲突的端口号(01:2181、02:2182、03:2183)
8、在zoo.cfg中添加如下内容:
server.1=192.168.25.154:2881:3881
server.2=192.168.25.154:2882:3882
server.3=192.168.25.154:2883:3883
第四步:启动zookeeper。
Zookeeper的目录下有一个bin目录。使用zkServer.sh启动zookeeper服务。
启动:./zkServer.sh start
关闭:./zkServer.sh stop
查看服务状态:./zkServer.sh status
第二部分:搭建solr集群
第一步:安装四个tomcat,修改其端口号不能冲突。8080~8083
第二步:向tomcat下部署solr。把单机版的solr工程复制到tomcat下即可。
第三步:为每个solr实例创建一solrhome。
第四步:为每个solr实例关联对应的solrhome。修改web.xml
第五步:修改每个solrhome下的solr.xml文件。修改host、hostPort两个属性。分别是对应的ip及端口号。
第六步:把配置文件上传到zookeeper。需要使用
/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh命令上传配置文件。
把/usr/local/solr-cloud/solrhome01/collection1/conf目录上传到zookeeper。
需要zookeeper集群已经启动。
./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf
第七步:查看是否上传成功。
使用zookeeper的zkCli.sh命令。
第八步:告诉solr实例zookeeper的位置。需要修改tomcat的catalina.sh添加
JAVA_OPTS=”-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183”
每个节点都需要添加。
第九步:启动每个solr实例。
第十步:集群分片。
将集群分为两片,每片两个副本。
http://192.168.25.154:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
第十一步:删除不用collection1
http://192.168.25.154:8080/solr/admin/collections?action=DELETE&name=collection1
5 使用solrJ连接集群
@Test
public void testSolrClout() throws Exception {
//创建一个SolrServer对象
CloudSolrServer solrServer = new CloudSolrServer("192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183");
//设置默认的collection
solrServer.setDefaultCollection("collection2");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "test01");
document.addField("item_title", "title1");
//添加文档
solrServer.add(document);
//提交
solrServer.commit();
}
6 项目切换到集群
只需要在spring容器中配置一个集群版的SolrServer对象即可。