Skip to content

Proposal: introduce dynamically scalable RAFT cluster. #355

@mzazaipsc

Description

@mzazaipsc

Currently, dynamic membership changes in the RAFT cluster are possible using the addServer() and removeServer() methods of RaftHandle.
However, this is only possible if the member to be added is already present in the leader’s member list, requiring a consistent membership list before a node can join.

This proposal introduces dynamic joining and leaving of members.

The resulting interface would, for example, add join(String clusterName) and leave() methods to the RaftHandle class.
join() would try to communicate the request to the leader of the cluster, and only return successfully after the leader has added and committed the updated membership list (using addServer()), otherwise fail with an explicit cause (e.g. TimeoutException).

Similarly, leave() would initiate removal, but would be less complex since the node is already part of the cluster.
The application code must then call leave() before a node shuts down, to avoid negatively impacting quorum.

Internally, RaftHandle would need to introduce some communication mechanism for non-member nodes - e.g. through a dedicated messaging channel with an identical cluster name.

I have a working proof-of-concept that would benefit from further refinement, which can be taken forward if the proposal is accepted.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions