2018년 3월 9일 금요일

NLB를 아시나요?

AWS에는 서버의 부하를 분산하거나 Autoscale을 수행할때 Load Balancer를 이용해야 한다.
AWS에서 제공하는 Load Balancer는 3가지가 있다 초창기에 나온 CLB(Classic Load Balancer), 그다음에 나온 ALB(Application Load Balancer) 그리고 최근에 나온 NLB(Network Load Balancer)가 있다.

간단히 설명하면, CLB는 HTTP와 TCP를 동시에 지원한다 AWS에서 이놈을 안쓰는걸 추천한단다. 이유는 모르겠다.
ALB는 Layer 7을 지원한다고 하고 어플리케이션의 헤더에 접근해서 좀더 세부적으로 부하 분산작업을 할수 있다.

여기서 잠깐 ~!!!
보통 layer 4, layer 7을 지원 한다고 이야기들을 한다. 여기서 이제까지 개발하고 PM/PL업무를 하던 나는 무슨 소리를 하는지 몰랐었다.

혹 나처럼 모르는 사람을 위해 잠간 설명하면 컴퓨터 관련학과 다니시던 분들은 네트워크의 구조를 배웠을거다. OSI 7 layer 구조는 아래를 보시고 여기에 4계층과 7계층을 이야기 하는것이다. 더 자세한건 구글링 하시길.

OSI 7Layer
  7계층  -  Application   -  사용자 인터페이스 / 응용 프로그램
  6계층  -  Presentation  -  데이터 포맷 / 암호화
  5계층  -  Session       -  연결 유지
  4계층  -  Transport     -  패킷 생성 / 패킷 오류 관리
  3계층  -  Network       -  논리적 주소 관리 / 경로 설정
  2계층  -  Data Link     -  물리적 주소 관리
  1계층  -  Physical      -  네트워크의 물리적 구조(케이블, 신호방식)

그래서 Layer 4 로드밸런싱은 네트워크 프로토콜 레벨에서 제공 되며, 실제 패킷을 살펴 보지는 못하기 때문에 HTTP나 HTTPS 같은 특정 프로토콜을 인지하지 않고 부하를 분산하고,
Layer 7 로드밸런싱은 좀 더 정교하고 강력한 기능을 제공하며, 패킷을 조사하고, HTTP 및 HTTPS 헤더에 접근해서 좀 더 지능적인 부하 분산 작업이 가능하다고 한다.

NLB는 나온지 얼마 되지 않았다. AWS에 다른 로드발란서는 아이피가 변경되는데 이놈은 변경되지 않는다고 한다. 실질적으로 테스트는 못해봤다. 그러니 아닐수도 있다 ㅋㅋ
아무튼 이넘은 약간 특이하다.  
부하 분산 설정에 인스턴스만이 아니라 특정  IP를 연결할 수 있다.
그런데 다른 로드발란서와 달리 로그 설정하는게 없다. 그리고 Security Group설정하는게 없다.

VPC Peering간 NLB를 호출할수 없다.
우리나라의 개인정보때문에  IDC와 연결해야 하는경우가 있는데, IDC와 AWS에 VPN연결일 때도 호출이 안된다.
그대신 Direct Connect를 이용하면 NLB통신 가능하다.

ELB 를 만들면 EndPoint라는 도메인을 준다. AWS를 잘 모르시는 분들을 위해 EndPoint는 AWS에서 제공하는 도메인이다. 로드발란서 아이피가 변경하기 때문에 EndPoint를 주는데 AWS가 매니지드 서비스라고 자동으로 늘었다 줄었다 해서 아이피가 변경이 된다. 그래서 변경되지 않는 도메인을 주는데 이 도메인을 EndPoint라고 한다. 그런데 이 도메인은 Public 도메인이다.
ELB를 내부에서만 쓸수 있도록 Internal 설정하는 부분이 있는데 이럴때도 EndPoint가 만들어지는데 이도메인을 nslookup을 하면 내부 아이피가 나온다. 

기본적으로 AWS는 Public서비스이다. 처음에는 Public서비스를 하다가 보안요건에 의해서 VPC라는 private영역을 만들면서 점점 Private역역을 넓히고 있다. API Gateway역시 마찬가지 이다.

API Gateway역시 Public 영역이라 내부로 직접들어갈수가 없다. 그런데 얼마전에  VPCLink라는 서비스가 나왔으며, 이서비스가 내부역역과 연결해준다. 
AWS의 S3, Dynamodb역시 Public서비스 이지만 VPC Endpoint 라는 서비스로  내부영역과 연결하는데, 같은 원리이다.

NLB를 이야기 하다가 API Gateway까지 나왔다 그 이유는 API Gateway의 VPCLink가 NLB와만 연결이 가능하다.VPCLink를 만들면 VPC와 NLB만 보인다.

여기서 알고 가야 할 부분이 좀 있다. 
일반적이진 않지만  API Gateway를 내부영역에 EC2와 연결하여 서비스를 할 때 간혹 API가 느려지는 현상이 발생하여 원인파악에 들어갔다.


결론은 NLB를 MultiAZ로 설정했는데 서버는 Single일때 발생한다.
Network을 체크해서 그러는지 모르겠지만 Single일때는 NLB생성시 Single AZ로 설정하자.

위사항은 잘못 확인된 내용이며, NLB Detail에 교차영역로드밸런싱이 비활성되어있어 발생한 사항이다. 활성화하면 위증상은 없어진다.




20180531 내용추가:
AWS Menual을 확인하니 위의 내용이 있었다. 다른 AZ간의 데이터비용이 발생하는 사항 때문에 LB에서 기본설정이 교차역역 로드 밸런싱을 비활성화 한다고 한다.

더 자세한 내용을 보고 싶으면 AWS Manual을 참고
https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/network/introduction.html

댓글 1개:

  1. 2018sus 10월부터 vpc peering간 통신이 지원된다고 합니다.
    다음 URI를 참고 하세요.
    https://aws.amazon.com/ko/about-aws/whats-new/2018/10/network-load-balancer-now-supports-inter-region-vpc-peering/

    답글삭제

AWS Redis와 Tomcat Session Clustering

근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다. 오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다. 앞에서 작성했던 AWS DynamoDB를 이용하여 Sessi...