설치성공기
HOME > 커뮤니티 > 설치성공기

[프로그램] SULinux LVS

 글쓴이 : 나진이아빠
작성일 : 07-05-12 09:37    조회 : 10,716  


The Linux Virtual Server is a highly scalable and highly available server built on a cluster of real servers, with the load balancer running on the Linux operating system.

March 31, 2007 nazin


1. Linux Virtual Server(LVS)?


리눅스 가상 서버란, 한대의 서버로 증가하는 인터넷 사용자를 처리하기가 힘들어 지면서 고가용성 서버를 구축하기 위해 리눅스 머신을 로드 발랜스 하도록 해주는 운영시스템이다.

만약 하나의 노드에서 처리량이 너무 많아서 서비스가 불가능할 경우 간단히 하나의 노드를 병렬 구성으로 추가 함으로써 부하분산을 하도록 하는 것을 말한다. 공개소스로서 이러한 기능을 담당하고 있는 것이다.


2. Linux Virtual Server 스케쥴링



3. 시스템 구성 및 ipvsadm 설치


1)Load Balancer Server

운영체제 : SULinux1.5

커널 : kernel-2.6.9-42.0.2.ELsmp

IP : 210.224.223.1

가상IP : 210.224.223.10

2)Real Server1(RS1)

운영체제 : Sulinux1.5

커널 : kernel-2.6.9-12.0.2.ELsmp

IP : 210.224.223.11

IP : 192.168.0.11 [NAT 설정시 부여할 사설 ip]


3)Real Server1(RS2)

운영체제 : CentOS4

커널 : kernel-2.6.9-42.0.2.ELsmp

IP : 210.224.223.12

IP : 192.168.0.12 [NAT 설정시 부여할 사설 ip]


4)Load Balancer Server ipvsadm 설치

Load Balancer Server에서 ipvsadm을 다운로드 후 설치를 한다.

커널 2.4.x 이하 버젼에서는 커널 컴파일 및 hidden 패치를 해야 했으나 커널 2.6.x에서는

Virtual Server 기능들이 기본 포함되어 있으므로 아주 간단하다.

shell>wget http://mirror.centos.org/centos/4/extras/i386/RPMS/ipvsadm-1.24-6.i386.rpm


shell>rpm -ivh ipvsadm-1.24-6.i386.rpm


shell>ipvsadm

IP Virtual Server version 1.2.0 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn


설치가 정상적으로 되었다면 위와같이 나타날 것이다.여기서부터 ipvsadm을 이용하여 아래 방식 으로 설정하여 테스트 해보도록 하겠다.


A.Direct Routing 방식

실제 서버와 부하분산 서버에서 가상 IP 주소를 부여하여 서로 공유한다. 부하분산 서버에도

마찬가지로 가상 IP 주소를 설정한 인터페이스가 있어야하며 이 인터페이스를 이용, 요청

패킷을 받아들이고 선택한 서버에 직접 라우팅할 수 있게 된다.

모든 실제 서버는 가상 IP주소로 설정한 non-arp alias 인터페이스가 있거나 가상 IP 주소로

향하는 패킷을 지역 소켓으로 재지향한다. 그래서 실제 서버 에서 패킷을 지역적으로 처리할

수 있는 구조를 가지게 된다.


Direct Routing 방식의 구조도는 아래와 같다.



A-1.Load Balancer Server 설정법

/etc/sysctl.confnet.ipv4.ip_forward = 0 부분을 1로 변경후

shell>sysctl -p

커널파라미터 적용


shell>ifconfig eth0:1 210.224.223.10 up

가상아이피 등록


shell>ipvsadm -A -t 210.224.223.10:80 -s rr

라운드-로빈방식으로 설정


shell>ipvsadm -a -t 210.224.223.10:80 -r 210.224.223.11:80 -g

RS1 서버로 다이렉트 라우팅 설정


shell>ipvsadm -a -t 210.224.223.10:80 -r 210.224.223.12:80 -g

RS2 서버로 다이렉트 라우팅 설정



A-2.Real Server(RS1) 설정법

/etc/sysctl.confnet.ipv4.ip_forward = 0 부분을 1로 변경하여야 하며

#for ipvs

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

#end of ipvs

#for ipvs ~ #end of ipvs 부분을 추가한후

shell>sysctl -p

커널파라미터 적용

shell>ifconfig lo:0 210.224.223.10 up

가상아이피 등록


A-3.Real Server(RS2) 설정법

/etc/sysctl.confnet.ipv4.ip_forward = 0 부분을 1로 변경하여야 하며

#for ipvs

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

#end of ipvs

#for ipvs ~ #end of ipvs 부분을 추가한후

shell>sysctl -p

커널파라미터 적용

shell>ifconfig lo:0 210.224.223.10 up

가상아이피 등록


클라이언트에서 가상아이피 210.224.223.10으로 접속하면 우리는 느끼지 못하지만

rr(라운드-로빈)방식을 이용해서 RV1,RV2 서버에 접속하게 된다.

RV1 서버에 장애가 있다면 RV2 서버로 접속하게 된다.


B.NAT 방식

NAT는 특정한 IP 주소를 한 그룹에서 다른 그룹으로 매핑하는 기능이다.

클라이언트가 가상 아이피로 접근시 사설 아이피로 구성된 부하분산 서버 RS1,RS2로 패킷이 향 하게 된다. 사설 아이피로 구성된 부하분산 서버는 패킷의 목적지와 포트 번호를 검사한다.

NAT 방식의 구조도는 아래와 같다



B-1.Balancer Server 설정법


네트웍 디바이스 eth0,eth1 정보

DEVICE=eth0

onBOOT=yes

