1. solr集群原理
2. SolrCloud概念以及结构
2.1 概念
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。
2.2 结构
SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。
SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。
3. solr集群搭建
3.1 创建solr-cluster目录
在/usr/local/src下创建solr-cluster目录
3.2 单机版的solr到该目录下
copy单机版的solr到该目录下,即:copy tomcat到该目录下
3.3 copy solr home到该目录下
3.4 删除solr home下的数据
3.5 修改tomcat下solr的home
3.6 zookeeper管理配置文件
由于zookeeper统一管理solr的配置文件(主要是schema.xml、solrconfig.xml), solrCloud各各节点使用zookeeper管理的配置文件。也就是将solr home目录下的conf里的所有配置文件上传到zookeeper中。
这里我们通过solr提供的zkCli.sh进行上传
执行如下脚本:
sh /usr/local/src/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.200.128:2181,192.168.200.128:2182,192.168.200.128:2183 -cmd upconfig -confdir /usr/local/src/solr-4.10.3/example/solr/collection1/conf/ -confname myconf -solrhome /usr/local/src/solr-4.10.3/example/solr
3.7 查看文件是否上传成功
进入zookeeper任意的bin目录下
3.8 将solr与zookeeper进行关联
将solr与zookeeper进行关联,即将solr交给zookeeper进行管理,在tomcat的bin目录下修改catalina.sh
JAVA_OPTS="-DzkHost=192.168.200.128:2181,192.168.200.128:2182,192.168.200.128:2183"
3.9 修改SolrCloud监控端口
修改solrhome下的solr.xml文件
3.10 依次copy 三份solr home
注意:修改solrCloud的端口分别为8081、8082、8083.
修改solr.xml中的端口
3.3.11 依次copy 三份tomcat
注意:
1、指定solr home的位置
2、修改tomcat的端口号,分别为:8081、8082、8083
3.12 solr分片配置
numShards=2
name=collection1
shard=shard1
coreNodeName=core_node1
以上参数说明
numShards=2 //分片数量
name=collection1 //core名称
shard=shard1 //所属分片
coreNodeName=core_node1 //结点名称
192.168.200.128:8080 片1 1节点
192.168.200.128:8081 片1 2节点
192.168.200.128:8082 片2 3节点
192.168.200.128:8083 片2 4节点
192.168.200.128:8080 片1 1节点
192.168.200.128:8081 片1 2节点
192.168.200.128:8082 片2 3节点
192.168.200.128:8083 片2 4节点
3.13 分别启动tomcat并测试
4. Solr的集群版Java接口
//集群版 Solr测试
@Test
public void testSolrCloud() throws Exception {
//配置三台zk的IP
String zkHost = "192.168.200.128:2181,192.168.200.133:2181,192.168.200.134:2181";
//创建集群版客户端
CloudSolrServer solrServer = new CloudSolrServer(zkHost);
//设置collection1
solrServer.setDefaultCollection("collection1");
//保存数据
//创建一个存储数据的Solr对象
SolrInputDocument doc = new SolrInputDocument();
//保存ID
doc.setField("id", 4);
//保存Name
doc.setField("name", "我是中国人");
//保存数据
solrServer.add(doc);
//手动提交
solrServer.commit();
}
4.1 集群版Java接口交由Spring管理
<!-- 配置集群版的CloudSolrServer -->
<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
<!-- 设置请求路径 连接三台zkHost -->
<constructor-arg index="0" value="192.168.200.128:2181,192.168.200.133:2181,192.168.200.134:2181"/>
<!-- 设置默认的collection1 -->
<property name="defaultCollection" value="collection1"/>
</bean>