SolrCloud相关配置和本地实现(三)
文档
- solr-cloud模型+zk
https://blog.csdn.net/makang110/article/details/53032458
SolrCloud集群的优点
自动容错且修复
SolrCloud对索引分片,并对每个分片创建多个Replication。每个 Replication都可以对外提供服务。一个Replication挂掉不会影响索引服务。更强大的是,它还能自动的在其它机器上帮你把失败机器上的索引Replication重建并投入使用。查询时自动负载均衡
SolrCloud索引的多个Replication可以分布在多台机器上,均衡查询压力。如果查询压力大,可以通过扩展机器,增加Replication来减缓。虽然有概率所有的查询还是在一个solr里做的,但是概率不高。而且扩展性很好集中式的配置信息
使用ZK进行集中配置。启动时可以指定把Solr的相关配置文件上传 Zookeeper,多机器共用。这些ZK中的配置不会再拿到本地缓存,Solr直接读取ZK中的配置信息。配置文件的变动,所有机器都可以感知到。另外,Solr的一些任务也是通过ZK作为媒介发布的。目的是为了容错。接收到任务,但在执行任务时崩溃的机器,在重启后,或者集群选出候选者时,可以再次执行这个未完成的任务。
原理
- 每个solr结点都保有一份独立完整的存储索引,只是该索引被切分成N份shard,查询索引的时候是不同shard各自匹配数据。就好比一个班级切分成男、女两个分片,找张三的话,要分别在男人和女人名单上找。找到所有叫张三的人。
- 导入文档创建索引的时候,任意一个Replica收到请求会交给该shard的leader,leader再告知各位弟兄和自己一起创建索引(理论上3个创建的一样的索引)
- 可以分裂,缓存查询等
- zk扮演的角色:选举leader(多个replica中要选举出一个leader)和配置中心(打通各solrNode)、监控中心(掐掉挂了的Node、定时检查异常Node是否恢复正常)
zookeeper的安装和日志配置
windows下的启动: C:\huangzs\install\zookeeper-3.4.10\bin\zkServer.cmd
日志的配置
C:\huangzs\install\zookeeper-3.4.10\conf\log4j.propertieslog4j.rootLogger=INFO, CONSOLE, ROLLINGFILElog4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppenderlog4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}log4j.appender.ROLLINGFILE.File=../zklog/zookeeper.log
zk伪集群的创建
https://blog.csdn.net/makang110/article/details/53032458
- 在zk文件夹路径下创建 data文件夹,和zklog文件夹
- 在data文件夹下创建myid文件,按照节点分别myid里面填写1、 2 、3 为3个id
- 在conf/cfg下配置相关信息tickTime=2000initLimit=10syncLimit=5dataDir=../datadataLogDir=../zklogclientPort=2181server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890
solr_node的配置
搜索引擎配置注意事项
- 只有等zookeeper集群启动正常后再去启动solr_tomcat
- 只有solr_node1的tomcat的bin下的catelina.sh 里面需要配置-DnumShards=2 ,其它node不能配置
- 必须严格按照node的顺序挨个启动solr_tomcats,
这样才会对应上 shard1 8880(node1)、 shard2 9880 (node2)、shard3 10880 (node3)、
shard1 replica 11880 (node4)、shard2 replica 12880(node5) 、shard3 13880(node6)
配置不同tomcat的监听端口
C:\huangzs\java\solr-cloud\tomcat-solr-2\conf\server.xml
端口: 8088 8298 8188 8198
配置 catelina.bat启动参数(JDK 1.7至少)
windows环境下,单zookeeper的配置,配置的是catelina.bat文件
set JAVA_OPTS= -DzkRun -DzkHost=localhost:2181 -Dbootstrap_conf=true -DnumShards=2#zookeeper集群下的配置set JAVA_OPTS= -DzkHost=localhost:2181,localhost:2182,localhost:2183 -Dbootstrap_conf=true -DnumShards=2linux环境下,zookeeper集群的solr启动配置,配置的是catelina.sh文件
JAVA_HOME="../../../jdk1.7.0_67"JAVA_OPTS="-Dbootstrap_conf=true -DzkHost=localhost:2181,localhost:2182,localhost:2183 -DnumShards=3"Dbootstrap_confdir :zooKeeper需要准备一份集群配置的副本,所以这个参数是告诉SolrCloud这些 配置是放在哪里。同时作为整个集群共用的配置文件
Dcollection.configName 是在指定你的配置文件上传到zookeeper后的名字,建议和你所上传的核心名字一致,这样容易识别,当然你也可以在满足规范的情况下自己起名。
Dbootstrap_conf=true将会上传solr/home里面的所有数据到zookeeper的home/data目录,也就是所有的core将被集群管理
DnumShards=2 配置你要把你的数据分开到多少个shard中
配置jetty的监听端口
必须和该tomcat的端口一致,
/usr/developer/solr-cloud/solr-tomcats/solr-tomcat-2/solr
Solrj和spring集成
需要根据版本 依赖 solrJ、solr-core、zookeeper等jar包,配置的形式也不同
碰到的问题
zookeeper报错 len error,单node存储的空间超过默认的1M
- Ansj分词文件 default.dic 太大(5M)左右,而zookeeper默认的加载方式是把整个conf路径下的所有文件,不管用不用的到的都加载进 zk的节点当中,导致 len error。解决方案就是把 default.dic移动到其他路径下面,指向,则一切恢复正常,还可以save zk的内存空间Exception causing close of session 0x36367f063f60008 due to java.io.IOException: Len error 5908094
SolrCloud的迁移
思路:直接重装一套zookeeper-3.4.6.tar.gz,清空solr内容后启动正常再importdata
重装zookeeper集群:
- 添加myid文件
- 修改zoo.cfg文件
- 修改zkServer.sh 里面的单结点最大值的限制
重新copy solr,且清空data文件夹,按照顺序启动
copy源端的collection1下面除了data里面的内容,其他全部复制到文件夹,覆盖掉每个solr的节点的对应文件夹,一定要按照顺序启动solr-tomcat。只有solr_node1的tomcat的bin下的catelina.sh 里面需要配置-DnumShards=3 ,其它node不能配置,第一个启动web端显示正常连接后,再在界面显示正常后,再启动第二个solr,这样才会对应上 shard1 8880(node1)、 shard2 9880 (node2)、shard3 10880 (node3)、
shard1 replica 11880 (node4)、shard2 replica 12880(node5) 、shard3 13880(node6)
修改配置后,数据重新导入
修改data-config.xml里面的数据源,数据库授权之后,重新import数据