기존에 CentOS에서 piranha-gui를 이용해서 Linux Virtual Server를 구축했었는데, 영 감이 안와서... 검색해서 ipvsadm으로 Virtual Server를 구축했다.

다음의 IP로 가상 서버를 구축한다고 가정한다.
Virutal IP : 192.168.1.10
Real IP : 192.168.1.20
Real IP : 192.168.1.21


일단은, 방금 구축한 경험으로 봤을 때 2대의 실 서버를 로드밸런싱하려면 ipvsadm을 동작시킬 서버까지 포함해서 3대가 있어야 될것 같다.(direct routing 방법 사용시)

Virtual Server
일단은 ipvsadm을 설치한다. 나의 경우는 yum을 이용해서 패키지 설치를 했다.
# yum install ipvsadm
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
#

요렇게 해서 나오면 정상.

이제 가상 IP를 설정한다. 네트워크 디바이스가 eth0으로 할당되어 있다고할 때, eth0:1의 이름으로 가상 디바이스를 생성한다.
# ifconfig eth0:1 192.168.1.10 netmask 255.255.255.0 up
# ifconfig

이렇게 하면 eth0:1의 이름으로 네트워크 디바이스가 생성되어 있을 것이다. 재부팅되었을 때 자동적으로 올라오게 하기 위해서 다음의 파일을 생성한다.
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0


Virtual Server에서는 가상 IP로 접속되는 연결을 실제 서버로 연결해야 하기 때문에 ip_forward 옵션이 활성화 되어 있어야 한다.
수정할 파일 : /etc/sysctl.conf
net.ipv4.ip_forward=1 로 변경한다.
# sysctl -p
혹은
# sysctl -w net.ipv4.ip_forward=1


이제 ipvsadm에 새로운 서비스를 추가한다.
# ipvsadm -A -t 192.168.1.10:80 -s wlc

옵션에 대한 자세한 사항은 ipvsadm --help 명령으로 확인하기 바란다.
위 옵션은 다음의 의미를 갖는다.
-A : 새로운 서비스 추가
-t : tcp 서비스
-s : scheduling. Weighted Least Connection

이제 서비스를 제공하는 실제 서버에 대한 세팅을 수행한다.
필요한 패키지로는 arptables_jf가 있다. 역시 yum으로 설치한다.
# yum install arptables_jf

arptables_jf 패키지를 설치하는 이유는 다음과 같다고 한다(나도 검색해서 찾았음).
Real Server에도 Virtual IP를 설정해 주어야 하는데, 이렇게 되는 경우 클라인트가 가상 IP를 요청했을 때 동일 네트워크에 Virtual IP를 2개 이상 갖고 있기 때문에 경우에 따라서 Real Server에서 응답을 주는 경우가 있다고 한다. 이렇게 되면 로드밸런싱이 되지 않기 때문에 arptables_jf를 이용해서 응답하지 않도록 해줘야 한다.
arptables_jf 설정을 수행한다.
# arptables -A IN -d <virtual_ip> -j DROP
# arptables -A OUT -d <virtual_ip> -j mangle --mangle-ip-s <real_ip>
# service arptables_jf save
# chkconfig arptables_if on

즉, 192.168.1.20에 해당하는 Real Server를 설정한다면,
# arptables -A IN -d 192.168.1.10 -j DROP
# arptables -A OUT -d 192.168.1.10 -j mangle --mangle-ip-s 192.168.1.20

이 된다.

이제, 네트워크 디바이스를 추가한다.
# ifconfig eth0:1 192.168.1.10 netmask 255.255.255.0

이 설정도 부팅시 자동으로 디바이스가 추가되도록 /etc/sysconfig/network-scripts에 파일을 생성한다.
파일 내용은 이미 기록했기때문에 생략한다.

여기가지 설정이 완료되면, 이제 ipvsadm에 real server를 추가해준다.
Virtual Server에서
# ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.20 -g

여기서 -g 옵션은 direct routing으로 추가하겠다는 의미임.

나머지 Real Server도 동일한 작업을 수행한 뒤 마지막으로 ipvsadm 설정을 저장하고, 서비스를 활성화 시켜준다.

# service ipvsadm save
# chkconfig ipvsadm on


이상이다. 근데 꼭 뭘 빼먹은 것 같은 이 기분은 뭘까...
Posted by 봉보리봉봉

블로그 이미지
봉보리봉봉

공지사항

Yesterday122
Today6
Total146,332