AWS NLB Stickiness 탐구

JIPA
8 min readFeb 1, 2022

--

이 포스팅에서는 NLB(Network Load Balancer)에서 제공하는 Stickiness 기능에 대해 살펴보려고 합니다. 일반적으로 부하 분산 솔루션을 사용할 때 고려하는 고려사항으로는 “부하분산 알고리즘” 과 “Persistent” 혹은 “Sticky” 등으로 불리는 동일한 Client 가 동일한 서버로 분기되도록 하는 기능인데요. NLB 에서는 이처럼 동일한 Client 가 동일한 서버로 분기되도록 유지하는 기능을 “Stickiness” 라고 합니다.

따라서, “Stickeiness” 가 활성화되어 있는 경우라면 동일한 Client 는 동일한 서버로의 접속이 보장되게 됩니다. 반대로 이야기하면 Stickiness 가 활성화되어 있지 않다면 하나의 Client 가 항상 동일한 서버로 접속되는 것을 보장하지 않는 의미라고 보셔도 될 것 같습니다. 이 경우라면 Load Balancer 에 설정되어 있는 부하 분산 알고리즘을 따르게 되겠죠.

참고로, NLB 에는 별도로 부하 분산 알고리즘을 설정하는 옵션이 없습니다. 따라서, NLB 를 생성하면 한 가지 부하 분산 알고리즘을 따르게 되는데요. NLB 에서는 아래의 정보를 기반으로 한 Hash 방식의 부하 분산을 수행합니다.

  • The protocol
  • The source IP address and source port
  • The destination IP address and destination port
  • The TCP sequence number

일반적으로 On-premise 에서 사용하는 Load Balancer 에서 지원하는 Hash 는 IP 주소를 기반으로한 Hash 를 사용해서 부하 분산과 동시에 Stickiness 기능을 지원하지만 NLB 가 사용하는 Hash 는 여러개의 정보를 Hashing 하여 처리하기 때문에 단일 TCP 세션에 대한 부하 분산은 가능하지만 Hash 자체만으로 Stickiness 기능을 포함하지는 않습니다.

각 AWS Load Balancer 의 부하 분산 알고리즘은 아래의 링크를 참고하시기 바랍니다.

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html

먼저 간단하게 구성되어 있는 저의 테스트 환경을 살펴보도록 하겠습니다.

  1. Internet Facing NLB 가 각각 AZ1, AZ3 에 Provisioning 되어 있습니다.
  2. AZ1 과 AZ3 에는 2대씩 총 4대의 웹서버가 EC2 에 구성되어 있습니다.
  3. 4대의 웹서버를 Target Group 으로 등록 후 NLB 에 연결하였습니다.

NLB 생성이 완료되었으니 생성된 NLB 의 DNS Name 을 “nslookup” 을 통해 확인해보도록 하겠습니다.

위 그림과 같이 nslookup 결과 NLB DNA Name 에 대해서 2개의 공인 IP 를 확인할 수 있는데요. 그 이유는 Target Group 을 AZ1(ap-northeast-2a)과 AZ3(ap-northeast-2c)에 Provisioning 하였기 때문입니다.

일단 DNS Name 을 인터넷 브라우저에 입력하여 NLB 가 인터넷을 통해 정상적으로 접속이 되는지 확인하였습니다.

이제 좀 더 상세한 내용을 다뤄보기 위해 위 과정에서 파악한 NLB DNS Name 의 두 공인 IP 로 각각 20개씩의 요청을 전달하여 부하 분산 여부를 확인하도록 하겠습니다.

위 그림들과 같이 각각의 공인 IP 가 두 대의 서버로만 트래픽이 분산되는 것을 확인할 수 있었는데요.

왜 나머지 두대의 서버로는 부하 분산이 되지 않았을까요?

그 이유는 바로 Default 설정이라면 NLB 는 Cross Zone Load Balancing 설정이 비활성화되어 있기 때문입니다. 일단은 Cross Zone Load Balancing 설정은 그대로 두고 이 상태에서 Target Group 의 Stickiness 설정을 활성화해보도록 하겠습니다.

NLB 에 등록된 Target Group 의 속성에서 아래와 같이 Stickiness 값을 활성화한 후 동일하게 curl 명령을 수행하도록 하겠습니다.

