현대 LoadBalancer는 그 자체가 하나의 시스템이다. 외부적으로는 하나의 IP나 DNS만 존재하기 때문에 하나의 서버같지만, 하나의 IP(DNS)만으로도 수년동안 안정적인 운영이 가능하도록 한다.
DNS형태로 서비스를 제공하는 LB도 있다.
LoadBalancer가 연결을 전달하기 위해서는 대상 서버가 이용가능한 상태여야 한다.
이용 가능한 상태가 아니라면, 대상 서버에서 제외된다.
이용가능 상태를 판별하는 방법은 크게 3가지가 있다.
1. 연결이 된다면 정상이다.(TCP, UDP 등)
2. 응답 한다면 정상이다.(특정 PATH로의 HTTP Connection 요청에 200응답)
3. 기대한 응답 값이 나온다면 정상이다. (HTTP Response Body를 파싱해서 기대한 값, OK, UP 등이 존재하면 정상)
1 → 3으로 갈수록 health check 비용이 크고 확인 방법이 구체적이다.
LoadBalancer를 통해서 몇몇 서버에 장애가 생겨도 여분의 서버로 응답이 가능하므로 서비스의 가용성을 높였다. 하지만 LoadBalancer 서버에 장애가 난다면 어떻게 될까?
단일 LoadBalancer에만 의지한다면 최악의 경우에 대비할 수는 없다. 그렇다면 두 개의 LoadBalancer를 두면 될까? 만약에 내가 사용하는 데이터 센터에 화재나 지진이 나서 모든 서버에 장애가 난다면 어떻게 할까?
이런 최악의 경우를 대비하기 위해서 LoadBalancer가 위치한 하드웨어의 위치를 고려할 필요가 있다.
고가용성(High Availability, 통상 99.5% 99.9% 이상의 가용성을 목표)을 가능하게 하고자 한다면, DNS에 두 개 이상의(multi) Availability Zone 에 위치한 Loadbalancer 들을 연결해서 서비스를 구성하는 것이 좋다. 물론, LoadBalancer가 연결하고 있는 서버들도 Multi Availability Zone 에 위치해야 한다.
AWS에서는 LoadBalancer를 Availability Zone 별로 따로 두지 않고, 한 번의 설정으로 가용한 Availability Zone 에 모두 대응할 수 있도록 Cross-zone Loadbalancing 을 설정으로 제공한다.(실습: 4.2.6 Cross-zone load balancing
)
이미지 출처 : https://www.fromthekeyboard.com/load-balancing-with-aws-and-ansible/