注:有些内容是转载参考的,博主这里也没有搭建solr集群,搭建比较复杂,博主这里暂时没有足够时间去进行操作。等以后有时间或者是项目上有需要再继续编辑。这里也仅提供一种搭建的思路。具体需要你自己去实战操作。
什么是SolrCloud
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使 用SolrCloud来满足这些需求。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
1.1 Zookeeper是个什么玩意?
顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。
Solr集群的结构
Solr集群的搭建
本教程的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生产环境,将伪集群的ip改下就可以了,步骤是一样的。
SolrCloud结构图如下:
需要三个zookeeper节点
四个solr节点。
solr集群是基于zookeeper集群的:所以需要先安装zookeeper集群:博主这里有介绍,博文链接:https://blog.csdn.net/qq_30764991/article/details/81662876
linux安装单机版的solr:https://blog.csdn.net/qq_30764991/article/details/81607619
建议先把单机版本的弄熟悉,掌握的透彻,建议再去可以练习集群。
注:以下内容是转载的,博主这里也没有搭建solr集群,搭建比较复杂,博主这里暂时没有足够时间去进行操作。等以后有时间或者是项目上有需要再继续编辑。这里也仅提供一种搭建的思路。具体需要你自己去实战操作。
solr集群的搭建
6.1 第一步
把solrhome中的配置文件上传到zookeeper集群。使用zookeeper的客户端上传。
客户端命令位置:/root/solr-4.10.3/example/scripts/cloud-scripts
./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf
红色字体部分的ip表示zookeeper集群的ip地址以及对应的端口。
查看配置文件是否上传成功:
[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]
6.2 第二步
修改solrhome下的solr.xml文件,指定当前实例运行的ip地址及端口号。
6.3 第三步
修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址:
JAVA_OPTS="-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" 红色字体的ip表示zookeeper集群的ip以及端口号
(可以使用vim的查找功能查找到JAVA_OPTS的定义的位置,然后添加)
6.4 第四步
重新启动tomcat
一个主节点多个备份节点,集群只有一片。
6.5 第五步
创建一个两片的collection,每片是一主一备。
使用以下命令创建:
http://192.168.25.154:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
6.6 第六步
删除collection1.
http://192.168.25.154:8080/solr/admin/collections?action=DELETE&name=collection1
7 Solr集群的使用
使用solrj操作集群环境的索引库。
7.1 Solrj测试
1 public class SolrCloudTest { 2 3 @Test 4 public void testAddDocument() throws Exception { 5 //创建一个和solr集群的连接 6 //参数就是zookeeper的地址列表,使用逗号分隔 7 String zkHost = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"; 8 CloudSolrServer solrServer = new CloudSolrServer(zkHost); 9 //设置默认的collection 10 solrServer.setDefaultCollection("collection2"); 11 //创建一个文档对象 12 SolrInputDocument document = new SolrInputDocument(); 13 //向文档中添加域 14 document.addField("id", "test001"); 15 document.addField("item_title", "测试商品"); 16 //把文档添加到索引库 17 solrServer.add(document); 18 //提交 19 solrServer.commit(); 20 } 21 22 @Test 23 public void deleteDocument() throws SolrServerException, IOException { 24 //创建一个和solr集群的连接 25 //参数就是zookeeper的地址列表,使用逗号分隔 26 String zkHost = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"; 27 CloudSolrServer solrServer = new CloudSolrServer(zkHost); 28 //设置默认的collection 29 solrServer.setDefaultCollection("collection2"); 30 31 32 solrServer.deleteByQuery("*:*"); 33 solrServer.commit(); 34 } 35 }
7.2 Solrj和spring集成
修改spring的配置文件,添加集群版的配置:
1 <!-- 集群版 --> 2 <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer"> 3 <constructor-arg name="zkHost" value="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"></constructor-arg> 4 <property name="defaultCollection" value="collection2"></property> 5 </bean>