Solr API用于获取分片的领导者/副本状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr API用于获取分片的领导者/副本状态相关的知识,希望对你有一定的参考价值。
Solr有一个Admin UI,我们可以在其中检查部署到Solr Cloud的每个集合。例如,我可以在集合中看到Slice / Shard,如下面的URL中所述。
出于安全原因,我们的生产环境不提供对此管理UI的访问。我需要提供一个API来获取每个集合的状态,以及它的分片和每个分片的副本。我正在使用Solr API来做到这一点
http://lucene.apache.org/solr/4_7_2/solr-solrj/index.html
CloudSolrServer server = new CloudSolrServer(<zk quorum>);
ZkStateReader reader = server.getZkStateReader();
Collection<Slice> slices = reader.getClusterState().getSlices(collection);
Iterator<Slice> iter = slices.iterator();
while (iter.hasNext()) {
Slice slice = iter.next();
System.out.println(slice.getName());
System.out.println(slice.getState());
}
上面的代码总是仅作为分片的状态返回Active,甚至它的副本在UI中显示。我假设这只返回分片的状态,而不是分片的领导者或副本的状态。
如何通过Solr API获取副本状态?这有什么API吗? Solr Admin UI正在使用什么API来获取分片的副本/领导者状态?
谢谢
答案
代码不是在查看副本状态。这是打印副本状态的一个:
CloudSolrServer server = new CloudSolrServer(zknodesurlstring);
server.setDefaultCollection("mycollection");
server.connect();
ZkStateReader reader = server.getZkStateReader();
Collection<Slice> slices = reader.getClusterState().getSlices("mycollection");
Iterator<Slice> iter = slices.iterator();
while (iter.hasNext()) {
Slice slice = iter.next();
for(Replica replica:slice.getReplicas()) {
System.out.println("replica state for " + replica.getStr("core") + " : "+ replica.getStr( "state" ));
System.out.println(slice.getName());
System.out.println(slice.getState());
}
}
另一答案
检查http://{ipaddress}:{port}/solr/admin/info/system
另一答案
浏览Web界面时查看Solr日志。由于Web界面纯粹是客户端应用程序,因此您可以查看它查询的Solr服务器上的哪些端点,以检索有关群集当前状态的信息。
用于创建图形的响应格式可能非常简单(因为它在Web界面中进行了解析)。
这也适用于Admin界面中显示的其他信息。
以上是关于Solr API用于获取分片的领导者/副本状态的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch yellow 意味着主分片可用,副本不可用