4. NLB (Network Load Balancer)
NLB 생성
기본 구성
- 이름(NLB-TEST), 인터넷 경계
- 리스너 : 프로토콜(UDP), 포트(161)
- 가용 영역 : ELB-VPC, 2a 와 2c 선택 - IP는 AWS에서 할당 or 사용자의 EIP 사용 가능
보안 설정 구성 : skip
보안 그룹 구성 없음
라우팅 구성
- 대상 그룹(새 대상 그룹), 이름(NLB-TG), 대상 유형(인스턴스), 프로토콜(UDP), 포트(161)
- 상태 검사(HTTP) → 고급 상태 검사 설정 : 간격(10), 나머지는 기본값 ⇒ UDP는 기본 단방향 통신으로 상태검사에 비적합
대상 등록 : 하단 인스턴스 선택 → 등록된 항목에 추가
검토 → 생성
NLB 검증
- 설정 확인 : 로드밸런서(앞단, 리스너) , 대상그룹(뒷단, 대상)
- My-EC2 에서 확인
# NLB DNS 이름을 변수로 지정 << 아래 NLB 정보는 각자 멤버들 실습 결과 정보 입력
[ec2-user@MyEC2 ~]$ NLB=NLB-TEST-e0cec16378b4c669.elb.ap-northeast-2.amazonaws.com
[ec2-user@MyEC2 ~]$ echo $NLB
NLB-TEST-e0cec16378b4c669.elb.ap-northeast-2.amazonaws.com
# NLB는 아래 도메인 쿼리 응답 IP가 고정
[ec2-user@MyEC2 ~]$ dig $NLB +short
3.38.18.62
3.37.170.64
[ec2-user@MyEC2 ~]$ while true; do dig $NLB +short && echo "------------------------------" && date; sleep 5; done
3.38.18.62
3.37.170.64
------------------------------
Mon Jul 26 20:19:28 UTC 2021
^C
# NLB IP를 변수에 지정
[ec2-user@MyEC2 ~]$ NLB1=3.38.18.62
[ec2-user@MyEC2 ~]$ NLB2=3.37.170.64
# curl 접속 테스트
# NLB 는 5 Tuple Hash 결과로 분산하며 default 설정이 Cross Zone Load Balancing(교차 영역 로드 밸런싱)이 비활성화 상태
[ec2-user@MyEC2 ~]$ for i in {1..20}; do snmpget -v2c -c public $NLB 1.3.6.1.2.1.1.5.0 ; done | sort | uniq -c | sort -nr
10 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-2
10 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-1
[ec2-user@MyEC2 ~]$ for i in {1..20}; do snmpget -v2c -c public $NLB1 1.3.6.1.2.1.1.5.0 ; done | sort | uniq -c | sort -nr
20 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-1
[ec2-user@MyEC2 ~]$ for i in {1..20}; do snmpget -v2c -c public $NLB2 1.3.6.1.2.1.1.5.0 ; done | sort | uniq -c | sort -nr
20 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-2
- ELB-EC2-1, 2에서 확인
# 패킷덤프 시 클라이언트IP가 NLB를 경유해서 인입하였지만 변경 안됨 - 클라이언트IP보존
# EC2 보안그룹에 NLB로 서비스하는 포트의 대상을 대부분 0.0.0.0/0 지정하게됨 - 클라이언트IP로 인입되기 때문
# EC2-1
[root@ELB-EC2-1 ~]# tcpdump udp port 161 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:35:13.089601 IP 13.124.88.91.44479 > 10.0.0.202.161: GetRequest(28) .1.3.6.1.2.1.1.5.0
20:35:13.089956 IP 10.0.0.202.161 > 13.124.88.91.44479: GetResponse(37) .1.3.6.1.2.1.1.5.0="ELB-EC2-1"
# EC2-2
[root@ELB-EC2-2 ~]# tcpdump udp port 161 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:35:13.072072 IP 13.124.88.91.48247 > 10.0.1.39.161: GetRequest(28) .1.3.6.1.2.1.1.5.0
20:35:13.072454 IP 10.0.1.39.161 > 13.124.88.91.48247: GetResponse(37) .1.3.6.1.2.1.1.5.0="ELB-EC2-2"
NLB Cross Zone Load Balancing 활성화
- NLB-TEST 속성 편집 : 교차 영역 로드 밸런싱(활성화)
- My-EC2 에서 확인
# curl 접속 테스트
[ec2-user@MyEC2 ~]$ for i in {1..20}; do snmpget -v2c -c public $NLB1 1.3.6.1.2.1.1.5.0 ; done | sort | uniq -c | sort -nr
13 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-2
7 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-1
[ec2-user@MyEC2 ~]$ for i in {1..20}; do snmpget -v2c -c public $NLB2 1.3.6.1.2.1.1.5.0 ; done | sort | uniq -c | sort -nr
11 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-1
9 SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-2
# 어느정도 load balancing 되는것을 확인할 수 있음
'Infra > cloud' 카테고리의 다른 글
[AFOS] 8주차 EC2 Auto Scailing - 실습 (0) | 2021.08.01 |
---|---|
[AFOS] 8주차 EC2 Auto Scailing (0) | 2021.08.01 |
[AFOS] 7주차 네트워크 서비스(ELB) - 실습 : ALB (0) | 2021.07.27 |
[AFOS] 7주차 네트워크 서비스 - 로드밸런스 (0) | 2021.07.27 |
[AFOS] 6주차 데이터베이스 서비스 - 실습 : RDS (0) | 2021.07.19 |