
로드 밸런서의 목적은 서버 간의 로드 밸런싱을 유지하고 인스턴스 상태 등을 추적하는 것임을 알고 있습니다. 하지만 로드 밸런서 자체가 실패하면 어떻게 될까요? 중복 로드 밸런서를 어떻게 설정합니까? (로드 밸런싱 로드 밸런서?)
DNS 상태 확인이 얼마나 유용할 수 있는지 알 수 있었지만 분명히 심각한 대기 시간 문제가 있지 않습니까?
이는 AWS ELB 또는 이와 유사한 타사 서비스를 사용하지 않는다고 가정합니다. Nginx만 사용하고 있다면 어떻게 해야 하나요?
답변1
Load Balancer 또는 모든 서비스와 관련하여 HA(고가용성)를 달성하는 방법에는 두 가지가 있습니다. IP 주소가 있는 두 대의 컴퓨터가 있다고 가정해 보겠습니다.
- 192.168.100.101
- 192.168.100.102
사용자는 IP에 연결하므로 원하는 것은 특정 상자에서 IP를 분리하는 것입니다. 예를 들어 가상 IP를 생성하는 것입니다. 해당 IP는 192.168.100.100입니다.
이제 IP 주소의 자동 장애 조치/장애 복구를 처리하는 HA 서비스를 선택할 수 있습니다. Unix를 위한 가장 간단한 서비스 중 일부는 (u)carp 및 keepalived이며, RedHat Cluster Suite 또는 Pacemaker와 같은 더 복잡한 서비스 중 일부는 있습니다.
keepalived 서비스를 예로 들어보겠습니다. 두 개의 keepalived 서비스는 각각 자체 상자에서 실행되며 서로 통신합니다. 이러한 통신을 흔히 하트비트라고 합니다.
| VIP | | |
| Box A | ------v^-----------v^---- | Box B |
| IP1 | | IP2 |
연결 유지 중 하나가 응답을 멈춘 경우(어떤 이유로든 서비스가 다운되거나 상자가 튕겨 나오거나 종료되는 경우) - 다른 상자의 연결 유지는 누락된 하트비트를 발견하고 다른 노드가 죽은 것으로 가정하고 장애 조치 조치를 취합니다. 우리의 경우 해당 작업은 유동 IP를 불러올 것입니다.
| VIP |
------------------ -------------- | Box B |
| IP2 |
이 경우 발생할 수 있는 최악의 경우는 클라이언트의 세션이 손실되는 것이지만 클라이언트는 다시 연결할 수 있습니다. 이를 방지하려면 두 개의 로드 밸런서가 서로 세션 데이터를 동기화할 수 있어야 하며, 그렇게 할 수 있다면 사용자는 짧은 지연이 발생하는 것 외에는 아무 것도 눈치 채지 못할 것입니다.
이 설정의 또 다른 함정은 스플릿 브레인입니다. 두 상자가 모두 온라인이지만 링크가 끊어지고 두 상자가 동일한 IP를 가져오는 경우입니다. 이는 일종의 펜싱 메커니즘(SCSI 예약, IPMI 다시 시작, 스마트 PDU 전원 차단 등)을 통해 해결되거나 서비스를 시작하려면 대부분의 클러스터 구성원이 활성화되어야 하는 홀수 노드를 통해 해결되는 경우가 많습니다.
| VIP | | VIP |
| Box A | | Box B |
| IP1 | | IP2 |
더 복잡한 클러스터 관리 소프트웨어(예: Pacemaker)는 전체 서비스를 이동할 수 있습니다(예: 한 노드에서 중지하고 다른 노드에서 시작). 이는 데이터베이스와 같은 서비스에 대한 HA를 달성할 수 있는 방식입니다.
또 다른 가능한 방법은 로드 밸런서 근처의 라우터를 제어하는 경우 ECMP를 활용하는 것입니다. 이 접근 방식을 사용하면 로드 밸런서를 수평으로 확장할 수도 있습니다. 이는 BGP를 라우터에 전달하는 두 개의 상자 각각에서 작동합니다. 각 상자는 가상 IP(192.168.100.100)를 광고해야 하며 라우터는 ECMP를 통해 트래픽의 부하를 분산합니다. 머신이 죽으면 VIP 광고가 중단되고, 결과적으로 라우터가 해당 머신으로 트래픽을 보내는 것도 중단됩니다. 이 설정에서 주의해야 할 유일한 것은 로드 밸런서 자체가 종료되면 IP 광고를 중지하는 것입니다.
답변2
Nginx를 로드 밸런서로 사용하면 응답 없음 시간 초과를 감지하도록 구성을 변경하여 이 게시물에 자세히 설명된 리디렉션을 따를 수 있습니다.
이론적으로 HA 환경이 있는 경우 클러스터된 여러 로드 밸런서는 하나가 실패하더라도 서비스가 유지되도록 허용해야 합니다.
도움이 되었기를 바랍니다.
답변3
하드웨어 로드 밸런서는 수년 동안 "액티브/패시브" 또는 "액티브/액티브" 설정을 지원해 왔으며 두 경우 모두 레이어 1/2 관점에서 병렬로 설정됩니다. 액티브/패시브는 설명된 대로 모니터링/연결 유지 메커니즘을 사용합니다. , 활성/활성은 다양한 방법으로 구현될 수 있습니다. 프런트엔드에서 단일 IP로 표시하려면 두 개 이상의 밸런서가 모두 온라인 상태인 한 다음과 같은 작업을 수행할 수 있습니다.
- 클라이언트가 동일한 네트워크에 있을 때 소스 MAC 또는 IP 주소를 기반으로 공유 IP에 대한 ARP 요청에 선택적으로 응답합니다.
- 주어진 새로운 TCP 연결의 트래픽을 처리하는 서로 협상합니다.
- 중복되거나 잘못된 레이어 3-7 트래픽이 무모하게 발생하도록 허용하고 클라이언트/라우터 TCP 스택에 의존하여 이를 분류합니다.
그런 다음 파트너 장치와의 통신이 끊어지면 모든 트래픽을 허용하도록 모드를 변경합니다.
백엔드 측에서:
- 각 밸런서는 정상 작동 시 애플리케이션 서버의 특정 하위 풀만 사용할 수 있습니다.
- 또는 여기서도 중복된 요청이 생성될 수 있습니다.
- 또는 밸런서 간의 협상이 완료될 수도 있습니다.