BOOTPROTO=static

IPADDR=210.224.223.11

NETMASK=255.255.255.0

GATEWAY=210.223.223.1

DEVICE=eth1

onBOOT=yes

BOOTPROTO=static

IPADDR=192.168.0.1

NETMASK=255.255.255.0


/etc/sysctl.confnet.ipv4.ip_forward = 0 부분을 1로 변경후

shell>sysctl -p

커널파라미터 적용


shell>ifconfig eth0:1 210.224.223.10 up

가상아이피 등록


shell>ipvsadm -A -t 210.224.223.10:80 -s lc

최소연결 방식으로 설정



shell>ipvsadm -a -t 210.224.223.10:80 -r 192.168.0.11:80 -m

RS1 서버로 NAT 설정


shell>ipvsadm -a -t 210.224.223.10:80 -r 192.168.0.12:80 -m

RS2 서버로 NAT 설정


B-2.Real Server(RS1,RS2) 설정법


RS1

DEVICE=eth0

onBOOT=yes

BOOTPROTO=static

IPADDR=192.168.0.11

NETMASK=255.255.255.0

GATEWAY=192.168.0.1


RS2

DEVICE=eth0

onBOOT=yes

BOOTPROTO=static

IPADDR=192.168.0.12

NETMASK=255.255.255.0

GATEWAY=192.168.0.1


클라이언트에서 가상아이피 210.224.223.10으로 접속하면 우리는 느끼지 못하지만

최소연결 방식을 이용해서 RV1,RV2 서버 중에 접속자가 작은 서버로 된다.

RV1 서버에 장애가 있다면 RV2 서버로 접속하게 된다.

NAT 방식의 경우 패킷 Load Balancer Server를 반드시 거쳐가야 하므로 20대 이상 구성해야

할때는 문제가 발생할 수 있는 단점이 있다.

C.IP Tunneling 방식

IP 터널링 (IP encapsulation)IP 데이터그램안에 IP 데이터그램을 넣는 기술로서, 어떤 IP 소를 향하는 데이터그램을 감싸 다른 IP 주소로 재지향할 수 있다. IP encapsulation은 현재 엑 스트라넷, 모빌-IP, IP-멀티캐스트, tunnled 호스트나 네트웍 등에 일반적으로 사용되고 있다.

IP Tunneling 방식의 구조도는 아래와 같다



C-1.Balancer Server 설정법

/etc/sysctl.confnet.ipv4.ip_forward = 0 부분을 1로 변경후

shell>sysctl -p

커널파라미터 적용


shell>ifconfig eth0:1 210.224.223.10 up

가상아이피 등록


shell>ipvsadm -A -t 210.224.223.10:80 -s wlc

가중치 최소연결 방식으로 설정



shell>ipvsadm -a -t 210.224.223.10:80 -r 210.224.223.11:80 -i

RS1 서버로 Tunneling


shell>ipvsadm -a -t 210.224.223.10:80 -r 210.224.223.12:80 -i

RS2 서버로 Tunneling


C-2.Real Server(RS1,RS2) 설정법

/etc/sysctl.confnet.ipv4.ip_forward = 0 부분을 1로 변경하여야 하며

#for ipvs

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

#end of ipvs

#for ipvs ~ #end of ipvs 부분을 추가한후

shell>sysctl -p

커널파라미터 적용


RS1

DEVICE=tunl0

onBOOT=yes

BOOTPROTO=static

IPADDR=210.224.223.10

NETMASK=255.255.255.0


RS2

DEVICE=tunl0

onBOOT=yes

BOOTPROTO=static

IPADDR=210.224.223.10

NETMASK=255.255.255.0


또는 각 리얼서버에서


RS1

shell>ifconfig tunl0 210.224.223.10 up

가상아이피를 IPIP Tunnel에 등록한다.

RS2

shell>ifconfig tunl0 210.224.223.10 up

가상아이피를 IPIP Tunnel에 등록한다.


클라이언트에서 가상아이피 210.224.223.10으로 접속하면 우리는 느끼지 못하지만

가중치 최소연결 방식을 이용해서 RV1,RV2 서버 중에 접속자가 작은 서버로 된다.

RV1 서버에 장애가 있다면 RV2 서버로 접속하게 된다.


4. 참고 문헌 & 사이트 정보


http://www.linuxvirtualserver.org

http://linux-ha.org/

http://eelco.maljaars.net/ultramonkey-rhel4.html


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기

제다이 07-05-17 07:27
 
안년하세요? 나진아빠님.
오랫만에 뵙네요... ^^
땡땡이 07-08-09 19:27
 
질문있습니다!!

LVS설정 세번째 방법에서.. ip tunl0 아래와 같이 설정하는 거.. 어떻게 하는 거죠????


DEVICE=tunl0

ONBOOT=yes

BOOTPROTO=static

IPADDR=210.224.223.10

NETMASK=255.255.255.0
나진이아빠 07-10-24 14:34
 
/etc/sysconfig/network-scripts/ 및에 ifcfg-tunl0 파일에 만드시면 됩니다.
아니면 ifconfig tunl0 192.168.0.167 up 이렇게 해도 됩니다.
웅스 09-04-20 17:10
 
리얼서버가 타베포판(ubuntu,Fedora)일시 동작을 하지 않습니다. Centos에서는 정상작동으로 하고 이상하게 리얼서버가 다른 베포판일경우 tunneling만 되지 않습니다. tcpdump로 잡아보면 패킷이 리얼서버까지 전달이 되는데 동작이 안되네요.. 조언을 얻을 수 있을까요? 동일 설정 방법으로 Centos나 SUlinux의 경우 tunneling도 잘 동작 합니다..