Dos máquinas virtuales están alojadas en la misma máquina, llamémoslas VM1 y VM2. Ambas máquinas virtuales alojan un runC
contenedor que ejecuta una aplicación de servidor, un cliente se ejecuta directamente en la máquina host y está conectado al servicio que se ejecuta en el contenedor en VM1.
Quiero crear un servicio de conmutación por error en el que, si cierro el contenedor en VM1, el cliente debería conectarse al contenedor que se ejecuta en VM2.
Implementé y probé una IP flotante usandomantener vivo y VRRPcomo se sugiere enesteenlace, pero esto funciona solo cuando falla toda la VM, tengo que implementar un servicio de tolerancia a fallas para un contenedor si el contenedor en VM1 falla, el cliente debe conectarse a una réplica que se ejecuta en VM2 incluso si VM1 está activo, es decir, el contenedor falla pero la VM que aloja ese contenedor está activa.
La restricción aquí es que no quiero utilizar ningún servicio Load Balancer/HAproxy que pueda convertirse en un único punto de falla.
¿Alguna idea de cómo puedo lograr esto? ¿O no es posible hacer esto?
EDITAR: (Como se sugiere en los comentarios, agregando detalles para eliminar posibles confusiones).El contenedor en VM2 no se ha estado ejecutando desde el momento en que se inició el contenedor principal, es decir, el contenedor que se ejecuta en VM1. Hay una utilidad de punto de control/restauración de contenedores llamada como criu
, puede consultarla.aquíyaquí. Entonces, al usar esta utilidad, el contenedor de VM1 se migra a VM2 estableciendo primero un punto de control en ese contenedor y luego migrando ese estado a VM2 y restaurándolo. Pero ahora también es necesario garantizar que el cliente se conecte al contenedor que se ejecuta en VM2. Hasta ahora solo estaba ejecutando un contenedor en un espacio de nombres de red y agregando una ruta desde la interfaz de VM1. con esto puedo evitar fallas de hardware, como si la VM1 falla como se mencionó anteriormente usandomantener vivo y VRRP, pero ahora lo que quiero es cuando el estado del contenedor se migre al lado de VM2 y el contenedor deje de funcionar pero VM1 esté activo y el estado migrado de ese contenedor se restablezca en VM2, ¿cómo me aseguro de que el cliente se conectará a ¿Ahora ejecuta el contenedor en VM2? Tengo que simular este escenario.