본문 바로가기

AWS

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

728x90

ALB 실습

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

 


 

 ALB 대상 그룹 생성

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

 

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

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

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

 

 

 ALB 로드 밸런서 생성

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

 

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

 

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

 

ALB 동작 확인

  • 생성된 ALB URL에 500회 요청
def AWS_ALB():
    retrun_data = dict()
    for i in range(1,500+1):
        req = requests.get("http://alb-http-80-1207148678.ap-northeast-2.elb.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
    
alb = AWS_ALB()
print(alb)

 

  • 테스트 결과
    • 1회차 결과:{'AZ_A_PUB_EC2_2': 125, 'AZ_C_PUB_EC2_1': 125, 'AZ_A_PUB_EC2_1': 125, 'AZ_C_PUB_EC2_2': 125}
    • 2회차 결과: {'AZ_A_PUB_EC2_2': 125, 'AZ_C_PUB_EC2_1': 125, 'AZ_A_PUB_EC2_1': 125, 'AZ_C_PUB_EC2_2': 125}
    • 3회차 결과: {'AZ_A_PUB_EC2_2': 126, 'AZ_A_PUB_EC2_1': 125, 'AZ_C_PUB_EC2_2': 125, 'AZ_C_PUB_EC2_1': 124}
    • ALB는 기본적으로 교차 영역 부하분산이 기본적으로 활성화 되어 모든 가용 영역으로 트래픽이 분산됨.
    • 아파치 access_log 확인 시 출발지 IP 확인 불가 가능. 출발지 IP를 확인 하기 위해서 access_log에 x-forwared-for 정보를 Log에 기록할 수 있도록 설정 수정 필요. (아래 IP는 ALB의 내부 IP)
    • 세션 유지가 필요할 경우 고정 기능을 활성화를 해야 하며, 해당 기능을 활성화 하기 위해서 교차 영역 로드 밸런싱 기능이 활성화 되어야 함. 
    • 고정 기능 활성화 이후 브라우저에서 ALB URL 호출 시 항상 동일한 서버 정보 반환. 

 

 

 

 

 

728x90

'AWS' 카테고리의 다른 글

AWS - Elastic Block Storage (EBS)  (0) 2024.03.02
AWS - EC2 Auto Scaling 구축 (실습)  (0) 2024.03.01
AWS - ELB (Elastic Load Balancing) NLB (실습)  (4) 2024.03.01
AWS - EC2 Auto Scaling  (0) 2024.03.01
AWS - Auto Scaling  (0) 2024.03.01