클러스터와 분산 아키텍처 개요
리눅스 클러스터(Cluster) 정의
리눅스 클러스터는 다수의 독립 컴퓨팅 노드가 하나의 논리적 시스템처럼 동작하도록 구성된 인프라입니다. 사용자 입장에서는 개별 노드의 존재를 인지하지 못하며, 관리자는 필요에 따라 노드를 유연하게 확장하거나 축소할 수 있습니다.
클러스터의 핵심 장점
- 탄력적 확장성: 노드의 추가/제거가 용이하여 수요 변화에 즉각 대응
- 고가용성 보장: 특정 노드 장애 시 자동 페일오버로 서비스 중단 방지
- 높은 처리량: 동시 접속을 여러 노드로 분산 처리
- 비용 효율성: 상용 하드웨어로 고성능 시스템 구축 가능
주요 클러스터 유형
| 유형 | 설명 |
|---|---|
| LB (Load Balancing) | 스케줄러가 다수 서버 중 최적의 노드를 선정해 요청 분산 |
| HA (High Availability) | 장애 발생 시 자동으로 대체 노드로 서비스 이전 |
| HP (High Performance) | 대규모 계산 작업을 병렬 처리하는 과학/엔지니어링 환경 |
확장 방식 비교
Scale-Up (수직 확장): 기존 서버의 CPU, 메모리, 스토리지 등 하드웨어 사양을 업그레이드. 단기적 성능 향상에 유효하나 비용 대비 효율이 낮고 확장 한계 존재.
Scale-Out (수평 확장): 동일 사양의 서버를 추가로 배치하여 부하 분산. 비용 효율적이며理論상 무한 확장 가능.
분산 시스템과의 차이
클러스터는 동일한 코드베이스와 데이터를 모든 노드가 공유하며 동일한 서비스를 제공. 반면 분산 시스템은 업무를 기능별로 쪼개어 각 노드가 고유한 역할 수행. 클러스터는 단위 시간당 처리량 증대에, 분산은 개별 작업의 처리 시간 단축에 초점.
LVS(Linux Virtual Server) 동작 메커니즘
프로젝트 배경
LVS는 리눅스 커널 공간에서 TCP/IP 4계층 부하 분산을 수행하는 오픈소스 프로젝트. 2.4 커널부터 기본 모로 내장되어 별도 패치 없이 바로 사용 가능.
핵심 구성 요소
- VS (Virtual Server): 클라이언트 요청을 스케줄링하는 디렉터
- RS (Real Server): 실제 서비스를 처리하는 백엔드 노드
3계층 아키텍처
부하 분산 계층 (Load Balancer/Director): 사용자 요청을 수신하여 적절한 RS로 라우팅
서버 풀 계층 (Server Pool/Real Server): WEB, MAIL, FTP 등 실제 업무 처리
공유 스토리지 계층: 모든 RS가 동일한 콘텐츠를 제공하도록 데이터 동기화
네트워크 흐름
사용자 요청이 VIP(가상 IP)로 진입하면, 디렉터가 스케줄링 알고리즘에 따라 특정 RS로 전달. RS 처리 결과는 모드별로 다른 경로로 클라이언트에 반환.
LVS 전달 모드 상세 분석
NAT (Network Address Translation)
다중 대상 DNAT를 활용해 요청 패킷의 목적지 주소를 RS의 RIP로 변경. 응답 트래픽은 반드시 디렉터를 경유하므로 병목 가능성 존재.
덝 흐름: 클라이언트(CIP) → VIP:9000 → 디렉터 DNAT 변환 → RIP:9000 → RS 응답(RIP→CIP) → 디렉터에서 RIP를 VIP로, 9000을 80으로 변환 → 클라이언트
장점: RS가 사설 IP 사용, 디렉터와 동일 네트워크 구성으로 보안성 우수
단점: 모든 트래픽이 디렉터를 통과하여 대규모 환경에서 병목
NAT 모드 실습
환경 구성:
디렉터(lvs): VIP 192.168.10.129/24, DIP 192.168.94.130/24
RS1(node1): RIP 192.168.94.135/24, 게이트웨이 192.168.94.130
RS2(node2): RIP 192.168.94.140/24, 게이트웨이 192.168.94.130
클라이언트: CIP 192.168.10.160/24디렉터 IP 포워딩 활성화:
[root@lvs ~]# grep 'ip_forward' /etc/sysctl.conf || echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1RS 게이트웨이 설정:
[root@node1 ~]# nmcli con mod ens160 ipv4.gateway 192.168.94.130
[root@node1 ~]# nmcli con up ens160
[root@node1 ~]# systemctl stop firewalld; setenforce 0
[root@node1 ~]# yum install httpd -y
[root@node1 ~]# echo "Backend-01 $(hostname -I | awk '{print $1}')" > /var/www/html/index.html
[root@node1 ~]# systemctl enable --now httpdipvsadm 규칙 설정:
[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# ipvsadm -A -t 192.168.10.129:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.10.129:80 -r 192.168.94.135:80 -m
[root@lvs ~]# ipvsadm -a -t 192.168.10.129:80 -r 192.168.94.140:80 -m
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.129:80 rr
-> 192.168.94.135:80 Masq 1 0 0
-> 192.168.94.140:80 Masq 1 0 0부하 분산 검증:
[root@lvs ~]# for i in {1..6}; do curl -s 192.168.10.129; done
Backend-01 192.168.94.135
Backend-02 192.168.94.140
Backend-01 192.168.94.135
Backend-02 192.168.94.140
Backend-01 192.168.94.135
Backend-02 192.168.94.140DR (Direct Routing) - 기본 모드
MAC 주소만 변경하여 프레임 전달. RS는 루프백 인터페이스에 VIP를 설정하고, 응답을 클라이언트로 직접 전송하여 디렉터 부하 최소화.
핵심 제약: 디렉터와 RS는 동일 브로드캐스트 도메인 필수
ARP 충돌 해결:
# RS에서 VIP 노출 방지
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announceDR 모드 실습
환경 구성:
클라이언트: 192.168.10.130/24, 게이트웨이 192.168.10.133
라우터: 192.168.10.133/24 (NAT), 192.168.94.140/24 (Host-Only)
디렉터: 192.168.94.129/24, VIP(lo) 192.168.94.200/32
RS1: 192.168.94.131/24, VIP(lo) 192.168.94.200/32
RS2: 192.168.94.130/24, VIP(lo) 192.168.94.200/32디렉터 VIP 설정:
[root@lvs ~]# ip addr add 192.168.94.200/32 dev lo
[root@lvs ~]# nmcli con mod ens160 ipv4.gateway 192.168.94.140
[root@lvs ~]# nmcli con up ens160RS 설정 (node2 예시):
[root@node2 ~]# ip addr add 192.168.94.200/32 dev lo
[root@node2 ~]# nmcli con mod ens160 ipv4.gateway 192.168.94.140
[root@node2 ~]# nmcli con up ens160
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce가중치 라운드 로빈 적용:
[root@lvs ~]# ipvsadm -A -t 192.168.94.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.130:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.131:80 -g -w 2방화벽 마크(FWM)를 활용한 세션 일관성
HTTP(80)과 HTTPS(443)을 동일한 실서버로 라우팅:
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.94.200 -p tcp \
-m multiport --dports 80,443 -j MARK --set-mark 6666
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.94.130 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.94.131 -gTUN (IP Tunneling)
원본 IP 패킷을 DIP→RIP 터널 헤더로 캡슐화. RS는 터널을 해제하고 VIP를 소스로 응답 직접 반환.
적용 조건: VIP/DIP/RIP 모두 공인 IP, RS 터널 기능 지원 필수
장점: 지리적으로 분산된 데이터센터 간 부하 분산(재해 복구)
단점: RS 구성 복잡도 증가
FULLNAT
요청 패킷의 출발지와 목적지 IP를 모두 변경. DIP→RIP, CIP→DIP 형태로 변환.
특징: VIP는 공인, DIP/RIP는 사설 IP 사용 가능. 포트 매핑 지원. 단, 커널 재컴파일 필요.
LVS 스케줄링 알고리즘
정적 알고리즘
| 알고리즘 | 설명 |
|---|---|
| RR (Round Robin) | 순차적으로 RS에 분배, 균등 처리 |
| WRR (Weighted RR) | 가중치에 따른 순환 분배, 서버 사양 차이 반영 |
| SH (Source Hashing) | 동일 출발 IP는 항상 동일 RS로 (세션 고정) |
| DH (Destination Hashing) | 목적지 IP 해시, 캐시 프록시 환경에 최적 |
동적 알고리즘
| 알고리즘 | 설명 |
|---|---|
| LC (Least Connections) | 활성 연결 수가 가장 적은 RS 우선 선택 |
| WLC (Weighted LC) | 가중치를 고려한 LC, 기본 스케줄러 |
| SED (Shortest Expected Delay) | (활성연결+1)*256/가중치, 초기 연결 시 높은 가중치 우선 |
| NQ (Never Queue) | 1차 라운드는 균등 배분, 이후 SED 적용 |
| LBLC/LBLCR | 지역성 기반 동적 스케줄링, 캐시 복제 고려 |
ipvsadm 명령어 체계
패키지 구성
- 바이너리:
/usr/sbin/ipvsadm - 저장 도구:
/usr/sbin/ipvsadm-save,/usr/sbin/ipvsadm-restore - 설정 파일:
/etc/sysconfig/ipvsadm
가상 서비스 관리
# 가상 서비스 생성
ipvsadm -A -t 192.168.1.100:80 -s wlc
# 가상 서비스 수정 (알고리즘 변경)
ipvsadm -E -t 192.168.1.100:80 -s rr
# 가상 서비스 삭제
ipvsadm -D -t 192.168.1.100:80
# 전체 규칙 삭제
ipvsadm -C실서버(RS) 관리
# RS 추가 (-m: NAT, -g: DR, -i: TUN)
ipvsadm -a -t 192.168.1.100:80 -r 172.16.16.2:80 -m -w 2
# RS 수정 (가중치 변경)
ipvsadm -e -t 192.168.1.100:80 -r 172.16.16.2:80 -m -w 5
# RS 제거
ipvsadm -d -t 192.168.1.100:80 -r 172.16.16.2:80모니터링 및 유틸리티
# 규칙 조회 (숫자로 표시, 역참조 없음)
ipvsadm -Ln
# 처리량 확인
ipvsadm -Ln --rate
# 카운터 초기화
ipvsadm -Z
# 규칙 영구 저장
ipvsadm-save -n > /etc/sysconfig/ipvsadm
# 규칙 복원
ipvsadm-restore < /etc/sysconfig/ipvsadm주요 옵션 요약
| 옵션 | 기능 |
|---|---|
| -A/-E/-D | 가상 서비스 추가/수정/삭제 |
| -a/-e/-d | RS 추가/수정/삭제 |
| -t/-u/-f | TCP/UDP/방화벽 마크 서비스 지정 |
| -s | 스케줄링 알고리즘 지정 |
| -r | 실서버 주소 지정 |
| -g/-i/-m | DR/TUN/NAT 모드 지정 |
| -w | 가중치 설정 |
| -p | 지속성 연결 타임아웃 |
| -C/-Z | 전체 삭제/카운터 초기화 |