O que você quer dizer com 'dados espelhados'?
Você pode ter espelhamento de banco de dados, caso em que o cliente (ou seja, seu DAL) pode usar o FailoverPartner na cadeia de conexão e seguir o evento de failover e se conectar ao novo principal. Seu relatório seria executado em instantâneos de banco de dados, não no próprio banco de dados, pois o espelho não está disponível.
Você pode ter um cluster de failover e o cliente se conecta ao nome do recurso do cluster para começar e ele não está ciente do nome do host do nó ativo para começar, mas isso não dá acesso a dados no parceiro em espera.
Você pode ter o espelhamento de hardware, mas esse é um tópico separado.
Alguns dizem que a replicação é uma opção, não estou nesse campo.
E ... praticamente é isso. Curta de fabricar sua própria tecnologia de espelhamento de dados interna, o que quer que isso signifique.
Atualizado
Se você usar o Espelhamento de banco de dados, basta especificar o parceiro de failover na cadeia de conexão, consulte Conectando clientes a um banco de dados espelhado . Seu aplicativo deve manipular consistência transacional em face de eventos de failover. O evento de failover desconectará abruptamente os clientes e uma exceção será levantada no código do cliente. Qualquer transação pendente será anulada. O código do cliente deve se reconectar, ler o estado persistente e retomar o trabalho a partir do estado encontrado no banco de dados. Aplicações escritas corretamente irão lidar com isso graciosamente e sem problemas.
O espelho está sempre offline e não pode ser acessado. Se você quiser executar relatórios no espelho, deverá fazer um instantâneo do banco de dados e executar os relatórios no instantâneo. O instantâneo deve ser periodicamente atualizado (descartado e recriado). Veja Espelhamento de banco de dados e instantâneos do banco de dados .
Os balanceadores de carga da camada de rede não têm nada a ver com o espelhamento e não resolvem nada.