A method of managing a distributed computing system including a plurality of servers organized in a cluster and a plurality of client devices operable to connect to the cluster and issue requests to the servers, each said server including first processing resources including at least one first processor and a first memory, each client device including second processing resources including at least one second processor and a second memory, one of the servers being elected as a leader and being responsible for maintaining consensus information among the other servers, the consensus information including data indicating a shared operating state of the servers in the cluster, which server in the plurality of servers is elected as the leader, and which client device(s) is/are eligible to vote, wherein the shared operating state relates to requests issuable by the client devices, the method comprising, for each said server:
- determining whether a new leader election is to take place;
- and
- in response to a determination that a new leader election is to take place:
- requesting votes for a new leader from the other server(s) in the plurality of servers;
- receiving any votes sent from other server(s);
- requesting votes for a new leader from the client device(s) that is/are eligible to vote as indicated in the consensus information;
- receiving any votes from the client device(s) that is/are eligible to vote;
- determining whether the respective server has won the election by receiving a clear majority of votes cast, including votes cast by the client device(s) that is/are eligible voters;
- and
- responsive to a determination that the respective server has won the election with a clear majority of votes cast, including votes cast by the client device(s) that is/are eligible voters, distributing consensus information to the other server(s) about the respective server now being the leader.