Você pode querer dar uma olhada no couchdb que implementa o repositório de chaves replicadas com uma API memcache. Ele também gerencia o estouro do armazenamento de memória mais facilmente do que a maioria das implementações do memcache (um resultado provável durante o failover). Devo admitir que não estou familiarizado com os detalhes de como isso implementa a replicação.
Todas as implementações de sessões "fixas" que vi ligam a solicitação a um dispositivo explícito - o que não faz um bom failover - e com o PHP a afinidade de sessão é relevante apenas para o substrato de armazenamento (diferente de Java onde geralmente precisa estar no nível lógico). Portanto, usar sessões fixas na camada HTTP é irrelevante.
Certamente, usar a replicação assíncrona do MySQL no substrato não é trivial devido ao atraso de replicação e operações de gravação de thread único - eu uso um broker de conexão no PHP (que implementa preferências e bloqueia durante failover) para resolver isso. Embora o MySQL não seja a solução mais eficiente para manipulação de sessão, se seus aplicativos já estão contando com um banco de dados relacional de alta disponibilidade, faz muito sentido usá-lo para armazenamento de sessão. Existem implementações de replicação multimestre para o MySQL - por exemplo, Percona.
O MongoDB também usa replicação assíncrona, mas sem a dependência de um único segmento do MySQL.
Você terá que gastar algum tempo pensando em como você delimita os nós. O controle de endereço virtual (se implementado corretamente) deve tornar a operação transparente, mas o IME pode ser difícil de acertar e precisa assumir o endereço arp, bem como o endereço IP, para evitar grandes pausas durante o failover.
Say 3, 5, 10? For future scaling
Se você planeja escalar até esse ponto, provavelmente deveria estar pensando em vários datacenters - o que implica em um método de sincronização que pode lidar com baixa largura de banda / maior latência, ou seja, não um sistema de arquivos compartilhado.