Question

zone A에 서버 한 대, zone C에 서버 두 대 운영 중.

cross zone load balancing을 사용하지 않으면 zone A에 50%, zone C에 50% 분산하고 zone C에서 서버 두 대로 25%, 25% 분산할 것이라 예상했는데 그러지 않음.

클라이언트에서 5000개의 요청을 보내면 zone A, zone C 에서 각각 2500개의 요청을 처리하는 것은 확인.

zone C에서 각 서버가 1250개씩 요청을 처리할 것이라고 기대했는데 그러지 않고 한 서버가 요청을 더 많이 처리해 부하가 발생.

cross load balancing 동작에 대해 확인 가능하신 부분이 있다면 확인 요청.


Answer

교차 영역 로드밸런싱이 활성화 되면 AZ에 관계없이 등록된 각 대상이 NLB 노드에서 동일한 트래픽을 수신해야 합니다.


교차 영역 부하 분산을 사용하지 않는 로드 밸런싱에 대한 설명입니다. 

======================================================== 

네트워크 로드 밸런서는 DNS (Domain Name System) 를 사용하여 클라이언트의 요청을 여러 가용 영역에 배포된 로드 밸런서 노드로 분산합니다. ======================================================== 

위의 문서를 바탕으로 DNS 에 대한 추가 요소를 고려하셔야 합니다.


1.캐싱

클라이언트가 DNS에서 하나의 IP 주소를 가져오는 경우 TTL을 위해 유지합니다.TTL 내에서는 다른 IP 주소 (NLB 노드) 를 요청하지 않습니다.즉, TTL 중에는 클라이언트에 대해 로드 밸런싱이 수행되지 않습니다.


2.DNS 정책

DNS 정책 (Route 53 정책) 이 있는 경우 트래픽은 DNS 정책을 기반으로 분산됩니다.


3.클라이언트 수

클라이언트가 많으면 부하 분산이 상당히 균등하게 보일 수 있습니다.그러나 클라이언트가 적으면 트래픽 불균형이 더 심해질 것입니다.


4. Within in AZ  

하나의 AZ에 여러 대상이 있는 경우 트래픽은 하나의 AZ 내에서 균등하게 분산됩니다.

예를 들어 AZ가 1000개의 요청을 받는 경우 해당 AZ의 두 대상은 각각 약 500개를 받습니다.

(고객님께서 테스트 한 것과 동일하게 동작 됩니다.)


요약하면,

각 AZ가 수신하는 트래픽 양은 DNS/DNS 정책/클라이언트 수에 따라 달라집니다.

교차 영역 부하 분산을 사용하도록 설정하더라도 트래픽 분산은 고정 세션/수명이 긴 TCP 연결의 영향을 받을 수 있습니다.

===


Reference 

[1] Network Load Balancer now Supports Cross-Zone Load Balancing 

https://aws.amazon.com/about-aws/whats-new/2018/02/network-load-balancer-now-supports-cross-zone-load-balancing/  

[2] Why is Elastic Load Balancing unequally routing my load balancer traffic? 

https://aws.amazon.com/premiumsupport/knowledge-center/elb-fix-unequal-traffic-routing/