Como pano de fundo, o Google usa o "Teorema do CAP de Brewer" - basicamente, diz que você não pode ter seu bolo replicável altamente disponível e consistente com a transação e comê-lo.
Existem muitas maneiras de fazer isso, e eu não acho que você tenha nos contado o suficiente para dar conselhos prescritivos, mas basicamente você pode fazer isso no aplicativo, no banco de dados ou no nível da VM.
Adicionar replicação ao aplicativo costuma ser difícil, por isso evite isso, se possível.
Se você optar por fazer isso no banco de dados:
A replicação transacional é ótima para a comprovação de cópias somente leitura em tempo real de seu banco de dados ativo. Ele permite que você selecione tabelas individuais, subconjuntos de todas as colunas e até mesmo filtragem de linha na publicação, resiliência a problemas de conectividade, vários assinantes e uma boa interface de gerenciamento. Existem alguns truques que você pode usar para habilitar o recurso de gravação limitada nos inscritos, mas eles são complicados.
A replicação de mesclagem fornece réplicas de vários mestres, mas possui requisitos de esquema onerosos, tem conflitos como parte de seu design e tem problemas de escalabilidade e confiabilidade em minha experiência. Evite.
Replicação ponto a ponto. Isso eu nunca usei, mas é construído sobre replicação transacional, por isso deve ser OK, mas a recomendação strong é permitir apenas atualizações em um único nó para evitar
O espelhamento de banco de dados é aplicável apenas em situações bem conectadas, ou seja, no mesmo data center. Na implementação padrão, se um membro do espelho falhar, as transações param para ambos. O espelhamento de transações síncronas também atrasa seu servidor de produção. Evite.
Sua pergunta não diz por que você deseja replicação - seja para desempenho ou tolerância a falhas ou o quê, mas eu recomendo que você considere se, por exemplo, uma instância do SQL Azure atenderá às suas necessidades.
Boa sorte.