시스템
구현
LVS Load Balancing method
NAT 이용한 가상서버
IP 터널링 이용한
가상서버
다이렉트 라우팅 이용한 가상서버
LVS Direct Routing
사용자의 요청은 가상 IP 주소를 가진 부하분산서버로
간다
부하분산서버는 스케줄링 알고리즘에 따라 클러스터에서 실제 서버를 선택
접속을 기록하는 해시 테이블에 새로운 접속을
추가
부하분산서버에서 선택한 서버로 직접 패킷을 전송
리얼서버는 요청을 처리하고 결과를 사용자에게 직접 전송
스케줄링 알고리즘
Round-Robin Scheduling
Weighted
Round-Robin Scheduling
Least-Connection Scheduling
Weighted
least-Connection Scheduling
Technology
1. heartbeat
2. Ldirectord
3. ipvsadm
1. Heeartbeat
- heartbeat
프로토콜을 이용하는 오픈 소스 프로젝트
- 정해진 시간간격을 두고 특정한 패킷을 물리적으로 연결된 호스트에 보내 일정시간 응답이 없으면
정해진 응급 복 구 프로세스를 수행
- Master 호스트가 서비스를 책임
- Master 호스트에 문제발생시 Hot standby 호스트가 가상 IP를 인계받아 서비스
재계
2. Ldirectord
리얼서버의 상태를
모니터링 하는 PERL 스크립트
설정파일에 정해진 URL에 주기적으로 특정문자열 요구
타임아웃, 응답된 문자열 유효성 등으로
서버상태 결정
리얼서버의 다운시 IPVS 테이블에서 삭제
리얼서버 복구시 IPVS 테이블에 재 등록
라이렉트 라우팅은
Linux Director서버의 IPVS 테이블을 이용해 커널에서 처리
모든 리얼 서버가 다운 되었을 경우 fall-back 서버가
응답
3. ipvsadm
2개 이상의 노드를 가진
클러스터링 시스템에서 커널내부의 IPVS 테이블을 설정하고 유지하는 유틸리티
IPVS테이블은 커널이 로드밸런서로 들어오는 패킷을 각각의
리얼서버 노드로 전달하기 위해 참조
2개의 프로토콜 지원(TCP, UDP)
3가지 방식의 패킷 포워딩 방식 지원(NAT,
Tunneling, Direct routing)
4가지 스케줄 알고리즘 지원
구축
Network
설정(공통)
/etc/hosts
X.X.X.100 www.dunet.co.kr www virtual ip
(VIP)
X.X.X.101 ha1.dunet.co.kr ha1 master
X.X.X.102 ha2.dunet.co.kr ha2 standby
X.X.X.103 node1.dunet.co.kr node1 real
server1
X.X.X.104 node2.dunet.co.kr node2 real server2
real server 서버들은 VIP를 로컬주소로 인식하도록 설정 되어야 함
- loopback device 에 IP alias
기능을 이용
- /etc/sysconfig/network-scripts/ifcfg-lo:0 스크립트를 다음과 같이 설정
DEVICE=lo:0
IPADDR=X.X.X.100
NETMASK=255.255.255.255
NETWORK=X.X.X.X
BROADCAST=X.X.X.X
ONBOOT=yes
NAME=loopback
GATEWAY혼돈을 막기 위해 /etc/sysconfig/network 파일에 아래 항목 추가
GATEWAYDEV=eth0
각 real server에서 /etc/ha.d/conf/ldirectord.cf에 포함
Test Page of
node1.dunet.co.kr
Test Page of node2.dunet.co.kr
ARP 응답문제
loopback devices에서
Alias된 VIP가 추가된 경우 로컬네트워크의 ARP 요청이 로드밸런서로 가지 않고 리얼 서버가 먼저 응답하므로 부하분산이 되지 않는 문제가
생길 수 있다.
커널 2.2.14 – Hidden Device 기능을 이용
커널 2.4.X - Hidden patch 필요
커널
2.6.X - /etc/sysctl.conf 파일에 수정 후 활성화
# ARP hidden configure
net.ipv4.conf.lo.arp_ignore =
1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore =
1
net.ipv4.conf.all.arp_announce = 2
활성화
# sysctl -p
TIP) 확인법으론 windows나 linux에서 arp -a 명령을 실행. 로드밸런서 서버 맥어드레스가 나오면 정상적으로 셋팅이 된 것이다.
Linux Director Server 설정
-
kernel 2.4 이상에서는 IPVS기능 사용가능
- Director서버는 반드시 자신에게 접속하는 클라이언트 패킷을 real
server로 보낼 수 있는 IPforward기능이 필요
# vi /etc/sysctl.conf
net.ipv.ip_forward = 1 로 변경 후 저장
활성화
# sysctl -p
실행을 위해 /etc/ha.d/conf/ldirectord.cf에 설정파일 필요
# vi /vietc/ha.d/conf/ldirectord.cf
checktimeout=3
checkinterval=1
# 테스트페이지 요청 주기
fallback=127.0.0.1:80gate # 모든 리얼서버 다운시 이동할 웹
서버
autoreload=yes
logfile=”/var/log/ldirectord.log”
quiescent=yes
virtual=X.X.X.100:80
# 리얼서버 IP및 포트, 포워딩 방식
real=X.X.X.103:80 gate 3 - gate = Direct
Routing
real=X.X.X.104:80 gate 2 - masq = Network address
translation
service=http - ipip = IP Tunneling
checkport=80
checktype=connect
request=”index.html”
receive=”Test Page”
scheduler=wlc # 스케줄링 방식
#persistent=600 - rr, wrr, lc, wlc
- Real Server 동일 사양에서 똑같게 구성
- Director Server 동일하게 구성
LVS 각 서버들 httpd 실행
#
/etc/rc.d/init.d/ldirectord start
- 부팅 시 자동 실행되지 않게 설정!!!
ipvsadm을 통해 테이블 확인
# ipvsadm - L
장애 로그로 결과를 분석