1대의 서버로 증가하는 사용자들을 처리하기 힘들때 2대이상의 서버를 구축하여 로드 하는 운영 시스템이다.
일반적으로 DNS의 라운드 로빈 로드 밸런싱 하는 방법이 있으나, LVS 시스템은 라운드 로빈 방식 아니라 총 4가지 방법으로 로드 밸런싱을 할수 있어 사용자의 상황에 대처할수 있다.
1. 라운드 로빈(round-robin)
로드 밸런서로 들어오는 요청들을 차례대로 순차적으로 각각의 서버로 할당하는
DNS 로도 쉽게 구현이 가능한 방식이다.
2. 가중 라운드 로빈(weighted round-rovin)
동작 자체는 라운드 로빈 방식이지만, 로드 밸런싱을 할 서버들이 각각 사양일 경우 서로 다른 가충치를 설정하여 요청들을 할당하는 방식이다.
3. 최소 연결(least connection)
서버들중에서 가장 적은 수의 요청을 처리하고 있는 서버를 선택하여 요청을 할당하는 방식이다. 이 방식의 장점은 서버들의 현재 부하 상태를 동적으로 요청을 처리할수 있다.
4. 가중 연결 (weighted least connection)
연결 방식을 따르지만, 가중 라운드 로빈 방식과 마찮가지로 각 서버에 다른 가중치를 설정하여 요청들을 할당할수 있다.
시스템에서 NAT, DR(Direct routing) IP터널링 으로 구성이 가능하지만 여기서는 DR방식으로
DR(Direct rounting) 기본 구성도는 아래 링크를 참고 바랍니다.
http://wiki.kldp.org/Translations/html/Virtual_Server-KLDP/VS-DRouting.gif
이제 시스템을 구축해보자
모든 설명은 레드햇 기반인 CentOS 버전을 기준으로 설명한다.
웹서버 2대에 대해서 1대의 LVS 가 밸런싱을 하는 방식에 대해서 설명한다.
Virtual IP 192.168.10.10
Real IP(Web1) = 192.168.10.20
Real IP(Web2) =
LVS 서버에 yum명령을 사용하여 ipvsadm 을 설치한후
#yum -y install ipvsadm
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
#
이렇게 나오면 제대로 설치가 된것이다.
이제 LVS 서버에 사용할 Virtual IP를 설정해보자.
# ifconfig eth0:1 192.168.10.10 netmask 255.255.255.0 up
ifconfig 를 사용한 네트워크 설정은 서버가 재부팅이 되면 사라지기때문에,
파일을 생성해주자.
또한 해당 시스템을 통해 다른 패킷이 포워딩 될수 있도록 수정하자.
#vi
net.ipv4.ip_forward=1
#sysctl
이제 설치한 ipvsadm 에 새로운 서비스를
#ipvsadm -A -t 192.168.10.10:80 -s rr
192.168.10.10 IP의 tcp 80번포트를 라운드 로빈(rr) 방식으로 새로운 서비스로
자세한 명령어 옵션은 ipvsadm --help 로 확인해보자
참고로 언급된 4가지 스케쥴링 방법을 모두 적용가능하다
예) ipvsadm -t 192.168.10.10:80 -s wlc (가중 최소 연결)
추가가 끝났으면, 로드 밸런싱을 할 대상 서버들의 Real IP를 추가해준다.
#ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.20:80 -g
#ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.30:80 -g
#ipvsadm -L
IP Virtual Server version (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.10:http rr
-> Route 1 0 0
-> 192.168.10.30:http Route 1 0
LVS서버의 설정은 끝났다. 하지만 이 정보는 재부팅이 되면 날아간다.
재부팅후에 정보가 남아 있도록 약간의 작업을 진행해주자.
#/etc/rc.d/init.d/ipvsadm save
ipvsadm on
참고) ipvsadm save 명령을 내리면 /etc/sysconfig/ipvsadm 설정 값이 저장된다.
이제 LVS 서버의 설정은 끝이 났다.
이제 서비스 되어질 웹서버 2대에 설정한다.
설정방법은 2대다 동일하기 때문에 1대만 설명하겠다.
먼저 웹서버에서도 가상 디바이스를 설정하여 Virtual IP를 추가해야한다.
* 위에 설명되어 있다. 참고바란다.
여기서 의문점이 생긴다. 가상 디바이스를 추가하여 Virtual IP를 할당해주어야 하는데.
여기서 ARP 발생할수 있다. 그렇다면 ARP는 무엇인가.
ARP란?
IP주소를 해당 MAC주소로 바꿔주는 프로토콜을 말한다. 네트워크장비는 기본적으로 통신을 하기때문에 IP주소를 MAC주소로 변환을 해줘야 통신이 가능해진다.
클라인트가 가상 IP를 요청했을 때 동일 네트워크에 Virtual 2개 이상 갖고 있기 때문에 경우에 따라서 Real Server에서 응답을 경우가 있다고 한다. 이렇게 되면 로드밸런싱이 되지 않기 때문이다.
arptables_jf를 이용해서 응답하지 않도록 해줘야 한다.
#yum -y arptables_jf
#arptables -i -A IN -d 192.168.10.10 -j DROP
#arptables -i eth0 -A -d 192.168.10.10 -j mangle --mangle-ip-s 192.168.10.20
#/etc/rc.d/init.d/arptables_jf save
#chkconfig arptables_if
arptables_jf save 명령 사용시에도 /etc/sysconfig/arptables 파일에 값이 기록되어 저장된다.
을 이용하여 LVS 시스템을 Direct Routing 구성으로 구축해보았다.
ps) 단순히 rr(라운드 로빈) 방식만을 취한다면 차라리 DNS 로빈 설정이 훨신 수월하고 편리하다는 느낌이다. 하지만 위에 언급된 4가지 운영 상황에 맞게 설정할수 있어 충분히 장점이 될것 같고, L4 등도 고가라 도입하기가 쉽지 않을떄 한번 고려해볼만한 LVS 시스템이라 생각된다.
출처 : 리눅스포탈
댓글