'lvs'에 해당되는 글 4건

  1. 2009.11.27 ipvsadm을 이용한 LVS 시스템 구축
  2. 2009.09.24 CentOS에서 ipvsadm으로 Virtual Server 구축
  3. 2009.02.02 Direct Routing을 통한 LVS(Linux Virtual Server) 구현
2009.11.27 22:29

ipvsadm을 이용한 LVS 시스템 구축

Linux Virtual Server 란?

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 시스템이라 생각된다.


출처 : 리눅스포탈


Trackback 0 Comment 0
2009.09.24 13:21

CentOS에서 ipvsadm으로 Virtual Server 구축

기존에 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


이상이다.


출처 : http://www.bongbong.net

Trackback 0 Comment 0
2009.02.02 09:43

Direct Routing을 통한 LVS(Linux Virtual Server) 구현

따라하기 참고주소: http://kldp.org/KoreanDoc/html/Virtual_Server-KLDP/Virtual_Server-KLDP.html
따라하기 참고주소: http://www.linuxvirtualserver.org/VS-IPTunneling.html
소프트웨어 다운로드: http://www.linuxvirtualserver.org/software/ipvs.html

가상 ip: 192.168.0.5
Load Balancer 1대: 192.168.0.6
Real Server 2대: 192.168.0.7~8

참고: ipvs 는 커널 2.6에 포함되어 있으므로 기존 ipvs 패치 모듈을 따로 설치하지 않아도 된다!!!!

admin tool 다운로드:
# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

# tar xvfz ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
# make
# make install

커널 옵션 설정(load balancer 만)
------------------------------------
cd /usr/src/linux
make menuconfig

Networking --->
  Networking options  --->
    IP: Virtual Server Configuration  --->
<*> IP virtual server support (EXPERIMENTAL)
  x x[ ]   IP virtual server debugging      
  x x(12)  IPVS connection table size (the Nth power of 2) (NEW)
  x x---   IPVS transport protocol load balancing support
  x x[*]   TCP load balancing support                   
  x x[ ]   UDP load balancing support (NEW)             
  x x[ ]   ESP load balancing support (NEW)             
  x x[ ]   AH load balancing support (NEW)              
  x x---   IPVS scheduler                               
  x x<*>   round-robin scheduling                       
  x x<*>   weighted round-robin scheduling              
  x x<*>   least-connection scheduling                  
  x x< >   weighted least-connection scheduling (NEW)   
  x x< >   locality-based least-connection scheduling (NEW)
  x x< >   locality-based least-connection with replication scheduling (NE
  x x< >   destination hashing scheduling (NEW)           
  x x< >   source hashing scheduling (NEW)                
  x x< >   shortest expected delay scheduling (NEW)       
  x x< >   never queue scheduling (NEW)                   
  x x---   IPVS application helper                        
  x x< >   FTP protocol helper (NEW)   

make; make install


1) Load Balancer 서버에서 가상 ip 설정하기
----------------------------------------------
ifconfig eth0:0 192.168.0.5 netmask 255.255.255.255 broadcast 192.168.0.5 dev eth0
route add -host 192.168.0.5 dev eth0:0

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0E:0C:4F:36:AD
          inet addr:192.168.0.6  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1
          RX packets:694 errors:0 dropped:0 overruns:0 frame:0
          TX packets:444 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:457783 (447.0 Kb)  TX bytes:43447 (42.4 Kb)
          Base address:0x7440 Memory:fc220000-fc240000

eth0:0    Link encap:Ethernet  HWaddr 00:0E:0C:4F:36:AD
          inet addr:192.168.0.5  Bcast:192.168.0.5  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1
          Base address:0x7440 Memory:fc220000-fc240000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.5     0.0.0.0         255.255.255.255 UH        0 0          0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 eth0


tcp 25번 서비스 추가, 스케쥴링은 round-robin 방식
# ipvsadm -A -t 192.168.0.5:25 -s rr

real server 추가, gateway 방식 사용
#  ipvsadm -a -t 192.168.0.5:25 -r 192.168.0.7 -g
#  ipvsadm -a -t 192.168.0.5:25 -r 192.168.0.8 -g
(load balancer를 real server로 활용하려면... ipvsadm -a -t 192.168.0.5:25 -r 127.0.0.1 -g )

