Solr集群配置
1 概述
Solr是以Lucene为基础实现的文本检索应用服务。而Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库。SolrCloud是基于Solr和Zookeeper的分布式搜索方案。当索引越来越大,一个单一的系统无法满足磁盘需求,查询速度缓慢,此时就需要分布式索引。在分布式索引中,原来的大索引,将会分成多个小索引,solr可以将这些小索引返回的结果合并,然后返回给客户端。
2 参数说明
集群包括以下参数:
Cluster集群:一组Solr节点,逻辑上作为一个单元进行管理,整个集群使用同一套Schema和SolrConfig
Node节点:一个运行Solr的JVM实例
Collection:在SolrCloud集群中逻辑意义上的完整的索引,常常被划分为一个或多个Shard。这些Shard使用相同的config set,如果Shard数超过一个,那么索引方案就是分布式索引。
Core:也就是Solr Core,一个Solr中包含一个或者多个SolrCore,每个Solr Core可以独立提供索引和查询功能,Solr Core额提出是为了增加管理灵活性和共用资源。SolrCloud中使用的配置是在Zookeeper中的,而传统的Solr Core的配置文件是在磁盘上的配置目录中。
Config Set:Solr Core提供服务必须的一组配置文件,每个Config Set有一个名字。必须包含solrconfig.xml和schema.xml,初次之外,依据这两个文件的配置内容,可能还需要包含其他文件。ConfigSet存储在Zookeeper中,可以重新上传或者使用upconfig命令进行更新,可以用Solr的启动参数bootstrap_confdir进行初始化或者更新。
Shard分片:Collection的逻辑分片。每个Shard被分成一个或者多个replicas,通过选举确定那个是Leader。
Replica:Shard的一个拷贝。每个Replica存在于Solr的一个Core中。
Leader:赢得选举的Shard replicas,每个Shard有多个replicas,这几个Replicas需要选举确定一个Leader。选举可以发生在任何时间。当进行索引操作时,SolrCloud将索引操作请求传到此Shard对应的leader,leader再分发它们到全部Shard的replicas。
3 逻辑视图
4 集群配置
4.1 下载
Solr下载:http://archive.apache.org/dist/lucene/solr/
Tomcat下载:http://tomcat.apache.org/
Zookeeper下载:http://www.apache.org/dyn/closer.cgi/zookeeper/
4.2 配置
该集群配置是在单机配置的基础上进行的,solr的一些基础配置这里就不做具体说明了,只记录集群需要的配置,
关于tomcat单机配置可以参考:http://blog.csdn.net/vtopqx/article/details/76165305
操作的是windows下solr集群配置,Linux下配置也是类似的。
数量1:zookeeper
数量3:solr
数量3:tomcat(需要tomcat8以上版本)
Zookeeper没有做集群,采用单机Zookeeper进行管理solr
目录如下:
4.2.1 Solr配置
1、修改Solr的web.xml引用路径
进入:G:\solr_cloud\tomcat1\webapps\solr\WEB-INF
修改web.xml,去掉<env-entry>注释,配置相应solr_home路径;
分别对剩下的tomcatX下solr都进行相应solr_home路径配置。
2、修改solr_home下solr.xml配置tomcat端口路径
进入:G:\solr_cloud\solr_home1\solr
修改solr.xml,分别修改为相应的端口和ip
分别对剩下的solr_home进行tomcat对应配置。
4.2.2 tomcat配置
配置tomcat连接zookeeper
进入tomcat目录:G:\solr_cloud\tomcat1\bin 修改catalina.bat
先设置leader节点,新增
setJAVA_OPTS=-Dbootstrap_confdir=G:\solr_cloud\solr_home1\solr\test_core\conf-Dcollection.configName=clustercore -DzkRun -DzkHost=localhost:2181-DnumShards=2
如下图:
分别对剩下的tomcat进行非leader配置:
set JAVA_OPTS=-DzkRun-DzkHost=localhost:2181 -DnumShards=2
其中-DzkHost=localhost:2181为zookeeper默认端口连接
参数说明:
-Dbootstrap_confdir ZooKeeper需要准备一份集群配置的副本,这个参数是告诉SolrCloud这些配置是放在哪里,同时作为整个集群共用的配置文件。
-Dcollection.configName 指定你的配置文件上传到zookeeper后的名字,建议和你所上传的核心名字一致,这样容易识别。
-DzkRun 在Solr中启动一个内嵌的zooKeeper服务器,该服务会管理集群的相关配置。
-DzkHost 跟上面参数的含义一样,允许配置一个ip和端口来指定用哪个Zookeeper服务器进行协调。
-DnumShards=2 配置需要把你的数据分开到多少个shard中
-Dbootstrap_conf=true 将会上传solr/home里面的所有数据到zookeeper的home/data目录,也就是所有的core将被集群管理。
4.2.3 zookeeper配置
1、 进入zookeeper根目录,创建data空文件夹;
2、 配置zoo.cfg
进入:G:\solr_cloud\zookeeper-3.4.8\conf
配置dataDir目录为上一步创建的data目录路径
4.2.4 启动服务
1、 先启动zookeeper服务:
进入G:\solr_cloud\zookeeper-3.4.8\bin
启动:zkServer.cmd
2、 依次启动tomcat
进入tomcat\bin
启动:startup.bat
成功启动各个服务后,登录http://localhost:8080/solr/admin.html, 或者登录其他tomcat端口也可以,
可以看到Cloud已经部署成功了,在live_nodes下有三个solr节点
4.2.5 创建core
启动服务之后在平台页面,打开Graph关系图界面查看还是空的,那是因为Solr实例中还没有创建Core,所以在这不显示(PS:当初我在部署的时候出现这情况纠结了很久,为什么不出现关系图,网上各种找资料,基本上没有人遇到过…后面巧合之下创建了core就可以有关系图出来了)
打开Core Amin进行创建Core,所创建的Core将存放在tomat所对应的solr_home下
插一个可能遇到的问题,
如果刚创建完Core之后马上去Query查询数据,会遇到错误,提示 No Servers hosting shard:shardX,
这是因为之前我们配置的时候设置了-DnumShards=2,所以单是创建一台机的Core是无法查询的
因此:
分别访问剩下的tomcat页面并创建Core,注意Core的名称需要一致
http://localhost:8081/solr/admin.html
http://localhost:8082/solr/admin.html
创建完成后,再次刷新页面查看Graph关系图,可以看到三台机均已关联上。同时查询数据也可以查询出来了。
4.3 测试
所谓测试,这里主要进行下简单测试:
4.3.1 测试数据
随便登录一台机器Solr
比如:http://localhost:8080/solr/admin.html
登录之后,添加数据
在任意一台机器上往core添加数据后,到其他其他机器上均可以查看到数据。
4.3.2 测试宕机
主要测试下把机器下线或者关闭,看zookeeper的切换情况:
1、试着把8080的tomcat机器关闭,关闭之后,刷新界面可以看到集群关系图中,已经变成了灰色,同时将8082自动替换成leader,同时查看8082的tomcat日志可以看到有替换信息:
2、将8080重新启动,可以看到之前8082已经变成leader了,所以8080启动后只是作为Replica从机的角色,如下图:
至此Solr集群配置完毕,上面只是做了简单的一些测试,后续将对一些参数及术语进行记录。