Cluster Administration

To 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

Health

The 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();        
}

Get information for all indices

Access the cluster name

Get the total number of data nodes

Get the total number of nodes

Iterate over all indices

Index name

Number of shards

Number of replicas

Index status

Wait for status

You 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 company

Wait for the index being green

Prepare the health request for index employee

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"); 
}

Wait for the index being green

Throw an exception if not GREEN