ALB에 대한 고찰이후 ELB관련 주제의 포스팅을 적는건 오랜만이다.
NLB의 Sticky 에 대해 한번 적어보려 한다.
Target group의 속성 이야기다.
NLB sticky는 추가된지 6개월정도 지났지만 아직도 일반적으로 아는 기능은 아니다.
너무 오랜기간 없었던 터라 없다고 아는 사람이 더 많은..ㅋㅋㅋ 그런 기능이다.
먼저 Docs 를 링크하고..
NLB의 Routing algorithm 은 ip_hash 방식으로 동작 한다.
The protocol
The source IP address and source port
The destination IP address and destination port
The TCP sequence number
6개의 조건이 일치하면 같은 target으로 연결해주나, 하나의 조건이라도 달라지면 다른 target으로 연결해주는 것이다. 이 tuple 들이이 일치하지 않더라도 같은 target으로 연결하게 하는 방법이 있다. 그것이 바로 sticky session 인것이다.
stictky session 에서 라우팅 조건은 souce ip 뿐이다. 1 tuple인것이다. 하지만 그렇다고 해서 영원히 같은 인스턴스로 연결해주는것은 아니다. 여기엔 시간 제한이 붙어있다.
-추가 - 수정합니다.
docs에는 souce ip 1tuple로 동작한다 적혀있지만 NLB-multi-AZ(HA)구성을 할경우엔 A RR-EIP가 두개가 붙으므로 예상과는 다르게 동작할것입니다. 또한 1tuple로 동작하는 부분또한 client ip + nlb node ip 로 구성되므로 2tuple 로 동작합니다.
예상과 같은 정상적인 결과를 얻기위해선 Weighted, failover 방식으로 route53을 설정해서 단일존으로 라우팅 해야 동일한 결과를 얻을 수 있습니다.
-도움주신 무무님 감사합니다.
docs 대로라면 1tuple이라 생각했는데 요소는 1tuple이 아니라
Connection idle timeout 이다
NLB의 Connection idle timeout 은 TCP 350 초 UDP 120초다.
- UDP는 태우님이 물어보셔서 추가로 알아봤다.
Elastic Load Balancing sets the idle timeout value for TCP flows to 350 seconds. You cannot modify this value. Clients or targets can use TCP keepalive packets to reset the idle timeout.
Connection idle timeoutElastic Load Balancing sets the idle timeout value for UDP flows to 120 seconds.
그래서 동작은 이렇다.
sticky session 을 켜고 연결이 지속되는 동안은 무조건 같은 target으로 연결되고 마지막 연결부터 350초가 지나고 연결하면 대상/클라이언트 모두 TCP RST 응답을 받아서 sticky session 의 연결이 해제되고 다른 target과 연결되게 되고 다시 sticky로 동작하는거다.
최근에 질문을 받아서 다시한번 정리해봤다.
읽어주셔서 감사하다!
안녕하세요.
먼저 aws network load balancer에 대한 기본적인 내용을 간단히 정리해주셔서 감사합니다.
저도 지금 aws network load balancer를 구축하면서 한가지 의문점이 생겼는데요.
위에 설명에서 보시면
"6개의 조건이 일치하면 같은 target으로 연결해주나, 하나의 조건이라도 달라지면 다른 target으로 연결해주는 것이다. 이 tuple 들이이 일치하지 않더라도 같은 target으로 연결하게 하는 방법이 있다. 그것이 바로 sticky session 인것이다." 이라고 작성하셨었는데요.
여기서 저 target이 가용영역에 a,b,c,d중에 하나 영역을 target이라고 의미 하신건가요?
아니면 예를들어 가용영역 a에 인스턴스 1,2가 있으면 1또는 2에 고정되서 유지 된다는 의미 인가요?
지금 nlb load balancer는 tls로 구축하고 target 그룹은 tcp로 하여 sticky session을 설정하고
api를 연속으로 호출하여 log를 보고 있으면 한쪽서버에 붙어 있다가 갑자기 다른서버로 이동하는데요
사용자 IP나 여러 접속 정보들이 변경되지 않음에도 옮겨지는데요.
혼란스럽네요.. ㅠㅠ
근데 이게 문제가있습니다. 스티키 타임이 10분밖에 안되용..쓰기 매우어려운 패턴이에요
댓글이 안남겨지네요??
댓글은 일정조건에 의해서 제가 승인해야지만 댓글이 남겨집니다 ㅠ
내용 잘 보았습니다~
현재 TCP 통신하는 서버들을 NLB로 구성을 해보았는데, 로드밸런싱이 제대로 안되고 있습니다.
몇 일 동안 한 클라이언트가 계속 같은 서버로만 접속이 되는데, 클라이언트를 재부팅하면 그제서야 다른 서버로 연결됩니다.
TCP 통신에서 소스(클라이언트) 쪽 포트는 TCP 연결 시마다 바뀌는 걸로 알고 있는데,
그렇다면 매 연결 시마다 위에 말씀하신 6조건 중 하나가 충족이 되어, 로드밸런싱이 되어야 할 것 같은데 안되네요...ㅠㅠ
답답한 마음에 댓글 남겨봅니다. 혹시 힌트라도 될만한 사항이 있으시면 알려주시면 감사하겠습니다~
Keepalive 가 설정되어서 연결이 지속되는것은 아닌지요?