Cluster Administration
editCluster Administration
editTo access cluster Java API, you need to call cluster()
method from an AdminClient
:
ClusterAdminClient clusterAdminClient = client.admin().cluster();
In the rest of this guide, we will use client.admin().cluster()
.
Cluster Health
editHealth
editThe cluster health API allows to get a very simple status on the health of the cluster and also can give you some technical information about the cluster status per index:
ClusterHealthResponse healths = client.admin().cluster().prepareHealth().get(); String clusterName = healths.getClusterName(); int numberOfDataNodes = healths.getNumberOfDataNodes(); int numberOfNodes = healths.getNumberOfNodes(); for (ClusterIndexHealth health : healths.getIndices().values()) { String index = health.getIndex(); int numberOfShards = health.getNumberOfShards(); int numberOfReplicas = health.getNumberOfReplicas(); ClusterHealthStatus status = health.getStatus(); }
Wait for status
editYou can use the cluster health API to wait for a specific status for the whole cluster or for a given index:
client.admin().cluster().prepareHealth() .setWaitForYellowStatus() .get(); client.admin().cluster().prepareHealth("company") .setWaitForGreenStatus() .get(); client.admin().cluster().prepareHealth("employee") .setWaitForGreenStatus() .setTimeout(TimeValue.timeValueSeconds(2)) .get();
Prepare a health request |
|
Wait for the cluster being yellow |
|
Prepare the health request for index |
|
Wait for the index being green |
|
Prepare the health request for index |
|
Wait for the index being green |
|
Wait at most for 2 seconds |
If the index does not have the expected status and you want to fail in that case, you need to explicitly interpret the result:
ClusterHealthResponse response = client.admin().cluster().prepareHealth("company") .setWaitForGreenStatus() .get(); ClusterHealthStatus status = response.getIndices().get("company").getStatus(); if (!status.equals(ClusterHealthStatus.GREEN)) { throw new RuntimeException("Index is in " + status + " state"); }