본문 바로가기

AWS

AWS - ELB (Elastic Load Balancing) NLB (실습)

728x90

NLB 실습

  • 사전 구성
    • 사용자 VPC 생성 및 CIDR 10.0.0.0/16 사용. 
    • 가용 영역 2개에 서브넷 생성 (10.0.0.0/24, 10.0.1.0/24)
    • 가용 영역당 2개의 Public EC2 생성 및 HTTP 수용 보안 그룹 생성 
    • Apache2 패키지 다운로드 및 설치 
  • 실습 내용
    • NLB 로드 밸런서 및 대상 그룹 생성
    • NLB 동작 방식 확인

 


 

 NLB 대상 그룹 생성

EC2 >> (로드 밸런싱) 대상 그룹 >> 대상 그룹 생성 

 

  • 그룹 세부 정보 지정 (1단계)
    • 대상 유형: 인스턴스
    • 그룹 이름: NLB-TG-HTTP-80
    • 프로토콜: TCP / 80 (포트 번호는 변경 가능)
    • VPC: 사전 구성에서 생성한 VPC 사용
    • 프로토콜 버전: HTTP1 또는 HTTP2
    • 상태 검사: NLB에서 수행할 헬스체크 (기본값 사용). HTTP를 사용하여 응답값 200 또는 TCP SYN/ACK 사용 가능

  • 대상 등록 (2단계)
    • 사용 가능한 인스턴스 등록: 사전 구성에서 생성한 4개의 인스턴스 등록. 등록할 포트는 1단계에서 지정한 포트 사용

  • 대상 그룹 상태 확인
    • 로드 밸런서에 연결되지 않아 현재 상태는 Unused

 

 

 NLB 로드 밸런서 생성

EC2 >> (로드 밸런싱) 로드밸런서 >> 로드밸런서 생성

 

  • 로드 밸런서 유형 선택: NLB 선택
  • 로드 밸런서 이름: NLB-HTTP-80
  • 체계: 인터넷 경계 선택 (내부에서 사용할 경우 내부 선택)
  • IP 주소: IPv4 선택 
  • 매핑: 가용 영역 선택. 가용성을 위해 2개 이상의 가용 영역을 선택하는 것이 좋으며, 사전 구성된 EC2가 2개의 가용 영역에 분산되어 있어 az1, az3 선택. IP는 AWS에서 지정하는 IP 또는 EIP를 생성하여 연결 가능 
  • 보안 그룹: HTTP 트래픽을 수용할 수 있는 보안그룹 연결 (EC2에서 사용하는 동일한 보안 그룹 사용)
  • 리스너: 외부에 공개되는 포트 정보. 일반적인 L4 스위치에서 생성하는 Virtual Server와 동일함. 
  • NLB 로드밸런서 상태 확인

 

 

  • 로드 밸런서 생성 이후 대상 그룹의 상태 확인
    • Unused >> Initial >> Health 상태로 변경
    • 등록 대상 EC2가 Health 상태로 변경 되면 NLB 로드 밸런서는 사용 가능.

 

 NLB 동작 확인

  • 생성된 NLB URL에 500회 요청
def AWS_NLB():
    retrun_data = dict()
    for i in range(1,500+1):
        req = requests.get("http://nlb-http-80-e8469ea4178122ab.elb.ap-northeast-2.amazonaws.com").text
        if "AZ_C_PUB_EC2_1" in req:
            retrun_data.setdefault("AZ_C_PUB_EC2_1", 0)
            retrun_data["AZ_C_PUB_EC2_1"] += 1
        elif "AZ_C_PUB_EC2_2" in req:
            retrun_data.setdefault("AZ_C_PUB_EC2_2", 0)
            retrun_data["AZ_C_PUB_EC2_2"] += 1
        elif "AZ_A_PUB_EC2_1" in req:
            retrun_data.setdefault("AZ_A_PUB_EC2_1", 0)
            retrun_data["AZ_A_PUB_EC2_1"] += 1
        elif "AZ_A_PUB_EC2_2" in req:
            retrun_data.setdefault("AZ_A_PUB_EC2_2", 0)
            retrun_data["AZ_A_PUB_EC2_2"] += 1
            
            
    return retrun_data

nlb = AWS_NLB()
print(nlb)
  • 테스트 결과
    • 1회차 결과: {'AZ_A_PUB_EC2_1': 239, 'AZ_A_PUB_EC2_2': 261}
    • 2회차 결과: {'AZ_A_PUB_EC2_1': 258, 'AZ_A_PUB_EC2_2': 242}
    • 3회차 결과: {'AZ_A_PUB_EC2_1': 244, 'AZ_A_PUB_EC2_2': 256}
    • 가용 영역에 포함된 EC2가 모두 비활성화 될 경우 다른 가용 영역으로 전환 됨
    • NLB의 라우팅 정책은 Flow Hash 방식으로 해당 알고리즘에 따라 트래픽을 받을 가용 영역이 결정되며, 가용 영역에 있는 EC2에게 트래픽이 분산 됨.
    • NLB는 기본적으로 교차 영역 로드 밸런싱 기능은 비활성화 상태이며, 활성화 하기 위해서 로드 밸런서 속성 편집 또는 대상 그룹 속성을 수정하여 교차 영역 로드 밸런싱을 활성화 시킬 수 있음. (비용 발생)
      일반적으로 대상 그룹 단위로 설정을 수행 함. 
    • 아파치 access_log 확인 시 출발지 IP 확인 가능

 

 

 

728x90

'AWS' 카테고리의 다른 글

AWS - EC2 Auto Scaling 구축 (실습)  (0) 2024.03.01
AWS - ELB (Elastic Load Balancing) ALB (실습)  (1) 2024.03.01
AWS - EC2 Auto Scaling  (0) 2024.03.01
AWS - Auto Scaling  (0) 2024.03.01
AWS - ELB (Elastic Load Balancing) 대상 그룹 설정  (0) 2024.02.29