Ответ
Этот процесс называется failover. При отказе Master-узла один из Slave-узлов автоматически или вручную выбирается в качестве нового Master.
В Go можно реализовать простой мониторинг и переключение с помощью health-check:
func promoteSlaveToMaster(slaves []*Slave) (*Slave, error) {
for _, slave := range slaves {
if slave.IsHealthy() {
slave.PromoteToMaster()
return slave, nil
}
}
return nil, errors.New("no healthy slaves available")
}
Ключевые моменты:
- Обычно используется алгоритм консенсуса (Raft, Paxos)
- Может быть автоматическим или ручным
- Важно избегать split-brain (когда два узла считают себя Master)