Não posso comentar especificamente sobre a 3PAR, mas tenho muita experiência com os arrays EMC Symmetrix.
Meu conselho seria: encontrar outro caminho. A replicação síncrona é uma dessas tecnologias que parecem ótimas no papel e, em circunstâncias ideais, mas no mundo real causam grandes quantidades de dor.
A maneira como funciona é:
- gravação recebida insere o cache na matriz.
- gravação é copiada em um link síncrono para um site remoto.
- a gravação está comprometida com o cache no array remoto.
- o reconhecimento é enviado de volta ao primário.
- o sucesso do IO de gravação é reconhecido como host.
É 'RPO 0' no sentido de que, SE FOR EM DISCO, está no site remoto. A maioria dos aplicativos usa cache de memória, que será perdido em um DR. No entanto, isso tem um preço significativo:
-
Você precisa de largura de banda total suficiente para o seu site remoto e sempre terá o suficiente para atender aos requisitos de replicação - se não o fizer, seus sistemas primários sofrerão muito, porque a latência do disco aumentará drasticamente. Se você alguma vez saturar este link, você sofrerá e seu serviço principal poderá falhar.
-
Você sempre terá uma carga de latência e seu desempenho sofrerá como resultado.
Agora, pode ser que ambas as coisas estejam "bem". Na minha experiência, porém, o RPO0 e a 'replicação de sincronização' são geralmente discutidos apenas quando você tem coisas realmente importantes.
Para responder às suas perguntas diretamente:
Does the SAN deny data writes to the I/O until synchronisation has completed?
Não - ele vai "pegar" em assíncrono, antes de entrar no modo de sincronização. Isso pode demorar um pouco dependendo do bandwdith, e até que ele seja sincronizado, você não tem o seu '0 RPO'.
If a link is severed, does the SAN buffer the block changes until the connection is restored?
Depende um pouco da sua configuração. Geralmente, ele tratará o link suspenso / retomado como um evento que precisa ser sincronizado novamente. Embora o link esteja "fora", seu RPO não é mais zero. Você pode "bloquear" o IO em uma falha de link, mas isso provavelmente causará falha no seu aplicativo.
If a link is severed during a TL log write, and a DR occurs, doesn't this mean that we will have a potentially corrupt TL written to the secondary site, and therefore incur data loss? The data loss is only because the primary was able to commit, but the secondary was not able to synchronise.
Não - sincronia significa sincronização. Se você estiver em sincronia, o IO no disco também estará no controle remoto. Qualquer IO não no disco é perdido, assim você pode perder seus últimos translogs.
Is RPO of zero ever a guarantee across the stack (SQL Server / Memory / Network / SAN / IO)?
O RPO é o objetivo do ponto de recuperação. Se o seu objetivo é (verdadeiramente) zero, então ... você precisa pensar muito sobre sua arquitetura. É alcançável, mas é incrivelmente caro.
Pessoalmente, sugiro que, em vez de sincronizar:
Execute seus datastores primários como assíncronos e confie em seus registros para fornecer o bit "sync". Seu 'RPO0' - praticamente falando - será apenas 'seu commitog' de qualquer maneira. Portanto, o NFS (CIFS?) Monta uma unidade remota e grava você na rede, bem como no armazenamento 'local', e os reproduz no seu banco de dados - alguns minutos fora de sincronia.
Você obterá praticamente o mesmo ponto de recuperação - porque duvido muito que queira usar dados que não estejam registrados no diário - e fará isso sem precisar de operações de sincronização caras.