Solr12-SolrCloud部署中的常见问题及解决方法

目录

  • 1 ZooKeeper管理配置文件的另一种方法
  • 2 Solr服务不能访问
  • 3 部分或全部节点处于”Recovering”或”Gone”状态
  • 4 SolrCloud模式下, 启动Tomcat服务耗时太久
  • 5 其他问题(尚未验证, 请存疑)

1 ZooKeeper管理配置文件的另一种方法

不通过Solr的example/scripts/cloud-scripts/zkcli.sh工具管理配置文件, 而是在Tomcat的catalina.sh文件中定义启动参数:

vim /data/solr-cloud/tomcat/ apache-tomcat-8.0.53/bin/catalina.sh
# 在cygwin=false(大约109行)之前加入如下设置: 
JAVA_OPTS="$JAVA_OPTS -DzkHost=zoo1:2181,zoo2:2181,zoo3:2181 -Dbootstrap_confdir=/data/solr-cloud/tomcat/solrhome/collection1/conf -Dcollection.configName=myconf -DnumShards=3"
  • 参数解释:

-Dnumshareds=3: 用来指定当前集群中分片数为3;

-Dcollection.configName: 指定配置文件上传到ZooKeeper后的名字, 省略将默认为"configuration1";

-Dbootstrap_confdir: 指定所有的索引库都从此目录下的配置文件中同步配置, ZooKeeper将此路径下的配置文件上传至自己的配置中心进行统一管理.

-Djetty.port=8080: Jetty的监听端口, 要与Tomcat的端口保持一致, 用来实现集群间的通信, 如果配置错误, 集群将搜索不到数据.在这里(catalina.sh文件中)指定后, 就会覆盖solr.xml文件中的配置.

  • 注意:

-Dbootstrap_confdir、-DnumShards和-Dcollection.configName三个参数只需要在第一次运行SolrCloud模式时进行声明, 配置信息将加载至ZooKeeper中; 以后如果更改了这些参数, 就需要再运行一次, ZooKeeper将会更新相关配置.

为了防止配置信息被改动, 建议只在某一台Tomcat的catalina.sh中加入这些参数, 其他集群的Tomcat中不添加.

2 Solr服务不能访问

  • 问题描述:
  • 启动Tomcat后, Tomcat管理页面可以显示, Solr服务却不能访问.
  • 解决思路:
  • 这里通过Tomcat的虚拟路径发布Solr服务, 稍有不慎就会出错. 可查看$TOMCAT_HOME/logs下的日志信息, 查找错误原因.
  • 博主遇到的是:
  • solr.xml文件没有添加到solrhome下, 导致Tomcat启动时无法加载Solr应用, 日志中提示缺少solr.xml文件, 上传此文件后重启Tomcat, 服务正常.
  • 其他思路:
  • 实在无法定位问题原因, 可从头再捋一遍部署过程. 上述过程博主已实际操作过了, 如有问题可留言或者邮件联系博主, 会回复你的~

3 部分或全部节点处于”Recovering”或”Gone”状态

  • 问题描述:
  • Solr管理页面出现了[Cloud]入口, 查看时发现部分节点未能正常启动.
  • 解决思路:
  • 博主在仔细捋了一遍部署过程后, 发现问题来自于ZooKeeper管理了2套配置文件. 因为部署过程中比较坎坷, 在尝试通过 solr-4.10.4/example/scripts/cloud-scripts/zkcli.sh 命令删除配置文件失败后, 果断关掉Tomcat服务和ZooKeeper服务, 手动删除 ZooKeeper/data/version-2 和 ZooKeeper/datalog/version-2 文件, 注意不要删除 data/myid . 这2个目录存储的是ZooKeeper管理的配置文件信息. 删除后重新启动ZooKeeper集群, 再次通过 solr-4.10.4/example/scripts/cloud-scripts/zkcli.sh 命令上传配置文件, 然后启动各台Tomcat, 最后问题解决.
  • 最后查得通过命令删除配置文件的方式如下:
[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper, overseer, aliases.json, live_nodes, collections, overseer_elect, clusterstate.json]
[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf, conf]
[zk: localhost:2181(CONNECTED) 2] rmr /configs/conf
[zk: localhost:2181(CONNECTED) 3] ls /configs
[myconf]

4 SolrCloud模式下, 启动Tomcat服务耗时太久

  • 问题描述:
  • 重启Tomcat服务时, 需要很长的时间才能访问Solr集群.
  • 问题解决:
  • 修改任一分机下SolrCore的conf/solrconfig.xml文件, 注释约655-670行的监听器, 取消Tomcat的启动检查:
<!-- QuerySenderListener takes an array of NamedList and executes a
 local query request for each NamedList in sequence. 
 -->
 <listener event="newSearcher" class="solr.QuerySenderListener">
 <arr name="queries">
 <!--
 <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
 <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
 -->
 </arr>
 </listener>
 <listener event="firstSearcher" class="solr.QuerySenderListener">
 <arr name="queries">
 <lst>
 <str name="q">static firstSearcher warming in solrconfig.xml</str>
 </lst>
 </arr>
 </listener>
  • 然后更新配置文件, 再次启动Tomcat服务, 问题得到解决.

5 其他问题(尚未验证, 请存疑)

1) Solr4.0的AdminGUI中可以增加和删除Core, 如果Shard中的最后一个Core被删除, Shard是不会自动删除的, 这将导致集群出错;

2) 某个Shard中所有的Core宕机了, 会导致不能继续插入新的记录, 查询也将出错;

3) Core在Shard中扮演Leader或Replication, 是由Solr内部自动协调的, 目前没有找到人工干预的方法.

Solr12-SolrCloud部署中的常见问题及解决方法

相关推荐