Duas VMs estão hospedadas na mesma máquina, vamos chamá-las de VM1 e VM2. Ambas as VMs hospedam um runC
contêiner executando um aplicativo de servidor, um cliente está sendo executado diretamente na máquina host e conectado ao serviço em execução no contêiner na VM1.
Quero construir um serviço de failover onde, se eu fechar o contêiner na VM1, o cliente deverá se conectar ao contêiner em execução na VM2.
Implementei e testei um IP flutuante usandokeepalived e VRRPcomo sugerido emesselink, mas isso funciona apenas quando toda a VM falha, tenho que implementar o serviço de tolerância a falhas para um contêiner, se o contêiner na VM1 falhar, o cliente deve se conectar a uma réplica em execução na VM2, mesmo se a VM1 estiver ativa, ou seja, o contêiner falhar mas a VM que hospeda esse contêiner está ativa.
A restrição aqui é que não quero usar nenhum serviço Load Balancer/HAproxy que possa se tornar um ponto único de falha.
Alguma ideia de como posso conseguir isso? ou não é possível fazer isso?
EDITAR: (Conforme sugerido nos comentários, adicionando detalhes para eliminar possíveis confusões.)O contêiner na VM2 não está em execução desde o momento em que o contêiner primário, ou seja, o contêiner em execução na VM1 foi iniciado. Há um utilitário de verificação/restauração do contêiner chamado como criu
, você pode dar uma olhada neleaquieaqui. Portanto, usando este utilitário, o contêiner da VM1 é migrado para a VM2, primeiro verificando esse contêiner e, em seguida, migrando esse estado para a VM2 e restaurando-o. Mas agora também é necessário garantir que o cliente se conecte ao contêiner em execução na VM2. Até agora eu estava apenas executando o contêiner em um namespace de rede e adicionando uma rota da interface da VM1. com isso posso evitar falhas de hardware, como se a própria VM1 falhasse, conforme mencionado anteriormente, usandokeepalived e VRRP, mas agora o que eu quero é quando o estado do contêiner for migrado para o lado da VM2 e o contêiner cair, mas a VM1 estiver ativa e o estado migrado desse contêiner for restaurado na VM2, como posso ter certeza de que o cliente será conectado ao agora executando o contêiner no VM2? Eu tenho que simular esse cenário.