我一直在尝试实现 SolrCloud,一切正常,直到我尝试创建包含 6 个分片的集合。我的设置如下:
- 5 个虚拟服务器,全部运行 Ubuntu 14.04,由一家公司跨不同数据中心托管
- 为整体运行 ZooKeeper 3.4.6 的 3 台服务器
- 2台服务器,每台运行Solr 5.1.0服务器(Jetty)
- 每个 Solr 实例都有一个用于索引的 2TB ext4 辅助磁盘,安装在 /solrData/Indexes 处。我将此值设置为
solrconfig.xml
via <dataDir>/solrData/Indexes</dataDir>
,并将其上传到 ZooKeeper ensemble。请注意,这些辅助磁盘既不是 NAS 也不是 NFS,我知道这可能会导致问题。这solr
用户拥有/solrData
.
所有服务器内通信均通过私有 IP 进行,因为所有服务器均由同一家公司托管。我使用 iptables 作为防火墙,并且端口已打开并且所有服务器都可以成功通信。配置上传到 ZooKeeper 成功,我可以通过 Solr 管理界面看到两个节点都可用。
当我尝试使用以下命令创建集合时,问题就开始了:
http://xxx.xxx.xxx.xxx:8983/solr/admin/collections?action=CREATE&name=coll1&maxShardsPerNode=6&router.name=implicit&shards=shard1,shard2,shard3,shard4,shard5,shard6&router.field=shard&async=4444
通过 Solr UI 日志记录,我看到同时发出多个索引创建命令,如下所示:
6/25/2015, 7:55:45 AM WARN SolrCore [coll1_shard2_replica1] Solr index directory '/solrData/Indexes/index' doesn't exist. Creating new index...
6/25/2015, 7:55:45 AM WARN SolrCore [coll1_shard1_replica2] Solr index directory '/solrData/Indexes/index' doesn't exist. Creating new index...
最终任务被报告为完成,但在日志中,我有锁定错误:
Error creating core [coll1_shard2_replica1]: Lock obtain timed out: SimpleFSLock@/solrData/Indexes/index/write.lock
SolrIndexWriter was not closed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!
Error closing IndexWriter
如果我查看云图,可能会创建几个分片,其他分片已关闭或正在恢复,如果我重新启动 Solr,则没有一个核心可以启动。
现在,我知道你要说什么:跟随这个帖子 https://stackoverflow.com/questions/2895417/solrexception-internal-server-error/3035916#3035916并改变solrconfig.xml
锁定设置为此:
<unlockOnStartup>true</unlockOnStartup>
<lockType>simple</lockType>
我这样做了,并且没有任何影响。因此就有了这个问题。我即将不得不将单个 Solr 实例发布到生产中,但我讨厌这样做。有人知道如何解决这个问题吗?