How to Automatically Rebalance Shards when a New Node is Added?
Last updated 18, Apr 2024
Question
Is there any rladmin
command or procedure to re-balance a database when a node is added to a cluster?
While it is possible to migrate specific shards, is there some routine similar to the sparse policy when a clustered database is deployed?
Answer
Optimized distribution of the shards across the nodes, can be achieved using the REST API. The procedure to follow is:
- Enable sparse placement policy on the database
- Use the following commands to generate the blueprint
curl -l -k -u "<ADMIN_USERNAME>:<ADMIN_PASSWORD>" -X GET -H 'Content-type: application/json' "https://127.0.0.1:9443/v1/bdbs/10/actions/optimize_shards_placement"
This will indicate the optimal placement of the shards in the nodes. Check rladmin
and see if this differs from what you currently have. This blueprint can be applied to a database using the REST API bdbs endpoint. You will need to get the cluster-state-id
header from the GET
request and resubmit that in the header of this PUT request with the blueprint array as the value of shards_blueprint.
curl -l -k -u "<ADMIN_USERNAME>:<ADMIN_PASSWORD>" -X PUT -H 'Content-type: application/json' -d '{"shards_blueprint": XXX}' https://127.0.0.01:9443/v1/bdbs/10
Where the XXX
is the output of the previous GET
command
References
Refer to "Optimize shards placement database action requests"