참고: man ipvsadm
       [packet-forwarding-method]
              -g,  --gatewaying   Use gatewaying (direct routing). This is the default.
              -i, --ipip  Use ipip encapsulation (tunneling).
              -m, --masquerading  Use masquerading  (network  access  translation, or NAT).

등록된 서비스 확인하기
# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.5:smtp rr
  -> 192.168.0.8:smtp             Route   1      0          3
  -> 192.168.0.7:smtp             Route   1      0          3

 

2) Real Server ip 설정하기(7, 8번 장비에서)
-----------------------------------------------
# ifconfig lo:0 192.168.0.5 netmask 255.255.255.255 broadcast 192.168.0.5 up
# route add -host 192.168.0.5 dev lo:0


# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:04:23:C4:A8:02
          inet addr:192.168.0.7  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2215 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1891 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2891980 (2.7 Mb)  TX bytes:146520 (143.0 Kb)
          Base address:0xec80 Memory:febe0000-fec00000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1401 (1.3 Kb)  TX bytes:1401 (1.3 Kb)

lo:0      Link encap:Local Loopback
          inet addr:192.168.0.5  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:16436  Metric:1


# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.5     0.0.0.0         255.255.255.255 UH        0 0          0 lo
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 eth0


3) 테스트
-------------
telnet 192.168.0.5 25 하면
7번 및 8번 장비의 smtp 데몬이 차례로 응답을 하게 된다.


부가설명: http://www.linuxvirtualserver.org/how.html
virtual server(이하 가상서버)는 3가지 방식으로 구현된다.
1) NAT를 이용한 가상서버
   TCP/IP 프로토콜을 지원하는 어떤 서버든 적용가능하지만, 시스템의 병목현상으로 10여대 정도가 적당하다.
2) IP 터널링을 이용한 가상서버
3) Direct Routing을 이용한 가상서버
   IP 터널링을 이용한 가상서버와 마찬가지로 가상서버의 확장성을 증가시켜 주지만, 동일 물리적 segment안에 load balancer와 real server가 같이 있어야 한다.
   위의 가이드는 Direct Routing을 이용한 가상서버 셋팅이다. 


참고, ktcpvs 툴 다운로드 및 설치: 어플리케이션 레벨의 load balancing 구현
svn co http://svn.linuxvirtualserver.org/repos/ktcpvs/trunk/ ktcpvs

참고, tcpsp: tcp splicing 구현
svn co http://svn.linuxvirtualserver.org/repos/tcpsp/trunk/ tcpsp

http://blog.naver.com/hackies?Redirect=Log&logNo=20013591898
오래된 다운로드 주소: http://tunelinux.pe.kr/clustering/lvs/software/

참고, NAT 이용한 LVS 구성: http://kldp.org/node/20158



회사에서 Load Balancing을 하기위해 LVS를 구축해봤습니다.

저는 그냥 Round Robin으로 구축했습니다만, 부하 분산 알고리즘은 여러가지가 있으니 그중에 하나만 선택하시면 될것 같습니다.

 

인터넷에서 찾아보니 LVS/NAT라는 방식이 제일 간단하고 쉽다고 나와있는데 제가 해본봐로는 절대 쉬운방법이 아니었습니다.

쉬운 방법이 맞을 순 있는데, 인터넷상의 자료들이 꼭 한두개를 빼먹은것 같더군요.

또한 다들 옛날 버전만 있어서 명령어도 약간씩 안맞습니다.

그리고 LVS/DR이라는 방법이 많은 수의 서버도 커버할 수 있으니 좋은 방법입니다.

 

제가 한 방법을 설명드리지요..

우선 커널은 2.4.23-8버전을 이용했습니다.

커널 컴파일시 다음의 옵션은 꼭 체크해주세요.

 

Code maturity level options --->
    [*] Prompt for development and/or incomplete code/drivers

Networking options --->
    [*] Network packet filtering (replaces ipchains)
    [ ]   Network packet filtering debugging
    ...
      IP: Netfilter Configuration  --->
      IP: Virtual Server Configuration  --->
