Provavelmente, existem outras maneiras de fazer isso, mas a melhor maneira, na minha opinião, seria o cluster MSSQL para a parte do banco de dados. Normalmente, um conjunto de servidores da Web com balanceamento de carga ignora o armazenamento em cluster do banco de dados, mas isso pode mudar dependendo do seu aplicativo. A maioria dos aplicativos possui chamadas individuais discretas para dados, portanto, nunca há nenhuma preocupação em estar conectado a um servidor de banco de dados diferente, desde que o mesmo conjunto de dados exista.
Quando você diz que os bancos de dados são espelhados, exatamente como eles são espelhados? Uma configuração mais fácil e comum é, na verdade, apenas ter um armazenamento de dados compartilhado que falha com o cluster. Isso provavelmente não é tão tolerante a falhas quanto algumas opções espelhadas, mas o espelhamento insere mais variáveis. (Quão frequente é espelhado, qual é a carga gerada pelo espelhamento constante, etc)