로드밸런싱 (Load Balancing)
로드밸런싱이란 네트워크 기술로 중앙처리장치에서 자원들을 분산 시켜주는 작업을 의미합니다.
한대의 서버에 부하가 집중되면 장애가 발생할 수 있기 때문에 트래픽을 관리하여 서버에 발생하는 부하(=로드)들을 분산(=밸런싱)해줍니다.
서비스의 규모가 커지고, 이용자 수가 늘어나게 되면 기존의 서버만으로 원할한 서비스를 제공하지 못합니다.
해결방법으로는
1. 기존 서버 한대를 Scale-up 방식
2. 기존의 서버와 비슷한 성능의 서버를 증설하여 Scale-out 방식
예를들어 Scale-out 방식으로 했다면 균등하게 분산해주는 로드 밸런싱이 필요합니다.
로드밸런싱을 해주는 로드밸런서에는 2가지 종류가 있습니다.
L4 로드밸런서 vs L7 로드밸런서
L4 로드밸런서 | L7 로드밸런서 | |
네트워크 계층 | Layer 4 - 전송계층 (Transport layer) | Layer 7 - 응용계층 (Application layer) |
특징 | TCP/UDP 포트 정보로 구성 | TCP/UDP 정보 + 애플리케이션 헤더, 쿠키 정보로 구성 |
장점 | 데이터 확인 X, 패킷 레벨으로 로드분산하여 속도가 빠르고 효율이 높음 상대적으로 가격이 저렴함. |
상위계층에서 로드분산으로 자세한 라우팅 분배가 가능함. 캐싱 기능, 비정상적은 트래픽을 사전에 필터링 가능 |
단점 | 패킷내용 확인불가로 단순라우팅만 가능 사용자의 IP가 자주바뀌면 연속적인 서비스 제공 불가 |
패킷의 내용을 복호화해야하기 때문에 비용 부담 증가 |
로드 밸런싱을 하는 방법에 대해 몇가지 종류가 있습니다.
라운드로빈 ( Round Robin )
서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
서버와의 연결세션이 오래 지속되지 않는 경우 적합하다.
ex) 8대 서버가 로드밸런서에 연결되어 있다면 22개의 서비스 요청이 들어온다면 2개씩 8대에 분산한다음 맨처음에 있는거부터 순서대로 6개 서비스를 분산하는 하는 방법. 균등하게 분배하여 세션이 길게 유지 보장 불가합니다.
가중 라운드로빈 방식 ( Weighted Round Robin )
각 서버에 가중치를 매기고 가중치가 높은 서버에 요청을 우선적으로 배정하는 방식
서버의 트래픽 처리 능력이 다른 경우 사용한다.
ex) 각 서버의 사양이 높은대로 먼저 배정
최소 연결 방식 ( Least Connection )
요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 트래픽을 배정하는 방식.
서버에 분배된 트래픽들이 일정하지 않은 경우에 적합하다.
IP 해시 방식 ( IP Hash )
클라이언트의 IP주소를 특정 서버로 매핑하여 요청을 처리하는 방식
사용자가 항상 동일한 서버로 연결된다.
-> 세션 쿠키값이 유지가 되어한다면, 해당 방식으로 해야합니다.
최소 응답 시간 방식 ( Least Response Time )
서버의 현재 연결 상태와 응답 시간(Response Time, 서버에 요청을 보내고 최초 응답을 받을 때까지 소요되는 시간)을 모두 고려하여 트래픽을 배분한다. 가장 적은 연결 상태와 가장 짧은 응답 시간을 보이는 서버에 우선적으로 로드를 배분하는 방식이다.
ex) 8대 서버가 로드밸런서에 연결되어 있고 20개가 들어왔다면 추가적으로 3개가 들어오면 3개씩 연결된 서비스가 3대, 2개씩 연결된 서비스가 4대이므로 2개가 연결된 서버에 로드 분배하는 방식입니다.
L4 서비스 기능 구축 및 활용
log확인, 포트포워딩, 인증서적용 등등
CentOS 7
apache httpd 2.4.6 yum
L4 로드밸런서
로드밸런서 포트 80
웹서버 포트 80 기본설정
포트포워딩 L4 기능
로드밸런서 포트 80
웹서버 포트 8080
두서버에서 Listen 포트를 80 -> 8080 으로 변경 및 방화벽에서 8080포트 open 후 httpd 재시작
아래 모니터링 대상페이지는 TCP 직접입력으로 포워딩하기때문에 의미가 없다.
L7 로드밸런서 기능
80 to 80
HTTP 프로토콜 지정하기 때문에 /index.html or /index.php or /index.jsp 으로 해야합니다.
로드밸런서에 SSL 인증서 적용
로드밸런서 포트 443
웹서버 포트 80
웹서버에는 SSL 인증서 미적용
무료 SSL 인증서 key, cert 파일을 받을 수 있다. 메일 인증하고 알아서 받으시면 됨.
https://www.sslforfree.com/
3개 파일을 메모장으로 열어준다.
메모장으로 파일을 열어서 그대로 복사하여 인증서를 로드밸런서에 등록해줍니다.
Log 확인
확인시 로드밸런서 내부 IP만 찍히는 상황
해당 모듈이 활성화 되어있어야합니다.
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
# LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
# LogFormat "%{Referer}i -> %U" referer
# LogFormat "%{User-agent}i" agent
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
#CustomLog "logs/access_log" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
CustomLog "logs/access_log" combined
</IfModule>
재시작후 로그 IP 확인시 정상적 client IP로 기록됩니다.
'Network & Routing & LoadBalance' 카테고리의 다른 글
r8169 -> r8168 네트워크 드라이브 변경 (0) | 2023.03.10 |
---|---|
tcpdump MTU (특정 페이지 느릴때) (0) | 2023.03.09 |
댓글