<M> virtual server support (EXPERIMENTAL)
[*]   IP virtual server debugging
(12)   IPVS connection table size (the Nth power of 2)
--- IPVS scheduler
<M>   round-robin scheduling
<M>   weighted round-robin scheduling
<M>   least-connection scheduling scheduling
<M>   weighted least-connection scheduling
<M>   locality-based least-connection scheduling
<M>   locality-based least-connection with replication scheduling
<M>   destination hashing scheduling
<M>   source hashing scheduling
--- IPVS application helper
<M>   FTP protocol helper

그리고 커널 컴파일을 해서 새로운 커널로 부팅하세요.

 

http://www.linuxvirtualserver.org/software/ipvs.html

이곳에서 ipvsadm을 다운 받으세요.

요놈이 로드 분산을 control하는 놈입니다. 실 서비스에 넣었다 뺏다를 조절한다든지 로드 분산 알고리즘을 고를 수 있게 하는 놈입니다.

하여간. 위 링크에서 ipvsadm-1.21-10.src.rpm (for 1.0.4 or later) - October 27, 2004 를 다운받으세요. 아니면 http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-10.src.rpm 에서 직접 받으시던지.

 

아무튼 이놈을 받아서 rpm -ivh ipvsadm-1.21-10.src.rpm 를 실행시키세요.

그럼 /usr/src/redhat/SOURCES/밑에 ipvsadm-1.21.tar.gz파일이 보이죠?

이걸 압축푸세요. 그럼 ipvsadm-1.21디렉토리가 생성되고 ipvsamd-1.21디렉토리로 들어가세요

README파일을 열어서 보시면 내용이 나와있습니다.

 

//-- 1차수정

cd /usr/include

mv asm asm.old

mv linux linux.old

ln -s /usr/src/linux/include/asm-i386 asm

ln -s /usr/src/linux/include/asm-generic asm-generic

ln -s /usr/src/linux/include/linux linux

mv net net.old

ln -s /usr/src/linux/include/net net

 

여기까지 무엇을 한것이냐하면, 기존 커널에서 새로운 커널로 업그레이드 되면서 include파일안에 새로운 파일들이 추가가 된것을 링크를 걸어준것입니다.

따라서 /usr/src/linux 까지는 여러분이 다운받으신 새로운 커널의 패스입니다.

그 다음부터는 아래를 따라하시면 됩니다.

//-- 1차수정 끝

 

간단히 명령어만 서술한다면

/usr/src/redhat/SOURCES/ipvsadm-1.21/에서

make

make install

이렇게만 하면 ipvsadm파일이 생성되서 /sbin 디렉토리에 들어가 있습니다.

 

자. 이제 준비는 거의 끝난것 같군요..

ip정의를 다음과 같다고 합시다.

Balancer(로드를 분산해 주는놈)

  실제 IP : 192.168.0.20

  서비스용 IP : 192.168.0.50 (이건 아래서 설정하는게 나옵니다.)

실제 서비스할 서버들

  실제 서버1 IP : 192.168.0.100

  실제 서버2 IP : 192.168.0.101

이렇다고 가정합시다. (여기서는 사설 IP를 썻지만 실제 서비스 상황에 맞는 IP로만 바꿔주시면 됩니다.)

 

우선 Balancer에서 ifconfig를 해보세요.

eth0      Link encap:Ethernet  HWaddr 00:C0:XX:EA:71:EC
          inet addr:192.168.0.20  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2327 errors:0 dropped:0 overruns:0 frame:0
          TX packets:192 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:173161 (169.1 Kb)  TX bytes:23786 (23.2 Kb)
          Interrupt:12 Base address:0xd000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:700 (700.0 b)  TX bytes:700 (700.0 b)

이런식으로 나오겠죠?

이제 eth0에 서비스용 가상 ip를 매핑합니다.

ifconfig eth0:0 192.168.0.50  이렇게 명령을 치고 ifconfig를 해보면

eth0      Link encap:Ethernet  HWaddr 00:C0:26:EA:71:EC
          inet addr:192.168.0.20  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2703 errors:0 dropped:0 overruns:0 frame:0
          TX packets:311 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:206594 (201.7 Kb)  TX bytes:35052 (34.2 Kb)
          Interrupt:12 Base address:0xd000

