
HAProxy 뒤에서 실행되는 세 개의 Tomcat 인스턴스가 있습니다. 웹 애플리케이션에 변경 사항을 적용할 때 롤링 배포(즉, 한 번에 Tomcat 하나씩 바운스)를 수행하여 사용자에게 가동 중지 시간이 발생하지 않도록 하고 싶습니다.
어떻게 해야 하나요? 실행 중인 haproxy 인스턴스를 핫 재구성할 수 있다는 것을 알 수 있지만(새 풀 서버를 추가하거나 제거하는 데 좋습니다), 대상 서버 중 하나가 일시적으로 다운될 때 HAProxy는 어떻게 반응합니까?
HAProxy보다 더 나은 솔루션이 있다면 저도 기꺼이 살펴볼 것입니다.
감사해요!
답변1
Willy Tarreau에게 이메일을 보냈고 다음 옵션을 받았습니다.
핫 재구성 또는 통계 서버에 대한 socat 명령을 사용하여 대상 서버의 가중치를 0으로 설정할 수 있습니다. 이렇게 하면 새 세션이 해당 서버에 균형을 맞추는 것을 방지할 수 있지만 기존 연결에는 영향을 미치지 않습니다.
"option httpcheck /myurl"과 함께 http-check 비활성화-on-404 옵션을 설정한 다음 대상 서버가 /myurl에 응답하여 모든 것이 정상이면 200 상태를 보내고, 서버가 정상이면 404를 보내도록 할 수 있습니다. 새로운 요청 수신을 중지하고, 서버가 아무것도 수신하지 않아야 하는 경우(즉, 서버를 반송할 준비가 되었을 때) 500을 입력합니다. haproxy는 서버 라인에 지정된 간격으로 서버를 다시 확인합니다.
답변2
HAProxy는 @에 따른 재구성 없이는 제거를 지원하지 않습니다.어니스트 뮐러그의답변, 다른 시나리오도 요청하셨기에 대안을 제공해 드리겠습니다.
나는 사용한다LVS는 HTTP 이상의 용도로 사용될 수 있기 때문에 제가 가장 좋아하는 로드 밸런싱 솔루션 중 하나입니다.
ipvsadm
LVS를 사용하면 수동으로 서버를 추가하고 제거 할 수 있습니다 . 제거의 예는 다음 명령입니다.
/sbin/ipvsadm -e -t VIP:443 -r SERVERIP:443 -g -w WEIGHT
LVS와 상호작용하여 수동으로 추가하고 제거하는 것과는 반대로 저는 종종 다음 request
과 같은 옵션을 사용하는 것을 선호합니다.ldirectord
. ldirector는 ipvs 구성을 폴링하고 관리하는 데몬입니다. 해당 매개변수를 사용하여 URI 경로로 파일을 지정할 수 있습니다. 롤아웃 중에 파일을 제거하고 서버 액세스가 중지될 때까지 기다립니다. 이 시점에서는 프로덕션 클라이언트에 영향을 주지 않고 코드를 배포할 수 있습니다.
답변3
이 중 많은 부분은 Tomcat에서 세션/상태 관리를 수행하는지 여부에 따라 달라집니다. 재시작으로 인해 사용자 세션이 삭제된 경우 롤링은 사용자 영향을 방지하지 못합니다(500이 표시되는 것을 방지할 수 있지만 세션을 다시 시작하지 않아도 되는 것은 아닙니다). 고정 세션을 사용하지 않는 경우에는 이에 대해 걱정할 필요가 없습니다.
HAproxy 및 기타 로드 밸런서는 뒤에 있는 서버가 작동 중인지 작동 중지되었는지 매우 빠르게 확인하고 이를 기반으로 트래픽을 다시 라우팅하는 방법을 제공합니다(HAProxy의 "상태 확인"). 그러나 그들이 그것을 완벽하게 하는 것은 불가능합니다. Tomcat에는 "위"와 "아래"만 있는 것이 아닙니다. "포트에서 응답하는 것처럼 작동하지만 아직 준비가 되지 않았습니다"라는 메시지가 있습니다. 따라서 사용자가 직면하는 영향을 완전히 방지하기 위해 LB에 의존해서는 안 됩니다. 상태 확인이 양호하더라도 불량 노드로 트래픽을 가져오는 간격이 있을 것입니다.
롤링 배포로 수행하는 작업은 서버를 로드 밸런서에서 적극적으로 꺼낸 다음 노드를 조작/다시 시작하고 자동화된 테스트/모니터를 통과할 때까지 기다린 후 다시 넣은 후 다음 서버로 이동하는 것입니다. 서버를 비활성화하기 위해 원격으로(예: 스크립트에서) 호출할 수 있는 API가 있는 로드 밸런서를 사용하면 이 작업이 더 쉽습니다. 기존 Netscaler에서는 이 작업을 수행했지만 HAProxy에서는 그렇지 않습니다. HAProxy를 사용하면 구성을 편집하고 다시 시작해야 하거나(슬프게도) 상태 확인을 조작할 수 있는 위치로 변경할 수 있습니다. 예를 들어 해당 노드를 생략하려는 경우 이름을 바꾼 매직 파일을 확인할 수도 있습니다. 상태 확인이 실행되고 노드가 클러스터에서 나갈 때까지 기다려야 하지만 괜찮을 것입니다.
나는 가로질러 달려갔다이 게시물그 문제에 대한 iptables 관련 솔루션이 있습니다 ...