저는 두 개의 web_only 컨테이너, mail-receiver 컨테이너, Postgres 및 Redis를 Docker 네트워크에 구성하여 테스트용 포럼을 만들었습니다. 두 웹 컨테이너의 nginx 앞에는 HAProxy가 배치되어 있었습니다. 시스템은 잘 작동했지만, 두 웹 컨테이너 중 하나를 재빌드할 때마다 503이 반환되는 짧은 다운타임이 항상 발생했습니다.
다행히 완화할 수 있는 우회 방법을 찾았지만, 완벽하지는 않습니다.
app1을 재빌드하기 전에 다음을 실행하세요.
echo "disable server be_discourse/app1" | socat stdio /run/haproxy/admin.sock
그리고 app1의 재빌드 과정이 완료된 후 다음을 실행하세요.
echo "enable server be_discourse/app1" | socat stdio /run/haproxy/admin.sock
반대로 app2를 재빌드하려면 다음을 실행하세요.
echo "disable server be_discourse/app2" | socat stdio /run/haproxy/admin.sock
그리고 app2의 재빌드 과정이 완료된 후 다음을 실행하세요.
echo "enable server be_discourse/app1" | socat stdio /run/haproxy/admin.sock
이는
/etc/haproxy/haproxy.cfg의be_discourse관련 설정과 일치하도록 작성되었습니다. 아직 설정 파일을 코드 블록으로 붙여넣지는 않겠지만, 많은 분들이 원하신다면 공유할 수도 있습니다.
따라서 추가된 명령어들은 컨테이너가 다운되어 503이 발생할 것이라는 것을 HAProxy가 인지하기 전에 트래픽을 우회하도록 지시함으로써 503 오류를 완화합니다.
대신에 에러 페이지를 생성하는 것도 가능하지만, 저는 그쪽으로 큰 성과를 보지 못했고 더 많은 조사가 필요하다고 느낍니다. 그러나 이는 다운타임 문제를 실제로 해결하지는 못합니다.