두 개의 VM이 동일한 시스템에서 호스팅되므로 이름을 VM1 및 VM2로 지정하겠습니다. 두 VM 모두 서버 애플리케이션을 실행하는 컨테이너를 호스팅하고 runC
클라이언트는 호스트 시스템에서 직접 실행되며 VM1의 컨테이너에서 실행되는 서비스에 연결됩니다.
VM1에서 컨테이너를 닫으면 클라이언트가 VM2에서 실행되는 컨테이너에 연결되는 장애 조치 서비스를 구축하고 싶습니다.
나는 다음을 사용하여 유동 IP를 구현하고 테스트했습니다.연결 유지 및 VRRP에서 제안한대로이것링크이지만 이는 전체 VM이 실패할 때만 작동합니다. VM1의 컨테이너가 실패하면 컨테이너에 대한 내결함성 서비스를 구현해야 하며, VM1이 작동 중이더라도, 즉 컨테이너가 실패하더라도 클라이언트는 VM2에서 실행되는 복제본에 연결되어야 합니다. 하지만 해당 컨테이너를 호스팅하는 VM은 작동 중입니다.
여기서 제한 사항은 단일 실패 지점이 될 수 있는 Load Balancer/HAproxy 서비스를 사용하고 싶지 않다는 것입니다.
어떻게 하면 이것을 달성할 수 있을까요? 아니면 이것을 할 수 없습니까?
편집하다: (의견에서 제안한 대로 혼동 가능성을 없애기 위해 세부 정보를 추가합니다.)VM2의 컨테이너는 기본 컨테이너, 즉 VM1에서 실행 중인 컨테이너가 시작된 이후 실행되지 않았습니다. 이라는 컨테이너 검사점/복원 유틸리티가 있습니다. criu
이를 확인할 수 있습니다.여기그리고여기. 따라서 이 유틸리티를 사용하면 먼저 해당 컨테이너를 검사한 다음 해당 상태를 VM2로 마이그레이션하고 복원하여 VM1의 컨테이너가 VM2로 마이그레이션됩니다. 그러나 이제 클라이언트가 VM2에서 실행되는 컨테이너에 연결되어야 하는지 확인하는 것도 필요합니다. 지금까지는 네트워크 네임스페이스에서 컨테이너를 실행하고 VM1 인터페이스에서 경로를 추가했습니다. 이를 통해 앞에서 언급한 것처럼 VM1 자체에 오류가 발생하는 경우와 같은 하드웨어 오류를 방지할 수 있습니다.연결 유지 및 VRRP하지만 이제 내가 원하는 것은 컨테이너의 상태가 VM2 측으로 마이그레이션되고 컨테이너가 다운되었지만 VM1이 작동하고 해당 컨테이너의 마이그레이션된 상태가 VM2에 복원되는 경우 클라이언트가 VM2에 연결되도록 하려면 어떻게 해야 합니까? 이제 VM2에서 컨테이너를 실행 중이신가요? 이 시나리오를 시뮬레이션해야 합니다.