네이버클라우드 실무사용법026 : 로드밸런서 (Load Balancer) 설정 및 사용하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,318 조회
- 0 추천
- 목록
본문
로드밸런서 (Load Balancer) 설정 및 사용하기
LB는 3개의 종류를 지원한다.
- Network LB, Network Proxy LB, Application LB
이 가운데 Network LB 1개와 와 Application LB 2종류에
대해서 실습하며, 모두 3개의 로드밸런서를 만들어서 사용할
것이다.
1.Target Group 생성 (3개)
1번 LB TG : Network LB용 TG
Load Balancer > Target Group > +Target Group 생성 >
1단계. Target Group 생성
. TG이름 : ss-nlb-tg
. Target 유형 :
VPC Server
. VPC : vpc-test-ss
. 프로토콜은 TCP
(Network LB이므로)
. 포트는 80번
> 다음
2단계.Health Check 설정
.프로토콜 : TCP
.포트 : 80
.Health Check 주기(초) : 30
.정상임계값 :
2 *몇번 체크해서 결정할 것이냐?
.실패임계값 :
2 *몇번 체크해서 결정할 것이냐?
> 다음
3단계.Target 추가
1번서버(ss-linux-01)와 2번서버(ss-linux-02)만 추가 한다.
그런 다음 생성된 TG를 확인
2번 LB TG : Applicaiton LB용 TG
Load Balancer > Target Group > +Target Group 생성 >
1단계.Target
Group 생성
.Target Group 이름 : ss-alb-tg
.Target 유형 :
VPC Server
.VPC : vpc-test-ss
.프로토콜은 http *Application LB이므로
. 포트는 80번
>다음
2단계.Health
Check 설정
.프로토콜 : HTTP
.포트 : 80
.URL Path : /
.HTTP Method : HEAD
.Health Check주기(초) : 30
.정상임계값 : 2
.실패임계값 : 2
> 다음
3단계.Target 추가
1번서버(ss-linux-01)와 2번서버(ss-linux-02)만 추가 한다.
생성한 TG 확인
3번 LB TG : Application LB에서 디렉토리 분기용 TG
Load Balancer > Target Group > +Target Group 생성 >
1단계.Target
Group 생성
.Target Group 이름 : ss-alb-ip-tg
.Target 유형 :
VPC Server
.VPC : vpc-test-ss
.프로토콜은 http *Application LB이므로
. 포트는 80번
>다음
2단계.Health
Check 설정
.프로토콜 : HTTP
.포트 : 80
.URL Path : /
.HTTP Method : HEAD
.Health Check주기(초) : 30
.정상임계값 : 2
.실패임계값 : 2
> 다음
3단계.Target 추가
1번서버(ss-linux-01)
만 추가 한다.
생성한 TG 확인
이와 같이 LB실습을 위한 3개의 TG를 생성하였다. 아래는 생성한 3개의 TG를 확인한 것이다.
2. Network LB 생성
*중요 : Network LB로 구성했을 경우에는 Server의 로그에 Client의 Real IP가 찍힘
반면, Application LB로 구성했을 경우에는 Server의 로그에
LB의 IP가 찍힘
Load Balancer > Load Balancer > "로드밸런서생성" > 3종류의 LB중
"네트워크 로드밸런서 생성" 선택
1단계.로드밸런서 생성
.유형 : Networ
.로드밸런스 이름 : ss-nlb
.Network : Public IP
.부하처리 성능 : Small
.대상 VPC : vpc-test-ss
.서브넷선택 : KR-2 : ss-vpc-lb-subnet (*Private Subnet이 미리 생성되어 있어야함)
2단계.로드밸런서 생성
.프로토콜 : TCP, 로드밸런서 포터 : 80 >
+추가 >다음
3단계.Target Group 선택
.Target Group : ss-nlb-tg 선택 > 다음 > “로드밸런서 생성”
3.웹브라우즈로 접속
이렇게 생성한 후, lb의 “접속정보URL:로 웹브라우즈에서 접속해본다.
웹브라우즈를 이용하여 LB로 접속정보로 접속해보면 서버1번과 서버2번이 부하분산을 위해 LB의 의해서 분기되는 것을 확인할 수 있다.
이때 Network LB에서는 Server의 아파치로그(access_log)에는 실제 Client IP 주소가 찍힘
LB의 접속정보는 다음과 같이 확인한다.
LoadBalancer > 해당LB 선택 > “접속정보” 확인
확인한 “접속정보”로 웹브라우즈 접속한다.
*접속확인할 때는 반드시 LB의 접속정보로 확인한다.
*LB가 잘 작동하는지 확인하기 위해 서버1번, 서버2번이 각각 확인되는지 확인한다.
*만약 LB의 접속정보로 접속이 안될때는 해당 NACL과
해당서버의 ACG의 Inbound 규칙을 확인해서 적절히
재설정한다.(중요)
이때 서버의 아파치로그에 실제 Client의 IP가 직힌다는 것을 확인한다.
아파치 로그의 경로 : /var/www/html/access_log
[root@ss-linux-01 httpd]# tail -f access_log 110.15.174.27 - - [23/Aug/2023:17:05:48 +0900] "-" 408 - "-" "-" 110.15.174.27 - - [23/Aug/2023:17:06:24 +0900] "GET / HTTP/1.1" 200 1074 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" 110.15.174.27 - - [23/Aug/2023:17:06:24 +0900] "GET / HTTP/1.1" 200 1074 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" |
4. Application LB 생성
1.Application
LB 생성
Load Balancer > Load Balancer > "+로드밸런서생성" > 3종류의 LB중
"어플리케이션 로드밸런서 생성" 선택
1단계.로드밸런서 생성
.유형 : Application
.로드밸런스 이름 :
ss-alb
.Network : Public IP
.부하처리성능 :
Small
.대상VPC : vpc-test-ss
.서브넷 선택 : KR-2
: ss-vpc-subnet
> 다음
2단계.로드밸런서생성
리스너 설정
. 프로토콜 : HTTP, 로드밸런서
포트 : 80 > +추가
3단계.Target Group 선택
.Target Group : ss-alb-tg
> 다음 > 로드밸런서
생성 >
이렇게 생성한 Application LoadBalancer를 확인한다.
2.웹브라우즈로 접속
이렇게 생성한 후, alb의 “접속정보URL:로 웹브라우즈에서 접속해본다. 웹브라우즈를 이용하여 LB로 접속정보로 접속해보면 서버1번과 서버2번이 부하분산을 위해 LB의 의해서 분기되는 것을 확인할 수 있다.
LoadBalancer > 해당LB 선택 > “접속정보” 확인
이때 Application LB에서는 Server의 아파치로그(access_log)에는 LB IP 주소가 찍힘(중요)
[root@ss-linux-01 httpd]# tail -f access_log 10.100.3.15 - - [23/Aug/2023:17:19:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.15 - - [23/Aug/2023:17:19:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.14 - - [23/Aug/2023:17:20:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.14 - - [23/Aug/2023:17:20:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.15 - - [23/Aug/2023:17:20:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.15 - - [23/Aug/2023:17:20:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.14 - - [23/Aug/2023:17:20:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.14 - - [23/Aug/2023:17:20:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.15 - - [23/Aug/2023:17:20:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 10.100.3.15 - - [23/Aug/2023:17:20:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-"
|
이렇게 생성한 후,
lb의 접속정보URL로 웹브라우즈에서 접속해보면 Server의 아파치로그(access_log)에는 실제 LB의 IP 주소가 찍힘.
Client의 IP주소를 찍히게끔 하기 위해서는 httpd.conf파일의 LogFormet을 수정해줘야함.
( LogFormat "%h" 를 LogFormat "%{X-Forwarded-For}i" 으로 수정한다.
이렇게 설정하고 아파치재시작(systemctl restart httpd)하고 access_log를 확인해보면 Client의 IP가 찍힘을 확인할 수 있다.
[root@ss-linux-01
httpd]# vi /etc/httpd/conf/httpd.conf |
아파치웹서버의 설정파일(httpd.conf)의 LogFormat 부분을 다음과 같이 수정한다.
기존의 설정
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
변경된 설정
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
그런 다음 아파치를 재시작한다.
[root@ss-linux-01 httpd]# systemctl restart httpd [root@ss-linux-01 httpd]# |
그리고 access_log를 확인해 보면
이제는 LB의 IP가 아닌 Client의 IP가 찍힌다는 것을 확인할 수 있다.
[root@ss-linux-01 httpd]# tail -f /var/log/httpd/access_log - - - [23/Aug/2023:17:26:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:26:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:26:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:26:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:26:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:26:52 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:27:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:27:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:27:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" - - - [23/Aug/2023:17:27:22 +0900] "HEAD / HTTP/1.1" 200 - "-" "-" 110.15.174.27 - - [23/Aug/2023:17:27:38 +0900] "GET / HTTP/1.1" 200 1072 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" 110.15.174.27 - - [23/Aug/2023:17:27:45 +0900] "GET / HTTP/1.1" 200 1072 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
|
5. Application LB생성 : Directory를 특정 TG로만 분기하는 LB
이 LB는 특정 디렉토리를 로딩했을 경우에
특정 서버로만 보내기 위한 Application LB를 만들어서 확인하는 실습이다.
먼저, 2번에서 생성해둔 Application LB의 설정을 다음과 같이 변경한다.
Load Balancer > Load Balancer > alb를 선택(ss-alb) > “리스너설정변경” > 해당리스너선택 > "규칙조회/변경" > 우선순위 선택하고 > "규칙추가" >
> 우선순위 : 1 (default 우선순위 설정은 그대로 두고)
조건 : Path
Pattern의 "+추가"하고 "/ip/" 추가
액션 >
TargetGroup > lab-alb-ip-tg > "+추가"
이렇게 하면 /ip/는 이 설정이 우선 적용되어 http://도메인/ip/로 접속하면 이 LB가 적용되어 1번서버로 분기하게 된다.
alb 접속 정보/ip로
접근해본다. 그러면 1번서버로만 접근되는 것을 확인할 수
있습니다.
접속 URL : http://ss-alb-19159516-fe07ef9c2dbc.kr.lb.naverncp.com/ip/
이 LB도 Application의 일종이기 때문에 Server의 아파치로그(access_log)에는 실제 LB의 IP 주소가 찍힘.
앞의 경우와 마찬가지로 Client의 IP주소를 찍히게끔 하기 위해서는 httpd.conf파일의 LogFormet을 수정해줘야함.
( LogFormat "%h" 를 LogFormat "%{X-Forwarded-For}i" 으로 수정한다. 이렇게 설정하고 아파치재시작(systemctl restart httpd)하고 access_log를 확인해보면 Client의 IP가 찍힘을 확인할 수 있다.
관련자료
-
이전
-
다음