- Considering that each EBS volume already has triple redundancy built in and that it's fairly straight forward to restore from a backup, how do I measure the added fault tolerance of 2 vs. 3 replicas.
No que diz respeito ao MongoDB, considerações importantes com apenas dois membros portadores de dados em um conjunto de réplicas de três nós são que se um desses membros portadores de dados estiver indisponível por qualquer motivo (manutenção planejada ou falha não planejada):
- você não tem mais replicação ativa (há apenas um membro com dados restantes)
- sua implantação não pode mais reconhecer problemas de gravação superiores a
w:1
(por exemplo:w:majority
ouw:2
)
Essa configuração tem alta disponibilidade em termos de manter / eleger um primário no caso de uma falha de um único membro, mas o árbitro compromete a redundância de dados se um dos seus membros portadores de dados não estiver disponível. Supondo que você tenha um tempo razoável para restauração de seus backups do EBS (e confie na redundância do EBS), isso pode ser um comprometimento aceitável para o seu caso de uso.
- Are there additional considerations besides redundancy when considering the trade offs?
Se o seu código estiver usando o MongoDB escreva preocupações acima do padrão ( w:1
) você vai querer adicionar um valor wtimeout
. Se você não especificar a opção wtimeout
e o nível de preocupação de gravação for inalcançável, as operações de gravação serão bloqueadas indefinidamente.
As garantias da AWS em infraestrutura redundante geralmente só se estendem a falhas em várias zonas de disponibilidade; portanto, para maximizar a disponibilidade, você também deve implantar seus membros do conjunto de réplicas em diferentes zonas de disponibilidade.
- Does anyone have experience (good or bad) with running only 2 replicas + an Arbiter
Definitivamente, tenho visto resultados ruins em que os usuários não levaram em consideração os pontos acima (especialmente considerando questões de gravação e tempos limite). Se você planeja (e testa) com essas advertências em mente, você deve ser capaz de conseguir o lado da boa experiência.
On top of this, we have both a prod and staging environment (with a third "dev" environment coming soon)
Há definitivamente um argumento para ter ambientes de teste e de desenvolvimento, mas uma economia de custo típica seria a implantação de ambientes de especificação inferiores para o dev com menos failover do que a produção. Para a preparação, você pode querer implantar ambientes de especificação inferiores, mas com configuração semelhante, para poder testar cenários realistas de failover. Se você estiver realizando testes de desempenho ou de carga em ambientes de preparação, eles deverão ser provisionados com as mesmas especificações da produção.