7주차. 로드밸런싱 서비스 (실습)

송현아·2021년 10월 6일
0
post-thumbnail

[실습 목표]

  1. ALB 생성 및 DNS 적용
  2. NLB 생성

⚙️ CloudFromation으로 환경 배포

📌 기본 환경 검증 및 구성 내용 확인

  • ELB-EC2-1 기본 환경 검증

# ELB-EC2-1

# 관리자 권한으로 세팅
sudo su -

# 디렉토리(폴더) 트리 구조 출력
[root@ELB-EC2-2 ~]# tree /var/www/html
/var/www/html
├── index.html
├── dev
│   └── index.html
└── xff.php

1 directory, 3 files

# xff 파일 확인하기
cat /var/www/html/xff.php

xff.php 파일 내용

  • 시간 출력
  • CPU 부하도 출력
  • IP 주소 출력
<?php
date_default_timezone_set("Asia/Seoul");
Print(date(DATE_RFC822));
echo "\n";
echo "\n";
$idleCpu = exec('vmstat 1 2 | awk \'{ for (i=1; i<=NF; i++) if ($i=="id") { getline; getline; print $i }}\'');
echo "Current CPU Load:";
echo 100-$idleCpu;
echo "%";
echo "\n";
echo "\n";
header('Content-Type: text/plain');
echo "Last Client IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nServer Public IP = ".$_SERVER['HTTP_HOST'];
echo "\nServer Private IP: ".$_SERVER['SERVER_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
#echo "\nDNS name used by client = ".$_SERVER['SERVER_NAME'];
?>
  • ELB-EC2-2 기본 환경 검증

# ELB-EC2-2

# 관리자 권한으로 세팅
sudo su -

# 디렉토리(폴더) 트리 구조 출력
[root@ELB-EC2-2 ~]# tree /var/www/html
/var/www/html
├── index.html
├── mgt
│   └── index.html
└── xff.php

1 directory, 3 files

# xff 파일 확인하기
cat /var/www/html/xff.php
  • 기본 구성 내용 확인

# 관리자 권한으로 세팅
sudo su -

# ELB-EC2-1 ELB-EC2-2 퍼블릭IP를 변수에 지정
EC21=3.38.106.166
EC22=54.180.24.96

# 변수 잘 들어갔는지 확인
echo $EC21
echo $EC22

# ELB-EC2-1 서비스 확인 = curl : http 요청 보내기
curl $EC21

# ELB-EC2-1dml xff 파일 실행하기
curl $EC21/xff.php
# 출력내용
Mon, 26 Jul 21 23:53:42 +0900

Current CPU Load:1%

Last Client IP: 13.125.230.163 # 클라이언트 IP
Server Public IP = 3.38.106.166 # ELB-EC2-1 의 퍼블릭 IP
Server Private IP: 10.0.0.154 # ELB-EC2-1 의 프라이빗 IP
X-Forwarded-for: # Blank

# 자신의 IP 확인 = 클라이언트IP
curl ipinfo.io

# sysName은 사용자가 장비에 설정한 장비명(Linux의 Hostname)
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.5.0
# 출력내용
SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-1

# sysUpTimeInstance(sysUpTime)값은 장비가 부팅되어 현재까지 동작한 milli-second 값이며, 쿼리 시 업데이트 되는 정보
# 아래 값의 경우 부팅 후 2분 10초가 경과된 정보이다
[root@MyEC2 ~]# snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (13098) 0:02:10.98


# ELB-EC2-1 서비스 확인
curl $EC21
curl $EC21/xff.php;echo
curl $EC21/dev/
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.5.0
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.3.0


# ELB-EC2-2 서비스 확인
curl $EC22
curl $EC22/xff.php;echo
curl $EC22/mgt/
snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.5.0
snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.3.0

📌 ALB 로드밸런서 생성

  1. EC2 > 로드밸런싱 > 로드밸런서 > Load Balancer 생성

  1. Application Load Balancer 생성

  1. Load Balancer 구성

    • 이름 : ALB-TEST
    • 체계 : 인터넷 경계
      • 로드밸런서의 접근을 외부에서 가능하도록 설정
    • IP 주소 유형 : ipv4
    • 리스너
      • HTTP, 80포트
    • 가용영역 : ELB-VPC
      • ap-northeast-2a
      • ap-northeast-2c 둘다 선택
  2. 보안그룹구성

    • ELB-SG 선택
  3. 라우팅 구성

    • 이름 : ALB-TG
    • 대상유형 : 이스턴스
    • 프로토콜 : HTTP
    • 프로토콜 버전 : HTTP1
    • 고급 상태 검사 설정
      • 포트 : 트래픽 포트
      • 정상 임계값 :3
        • 서버가 정상인지 확인이 3번 돌아오면 정상으로 인식
      • 비정상 임계값 : 2
        • 서버가 비정상이라고 2번이상 들어오면 비정상으로 인식
      • 제한시간 : 5
      • 간격 : 10
        • 서버 정상 비정상 체크 간격
      • 성공코드 : 200
  4. 대상 등록

    • ELB-EC-1
    • ELB-EC-2 둘다 선택 후 등록된 항목에 추가 버튼을 눌러야합니다.
  5. 검토 후 생성

[ALB 검증]

# ALB DNS 이름을 변수로 지정 
ALB=ALB-TEST-1485545638.ap-northeast-2.elb.amazonaws.com 

# ALB 변수 지정 확인
echo $ALB

# curl 접속 테스트 - ALB 는 기본 라운드 로빈 방식으로 대상 분산 되는 것을 확인할 수 있음
dig $ALB +short
while true; do dig $ALB +short && echo

# 접속 테스트 - 1:1 비율로 바꿔가며 Ec1과 ec2 반응을 하는 것을 볼 수 있음
curl $ALB
curl $ALB
for i in {1..20}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr

## 출력내용 - 50:50 으로 ELB-EC2-1, ELB-EC2-2 반응
[ec2-user@MyEC2 ~]$ for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
     50 <h1>ELB-EC2-2 Web Server</h1>
     50 <h1>ELB-EC2-1 Web Server</h1>

# xff 실행으로 ip 주소 보기
curl $ALB/xff.php ;echo

## 출력내용 - Last Client IP 와 X-Forwarded-for 가 어떻게 바뀌었는지 위와 비교해볼것 (중요)
Tue, 27 Jul 21 00:44:14 +0900

Current CPU Load:0%

Last Client IP: 10.0.1.145 # ALB의 IP
Server Public IP = alb-test-910493210.ap-northeast-2.elb.amazonaws.com
Server Private IP: 10.0.1.91
X-Forwarded-for: 13.125.184.198 # 접속한 사람의 주소 

🔎 X-Forwarded-for ?

사용자의 IP 주소를 출력해줍니다.
ALB를 사용하게 되면 Last Client IP가 ALB의 IP가 출력되기 때문에 Last Client IP로는 누가 접근했는지 알 수 없는 문제가 발생하게 되는데, 이를 X-Forwarded-for을 이용해서 해결할 수 있습니다.

📌 NLB 로드밸런서 생성

  1. EC2 > 로드밸런싱 > 로드밸런서 > Load Balancer 생성

  2. Network Load Balancer 선택

  1. Load Balancer 구성

    • 이름 : NLB-TEST
    • 체계 : 인터넷 경계
      • 로드밸런서의 접근을 외부에서 가능하도록 설정
    • IP 주소 유형 : ipv4
    • 리스너
      • HTTP, 80포트
    • 가용영역 : ELB-VPC
      • ap-northeast-2a
      • ap-northeast-2c 둘다 선택
    • 리스너와 라우팅
      • UDP 161 - NLB-TG
        • 타겟 그룹 만들어주기 클릭
          • 타겟 타입 : 인스턴스
          • 타겟 그룹 이름 : NLB-TG
          • UDP : 161
          • VPC : ELB-VPC
          • Health check - HTTP ( 원래는 NLB에서 HTTP는 사용할 수 없지만, ALB에서 HTTP를 활성화 했기 떄문에 사용)
            • 인터벌만 10 으로 변경
          • 대상등록
            • ELB-EC-1
            • ELB-EC-2 둘다 선택 후 등록된 항목에 추가 버튼을 눌러야함!(실수 주의)

  1. 검토 후 생성

0개의 댓글