eth0:0    Link encap:Ethernet  HWaddr 00:C0:26:EA:71:EC
          inet addr:192.168.0.50  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2703 errors:0 dropped:0 overruns:0 frame:0
          TX packets:312 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:206594 (201.7 Kb)  TX bytes:35390 (34.5 Kb)
          Interrupt:12 Base address:0xd000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:700 (700.0 b)  TX bytes:700 (700.0 b)

이렇게 나오죠? 그럼 eth0에 2개의 ip가 매핑이 된겁니다.

즉 eth0장치는 192.168.0.20, 192.168.0.50의 2개의 ip가 매핑이 되었습니다.

 

이제 ipvsadm를 설정하겠습니다.

balancer에서 다음 명령을 입력하세요.

echo 1 > /proc/sys/net/ipv4/ip_forward

ipvsadm -A -t 192.168.0.50:80 -s wlc

ipvsadm -a -t 192.168.0.50:80 -r 192.168.0.100:80 -g

ipvsadm -a -t 192.168.0.50:80 -r 192.168.0.101:80 -g

echo부분은 ipvsadm를 하기위한 커널 설정부분이며

ipvsamd -A -t 192.168.0.50:80... 부분은 Load Balancer에 192.168.0.50서버의 80번 포트로 들어오는 서비스를 Load Balance를 하겠다는 걸 설정한겁니다.

그리고 wlc는 Load Balance 알고리즘을 least connection(적은 수의 서비스를 하는 놈에게 우선 배당)알고리즘으로 한다는 것이고 wrr로 하면 Load Balance알고리즘을 Round Robin(그냥 평등하게 한번씩만 서비스를 분배)알고리즘으로 하겠다는 겁니다.

각각의 서비스에 맞는걸 골라 쓰시면 됩니다.

그리고 밑에 2개는 192.168.0.50:80 으로 들어오는 요청을 192.168.0.100:80과 192.168.0.101:80번의 2대의 서버가 나누어서 처리를 하겠다는 겁니다.

 

이제 Balancer쪽은 모두다 된것 같군요.

이제 실제 서비스를 하는 쪽을 설정을 할 차례입니다.

실제 서비스를 할 서버들은 hidden patch라는걸 해야 합니다.

뭐 복잡하건 아니니 찾아서 해보세요.
 

실제 서비스할 서버들에서 다음명령들을 입력합니다.

echo 1 > /proc/sys/net/ipv4/conf/lo/hidden
echo 1 > /proc/sys/net/ipv4/conf/default/hidden
echo 1 > /proc/sys/net/ipv4/conf/all/hidden

복잡한 설명이 필요하니 그냥 한다고만 생각하세요.

그리고 이렇게 할경우 매번 부팅 될때마다 최기화 되어버리니 다음과 같이 해주면

재부팅 되도 위의 값이 그대로 적용됩니다.

/etc/sysctl.conf 수정

net.ipv4.conf.all.hidden = 1
net.ipv4.conf.lo.hidden = 1
net.ipv4.conf.default.hidden = 1

이제 실서비스할 서버에서 남은 명령은 다음것 한개 뿐입니다.

 

/sbin/ifconfig lo:0 192.168.0.50 netmask 255.255.255.255 up

이렇게 하면 이제 http://192.168.0.50을 치면 그에 대한 응답은 192.168.0.100, 192.168.0.101 2개의 서버가 응답을 해줍니다.

/sbin/ifconfig lo:0 192.168.0.50 netmask 255.255.255.255 up 이것도 /etc/rc.d/rc.local 파일에 등록을 해주면 서버가 다시 시작하면서 자동으로 서비스에 붙게 됩니다.

이것으로 LVS설정 끝..

 

다음에는 hidden patch와 Heart Beat를 프로그램 소스로 올려보도록 하겠습니다. ^^;

Heart Beat란 서버 3대로 서비스를 하다가 한개가 죽으면 죽은 놈에겐 요청을 하지 않도록

Load Balancer의 설정을 변경해야겠죠? 이런건 Heart Beat라고 합니다.

심장이 뛰는지 안뛰는지 감시하는거죠.. ( 죽은 서버에게 일시키면 너무 잔인하잖아요... )



LVS 모니터링은 아래와 같이...

- watch -n 1 '/sbin/ipvsadm -l --rate'

- watch -n 1 '/sbin/ipvsadm --list'


Trackback 0 Comment 0