Contents
  1. 1. 文档
  2. 2. SolrCloud集群的优点
  3. 3. 原理
  4. 4. zookeeper的安装和日志配置
    1. 4.1. zk伪集群的创建
  5. 5. solr_node的配置
    1. 5.1. 搜索引擎配置注意事项
    2. 5.2. 配置不同tomcat的监听端口
    3. 5.3. 配置 catelina.bat启动参数(JDK 1.7至少)
    4. 5.4. 配置jetty的监听端口
  6. 6. Solrj和spring集成
  7. 7. 碰到的问题
    1. 7.1. zookeeper报错 len error,单node存储的空间超过默认的1M
  8. 8. SolrCloud的迁移
    1. 8.1. 重装zookeeper集群:
    2. 8.2. 重新copy solr,且清空data文件夹,按照顺序启动
    3. 8.3. 修改配置后,数据重新导入
    4. 8.4. 其它备用方案(用一个单节点来实现solr的功能)

文档

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.properties

    log4j.rootLogger=INFO, CONSOLE, ROLLINGFILE
    log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
    log4j.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=2000
    initLimit=10
    syncLimit=5
    dataDir=../data
    dataLogDir=../zklog
    clientPort=2181
    server.1=127.0.0.1:2888:3888
    server.2=127.0.0.1:2889:3889
    server.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=2
  • linux环境下,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

<solr>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:8088}</int>

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数据

其它备用方案(用一个单节点来实现solr的功能)

Contents
  1. 1. 文档
  2. 2. SolrCloud集群的优点
  3. 3. 原理
  4. 4. zookeeper的安装和日志配置
    1. 4.1. zk伪集群的创建
  5. 5. solr_node的配置
    1. 5.1. 搜索引擎配置注意事项
    2. 5.2. 配置不同tomcat的监听端口
    3. 5.3. 配置 catelina.bat启动参数(JDK 1.7至少)
    4. 5.4. 配置jetty的监听端口
  6. 6. Solrj和spring集成
  7. 7. 碰到的问题
    1. 7.1. zookeeper报错 len error,单node存储的空间超过默认的1M
  8. 8. SolrCloud的迁移
    1. 8.1. 重装zookeeper集群:
    2. 8.2. 重新copy solr,且清空data文件夹,按照顺序启动
    3. 8.3. 修改配置后,数据重新导入
    4. 8.4. 其它备用方案(用一个单节点来实现solr的功能)