참고로, NLB 의 속성 변경 시 변경된 값이 적용되기까지 몇 분의 시간이 소요될 수 있으므로 설정이 적용이 될 때까지 잠시 기다린 후 테스트를 진행합니다.

먼저, AZ1 에 해당하는 공인 IP 로 테스트를 진행하였습니다.

아래 그림과 같이 AZ1 에 해당하는 공인 IP 로 접속하는 경우 특정 서버(Server1)로 요청이 계속 전달되는 것을 확인할 수 있습니다.

AZ3 로 접속을 하는 경우에도 아래와 같이 특정 서버(Server3)로 요청이 계속 전달되는 것을 확인할 수 있습니다.

여기까지의 테스트를 통해 우리는 한가지를 알게 되었는데요. 일반적으로 Stickiness 와 같은 기능을 사용하는 경우에는 동일한 Client 가 동일한 Server 로 접속하도록 하기 위해 사용되는데 NLB 환경에서 Cross Zone Load Balancing 이 비활성화되어 있다면 각 AZ 에 설치된 NLB 의 Endpoint 는 Client 가 갖더라도 서로다른 Stickiness 를 갖는다는 것을 알게 되었습니다.

그럼 이번에는 Cross Zone Load Balancing 을 활성화한 후에 동일한 테스트를 해보도록 하겠습니다.

NLB 에서 아래와 같이 Cross Zone Load Balancing 의 값을 “Enabled(활성화)” 로 변경합니다.

그리고 Target Group 의 Stickiness 값도 비활성화하여 부하 분산이 잘 이뤄지는지 확인하도록 하겠습니다.

Cross Zone Load Balancing 옵션을 활성화하기 전과 동일하게 nslookup 을 통해 알아낸 두 개의 공인 IP 로 각각 동일한 요청을 보냈을 때 아래와 같이 AZ 에 관계없이 모두 부하 분산이 잘 되는 것을 확인하였습니다.

그럼 이번에는 이 상태에서 Stickiness 를 활성화 한 후 다시 테스트를 해보도록 하겠습니다.

아래 테스트 결과와 같이 Cross Zone Load Balancing 이 활성화되어 있는 경우에는 두 개의 공인 IP 중 어느 곳으로 접속하여도 AZ 에 상관없이 모두 동일한 서버로 요청이 전달되는 것을 확인할 수 있습니다.

위의 테스트 결과에서 알 수 있듯이 NLB 에서 제공하는 Stickiness 는 Cross Zone Load Balancing 옵션을 어떻게 설정하느냐에 따라서 각 AZ 별로 서로 다른 Stickiness 값을 가질 수 있습니다. 제가 수행한 테스트에서는 제가 nslookup 을 통해 DNS Name 에 해당하는 공인 IP 를 알아낸 후 특정 공인 IP 로 요청을 전달하였기 때문에 실제로 Client 입장에서는 공인 IP 별로 항상 동일한 서버로 접속이 된다는 것을 알 수 있었습니다. 하지만, Cross Zone Load Balancing 기능이 비활성화되어 있는 상황에서 일반적인 사용자라면 어떻게 될까요? 아마도, 저처럼 nslookup 을 통해 공인 IP 를 알아낸 후 접속하는 것이 아니라 DNS Name 을 통해 직접 접속하게 될 것입니다. 그런 상황을 고려해서 가정해 본다면 어떤 Client 는 NLB DNS Name 에 대한 공인 IP 값을 Return 받는 값이 달라지는 상황이 된다면(공인 IP 1 에서 공인 IP 2로 바뀌는 상황) Stickiness 값이 활성화 되어 있는 NLB 에 접속했음에도 불구하고 서로 다른 서버로 접근이 되는 상황이 발생할 수도 있다는 것을 알 수 있습니다. 물론, 일반적인 DNS TTL 을 고려해본다면 단시간에 이런 상황이 발생할 가능성은 낮겠지만 좀 더 긴 시간동안에 Stickiness 가 보장되어야 한다면 Cross Zone Load Balancing 옵션을 활성화하여 이러한 시나리오를 미연에 방지하는 것을 권고 드립니다.

감사합니다.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

JIPA
JIPA

Written by JIPA

Always Day 1. Security is job zero.

No responses yet

Write a response