강좌
클라우드/리눅스에 관한 강좌입니다.
클라우드 분류

네이버클라우드 실무사용법026 : 로드밸런서 (Load Balancer) 설정 및 사용하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

로드밸런서 (Load Balancer) 설정 및 사용하기

 

 

LB3개의 종류를 지원한다.

  - Network LB, Network Proxy LB, Application LB
   
이 가운데 Network LB 1개와 와 Application LB 2종류에 대해서 실습하며, 모두 3개의 로드밸런서를 만들어서 사용할 것이다.

 

 

1.Target Group 생성 (3)

1LB 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
      >
다음

 

 d870166d429613beb8a93c8b31b02dea_1695000012_6246.png

 

 


   2
단계.Health Check 설정
     .
프로토콜 : TCP
     .
포트 : 80
     .Health Check
주기() : 30
     .
정상임계값 : 2   *몇번 체크해서 결정할 것이냐?
     .
실패임계값 : 2   *몇번 체크해서 결정할 것이냐?
     >
다음

 

 

 

d870166d429613beb8a93c8b31b02dea_1695000036_1494.png


 

   3단계.Target 추가


1
번서버(ss-linux-01)2번서버(ss-linux-02)만 추가 한다.

 

 

d870166d429613beb8a93c8b31b02dea_1695000069_7524.png
 



d870166d429613beb8a93c8b31b02dea_1695000078_856.png
 







 

그런 다음 생성된 TG를 확인

 

 d870166d429613beb8a93c8b31b02dea_1695000100_7777.png

 

 

2LB 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 확인

 

 

 d870166d429613beb8a93c8b31b02dea_1695000136_4309.png



 

 

3LB 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를 확인한 것이다.

 

 

 d870166d429613beb8a93c8b31b02dea_1695000159_9689.png

 




2. Network LB 생성

 


  *
중요 : Network LB로 구성했을 경우에는 Server의 로그에 ClientReal IP가 찍힘


     
반면, Application LB로 구성했을 경우에는 Server의 로그에 LBIP가 찍힘


Load Balancer > Load Balancer > "
로드밸런서생성" > 3종류의 LB "네트워크 로드밸런서 생성" 선택

 

 

d870166d429613beb8a93c8b31b02dea_1695000182_1285.png
 


 

 

  1단계.로드밸런서 생성
.
유형 : Networ
.
로드밸런스 이름 : ss-nlb
.Network : Public IP
.
부하처리 성능 : Small
.
대상 VPC : vpc-test-ss
.
서브넷선택 : KR-2 : ss-vpc-lb-subnet  (*Private Subnet이 미리 생성되어 있어야함)

 

 

d870166d429613beb8a93c8b31b02dea_1695000204_3521.png
 



 

2단계.로드밸런서 생성
.
프로토콜 : TCP, 로드밸런서 포터 : 80   >  +추가  >다음

 

 

d870166d429613beb8a93c8b31b02dea_1695000223_1218.png
 

 

 

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 선택 > “접속정보확인

 

 

d870166d429613beb8a93c8b31b02dea_1695000268_7192.png
 


 

 

확인한 접속정보로 웹브라우즈 접속한다.


*
접속확인할 때는 반드시 LB의 접속정보로 확인한다.


*LB
가 잘 작동하는지 확인하기 위해 서버1, 서버2번이 각각 확인되는지 확인한다.


*
만약 LB의 접속정보로 접속이 안될때는 해당 NACL과 해당서버의 ACGInbound 규칙을 확인해서 적절히 재설정한다.(중요)

 

 

d870166d429613beb8a93c8b31b02dea_1695000298_2259.png
 

d870166d429613beb8a93c8b31b02dea_1695000305_8612.png
 




  

 

이때 서버의 아파치로그에 실제 ClientIP가 직힌다는 것을 확인한다.

 

아파치 로그의 경로 : /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를 확인한다.

 

 

d870166d429613beb8a93c8b31b02dea_1695000353_6996.png
 


 

 

 

2.웹브라우즈로 접속

 

 

   이렇게 생성한 후,  alb접속정보URL:로 웹브라우즈에서 접속해본다. 웹브라우즈를 이용하여 LB로 접속정보로 접속해보면 서버1번과 서버2번이 부하분산을 위해 LB의 의해서 분기되는 것을 확인할 수 있다.

 


LoadBalancer >
해당LB 선택 > “접속정보확인

 

 

 d870166d429613beb8a93c8b31b02dea_1695000392_9296.png


d870166d429613beb8a93c8b31b02dea_1695000399_1003.png
 






 

 

이때 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를 확인해 보면 이제는 LBIP가 아닌 ClientIP가 찍힌다는 것을 확인할 수 있다.

 

[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 > "+추가"

 

 

d870166d429613beb8a93c8b31b02dea_1695000433_9564.png
 



 

이렇게 하면 /ip/는 이 설정이 우선 적용되어 http://도메인/ip/로 접속하면 이 LB가 적용되어 1번서버로 분기하게 된다.

 

alb 접속 정보/ip로 접근해본다. 그러면 1번서버로만 접근되는 것을 확인할 수 있습니다.

접속 URL : http://ss-alb-19159516-fe07ef9c2dbc.kr.lb.naverncp.com/ip/

 

 

d870166d429613beb8a93c8b31b02dea_1695000457_0515.png
 


 

 

LBApplication의 일종이기 때문에 Server의 아파치로그(access_log)에는 실제 LB IP 주소가 찍힘.

 

앞의 경우와 마찬가지로 ClientIP주소를 찍히게끔 하기 위해서는 httpd.conf파일의 LogFormet을 수정해줘야함.

 

 

 ( LogFormat "%h"  LogFormat "%{X-Forwarded-For}i" 으로 수정한다. 이렇게 설정하고 아파치재시작(systemctl restart httpd)하고 access_log를 확인해보면 Client IP가 찍힘을 확인할 수 있다.

 

 


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,034 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  100 명