Solrcloud Zookeper 设置:等待 4000 毫秒后未找到注册领导者,集合:c1 切片:shard2
Solrcloud Zookeper Setup : No registered leader was found after waiting for 4000ms , collection: c1 slice: shard2
我正在使用 solr 4.10.3,我在 java 中通过嵌入式码头服务器启动 solr。我正在尝试使用 2 个分片(领导者)配置 solrcloud。我有一个外部 zookeeper 设置,我在像这样启动 solr 时指向 zookeeper 实例。
System.setProperty("zkHost", "192.168.2.21:2111");
System.setProperty("numShards", "2");
System.setProperty("collection.configName", "configuration1");
System.setProperty("bootstrap_confdir","/conf/zooconf");
我有两个 solr 实例 运行,一个在 8983 端口,另一个在 8984。问题是,我不确定两个 solr 节点是否都被识别为领导者。由于我通过 java 启动 solr,我无法在 solr admin UI.
中查看状态
以下是我的 solr.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">192.168.2.21</str>
<int name="hostPort">${hostPort:8984}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${solr.zkclienttimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:120000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
</solr>
在主要方法中,我连接到其中一个 solr 实例 (8983) 并使用以下代码片段创建核心。
CloudSolrServer server = new CloudSolrServer("192.168.2.21:2111");
server.setZkConnectTimeout(15*60*1000);
server.setZkClientTimeout(15*60*1000);
server.setParser(new BinaryResponseParser());
server.setRequestWriter(new BinaryRequestWriter());
server.setDefaultCollection("C1");
Create adminRequest = new Create();
adminRequest.setAction(CoreAdminAction.CREATE);
adminRequest.setCoreName("C1");
adminRequest.setCollection("C1");
adminRequest.setCollectionConfigName("configuration1");
adminRequest.setDataDir("c:\setup\somelocation");
adminRequest.setInstanceDir("c:\setup\somelocation\C1");
adminRequest.process(solrServer);
当我执行此操作时,C1 仅在一个 solr 实例 (8983) 中创建。 ( 核心不应该在两个 solr 实例的数据目录中创建。?)。添加文档时,抛出以下异常。
No registered leader was found after waiting for 4000ms , collection: c1 slice: shard2
这是添加文档时的clusterState :
live nodes:[192.168.2.21:8984_solr, 192.168.2.21:8983_solr] collections: {
C1=DocCollection(C1)= {
"shards":{
"shard1":{
"range":"80000000-ffffffff",
"state":"active",
"replicas":{
"core_node1":{
"state":"active",
"core":"C1",
"node_name":"192.168.2.21:8983_solr",
"base_url":"http://192.168.2.21:8983/solr",
"leader":"true"
}
}
},
"shard2":{
"range":"0-7fffffff",
"state":"active",
"replicas":{
}
}
},
"maxShardsPerNode":"1",
"router":{
"name":"compositeId"
},
"replicationFactor":"1",
"autoAddReplicas":"false",
"autoCreated":"true"
}
}
如果我在添加文档之前在另一个 solr 实例 (8984) 中创建核心,它工作正常。文档被索引并分布在 2 个分片之间。我做错了什么吗?请帮帮我。
提前致谢..
我在创建 adminRequest 时添加了以下几行,它起作用了
adminRequest.setPath("/admin/collections");
adminRequest.setNumShards(2);
以前它无法正常工作,因为默认路径指向旧的 api“/admin/cores”。我们需要确保在 adminRequest 对象中为 New Collection API.[=12= 中提到的 solrcloud 操作提供了新的 api 路径“/admin/collections” ]
我正在使用 solr 4.10.3,我在 java 中通过嵌入式码头服务器启动 solr。我正在尝试使用 2 个分片(领导者)配置 solrcloud。我有一个外部 zookeeper 设置,我在像这样启动 solr 时指向 zookeeper 实例。
System.setProperty("zkHost", "192.168.2.21:2111");
System.setProperty("numShards", "2");
System.setProperty("collection.configName", "configuration1");
System.setProperty("bootstrap_confdir","/conf/zooconf");
我有两个 solr 实例 运行,一个在 8983 端口,另一个在 8984。问题是,我不确定两个 solr 节点是否都被识别为领导者。由于我通过 java 启动 solr,我无法在 solr admin UI.
中查看状态以下是我的 solr.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">192.168.2.21</str>
<int name="hostPort">${hostPort:8984}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${solr.zkclienttimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:120000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
</solr>
在主要方法中,我连接到其中一个 solr 实例 (8983) 并使用以下代码片段创建核心。
CloudSolrServer server = new CloudSolrServer("192.168.2.21:2111");
server.setZkConnectTimeout(15*60*1000);
server.setZkClientTimeout(15*60*1000);
server.setParser(new BinaryResponseParser());
server.setRequestWriter(new BinaryRequestWriter());
server.setDefaultCollection("C1");
Create adminRequest = new Create();
adminRequest.setAction(CoreAdminAction.CREATE);
adminRequest.setCoreName("C1");
adminRequest.setCollection("C1");
adminRequest.setCollectionConfigName("configuration1");
adminRequest.setDataDir("c:\setup\somelocation");
adminRequest.setInstanceDir("c:\setup\somelocation\C1");
adminRequest.process(solrServer);
当我执行此操作时,C1 仅在一个 solr 实例 (8983) 中创建。 ( 核心不应该在两个 solr 实例的数据目录中创建。?)。添加文档时,抛出以下异常。
No registered leader was found after waiting for 4000ms , collection: c1 slice: shard2
这是添加文档时的clusterState :
live nodes:[192.168.2.21:8984_solr, 192.168.2.21:8983_solr] collections: {
C1=DocCollection(C1)= {
"shards":{
"shard1":{
"range":"80000000-ffffffff",
"state":"active",
"replicas":{
"core_node1":{
"state":"active",
"core":"C1",
"node_name":"192.168.2.21:8983_solr",
"base_url":"http://192.168.2.21:8983/solr",
"leader":"true"
}
}
},
"shard2":{
"range":"0-7fffffff",
"state":"active",
"replicas":{
}
}
},
"maxShardsPerNode":"1",
"router":{
"name":"compositeId"
},
"replicationFactor":"1",
"autoAddReplicas":"false",
"autoCreated":"true"
}
}
如果我在添加文档之前在另一个 solr 实例 (8984) 中创建核心,它工作正常。文档被索引并分布在 2 个分片之间。我做错了什么吗?请帮帮我。
提前致谢..
我在创建 adminRequest 时添加了以下几行,它起作用了
adminRequest.setPath("/admin/collections");
adminRequest.setNumShards(2);
以前它无法正常工作,因为默认路径指向旧的 api“/admin/cores”。我们需要确保在 adminRequest 对象中为 New Collection API.[=12= 中提到的 solrcloud 操作提供了新的 api 路径“/admin/collections” ]