O Round Robin DNS não resolverá seu problema - é uma ótima maneira de fornecer balanceamento de carga de servidores Web - mas o failover ocorre quando o cliente tenta se conectar a uma porta e não recebe resposta (em seguida, tenta testar o próxima entrada DNS para o host). Obviamente, se o banco de dados MySQL falhar, isso não terá impacto direto no servidor da Web (ou seja, o servidor responderá às solicitações TCP).
Embora seja possível, em princípio, obter o código PHP para detectar uma falha no banco de dados e desligar o servidor web ou bloquear conexões de entrada - essa é uma abordagem perigosa - mesmo que sua hospedagem permita que isso aconteça.
A única maneira prática que posso pensar para lidar com esse cenário é redirecionar para um nome de host específico no caso de uma detecção de falha, por isso, se você tiver os dois hosts configurados como www.example.com, adicione registros para www1.example.com e www2.example.com e adicione um arquivo de inclusão com prefixo automático para fazer algo como:
(on www1.example.com)
check_db();
// if check_db returns, then continue with normal processing...
function check_db() {
if (request is for www.example.com) { // avoid loops when both sites fail
if (last check more than 10 secs ago) {
if (database status bad) {
raise a database failed flag on the filesystem
redirect to www2.example.com
end
}
} else {
if (database failed flag set) {
redirect to www2.example.com
end
}
return OK
}
} else { // request is for www1.example.com i.e. we are already in failover mode
if (database failed flag set) && (last check more than 5 secs ago) {
if (database status good) {
remove database failed flag
return OK
} else { // oh no! both hosts down!
print sorry message and exit
}
} else if (last check more than 5 secs ago) {
if (database status bad) {
raise a database failed flag on the filesystem
print sorry message and exit
}
}
}
return OK
}
No entanto, você ainda precisa testar se o banco de dados está funcionando sem usar uma chamada de bloqueio.
HTH
C.