· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
ipvsadm

ipvsadm/QuickStart


1.1. Notice

  • 작성 자 : 김석원 {segenny (at) gmail.com}
  • 작성 시작 : 2008-05-20
  • 마감 예정일 : 2008-05-29
※ ipvsadm 을 이용하는 로드 밸런싱은 이미 google에서도 많이 찾아 볼 수 있다. 이 글을 쓴 이유는
  • doc문서 관리 보단 이게 편하다.
  • 초보로서 google에서 찾아본 자료로는 이해 안되는 부분을 정리함(언제!)

1.2. 구현 환경

1. 서버
  • vmware
  • redhat enterprise 4 (update5) Linux Kernel 2.6.9
2. vmware 을 이용한 리눅스 설치
  • vmware을 이용하여 RHEL-4.5을 두번 설치한다.(한번 설치 후 복사하여 사용해도 뭐...)
3. 서버 환경
  • 아래 192.168.0.50 아래의 IP주소는 두개의 노드가 동일하게 같는 아이피 주소이다. 세팅이 진행 되면서 확인하고 아래의 그림은 참조만 한다.
===============================================================
|                                                             |
|              +-------------------------------+-------------------  Client    
|         192.168.0.50:eth0:1       dummy0:192.168.0.50       |      ========
|         192.168.0.10:eth0           eth0:192.168.0.11       |/---- |      |
|                        /-------------\                      /      ========
|       ====================          ====================   /|          | 
|       | Linux Box Master |          | Linux Box Slave  |  / |          | 
|       |  Direct Routing  |          |                  | /  |          | 
|       |                  |          |                  |/   |          | 
|       |   RealServer 1   |          |   RealServer 2   |    |          | 
|       ====================          ====================    |          | 
|              +---------------------------------------------------------+ 
|         hosts: cnode1                  hosts: cnode2        |
|                                                             |
===============================================================


1.3. Master Node

1.3.1. Whatis ipvsadm

  1. 2개 이상의 노르를 가진 클러스터링 시스템에서 커널내부의 IPVS테이블을 설정하고 유지하는 유틸리티
  2. IPVS테이블은 커널이 로드밸런서(Director)로 들어오는 패킷을 각각의 리얼서버 노드로 전달하기 위해 참조
  3. 2개의 프로토콜 지원 - TCP 와 UDP
  4. 3가지 방식의 패킷 포워딩 방식 지원 - NAT, tunneling, direct routing
  5. 4가지 스케둘링 알고리즘 지원
    • round robin
      • 순차적 방식을 이용해 네트워크 연결을 서로 다른 서버에 연결
      • 실제 서버의 연결 개수나 반응시간 등은 고려를 하지 않음
    • weighted round robin
      • 가중치기반 라운드 로빈 스케줄링
      • 서버에 서로 다른 처리 용량(가중치)을 지정 가능. 기본 가중치는 1이다.
        • 예) 서버가 A,B,C 이고 각각의 가중치가 4,3,2 일 경우 스케줄링 순서는 ABCABCABA
      • 라운드 로빈 스케줄링은 가중치 기반 라운드 로빈 스케줄링의 특별한 한 종류이며 모든 가중치가 도일한 경우
      • 장단점
        • 실제 서버의 네트워크 접속 수를 계산할 필요가 없음
        • 스케줄링의 과부하가 적어 더 많은 실제 서버를 운영 가능
        • 요청에 대한 부하가 매우 많을 경우 실제 서버사이에 동적인 부하 불균형 상태 발생 가능
    • least-connection
      • 최소 접속 스케줄링
      • 가장 접속이 적은 서버로 요청을 직접 연결 하는 방식
      • 각 서버에서 동적으로 실제 접속한 숫자를 세어야 하므로 동적인 스케줄링 알고리즘 중의 하나이다.
      • 접속 부하가 매우 큰 경우에도 아주 효과적
      • 가장 빠른 서버에서 더 많은 네트워크 접속을 처리할 수 있음
      • 실제로는 TCP의 TIME_WAIT 상태때문에 아주 좋은 성능을 낼 수는 없음
      • 다양한 처리용량을 지난 서버로 구성되었을 경우 부하분산이 효율적으로 되지 못할 수 있음
    • weighted least-connection
      • 가중치 기반 최소 접속 스케줄링
      • 최소 접속 스케줄링 한 부분으로서 각각의 실제 서버에 성능 가중치를 가능
      • 가중치가 높은 서버에서 더 많은 요청을 받을 수 있음
      • 가중치의 비율인 실제 접속자수에 따라 네트워크 접속이 할당된다. 기본 가중치는 1
      • 서버들이 같은 처리 용량을 가졌을 때는 최소 접속 스케줄링과 동일
※발췌 : http://it.dsu.ac.kr/pdf/ha_webservice.pdf
※참고 : http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.ipvsadm.html

1.3.2. Install ipvsadm

1. RPM 설치
  • 여기서 필자는 ipvsadm-1.24-6.i386.rpm 아주 쉽게 인스톨 하였다. 물론 소스로 빌도 하여도 상관 없다. 소스 빌드 시 "make rpm"으로 하여 다음 번 사용시 유용하게 설치 하여도 상관없다.
작업 서버 [Master]
===================================================================================
[root@cnode1 ~]# rpm -Uvh ipvsadm-1.24-6.i386.rpm
warning: ipvsadm-1.24-6.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing...                ########################################### [100%]
   1:ipvsadm                ########################################### [100%]
[root@cnode1 ~]# 
[root@cnode1 ~]# ipvsadm -version
ipvsadm v1.24 2003/06/07 (compiled with popt and IPVS v1.2.0) // 설치를 확인 한다.
[root@cnode1 ~]# _

1.3.3. Conguration - ipvsadm

  • ipvs테이블에 Real Server(클라이언트에 데이터를 공급할 서버)를 지정한다.
  • 아래와 같은 설정으로는 Master & Slave node를 Real Server 로 등록한 상태이다.
  • 참고로 두개의 리얼서버 가중치를 1을 줬을 경우 lc의 알고리즘과 같다.
작업 서버 [Master]
===================================================================================
[root@cnode1 ~]# ipvsadm -A -t 192.168.0.50:80 -s wlc
[root@cnode1 ~]# ipvsadm -a -t 192.168.0.50:80 -r 192.168.0.11:80 -g -w 1
[root@cnode1 ~]# ipvsadm -a -t 192.168.0.50:80 -r 192.168.0.10:80 -g -w 1
[root@cnode1 ~]# /etc/init.d/ipvsadm save
[root@cnode1 ~]# _

1.3.4. Conguration - ip_forward

  • 패킷 포워드를 위해 다음과 같이 세팅을 한다.
작업 서버 [Master]
===================================================================================
[root@cnode1 ~]# vi /etc/sysctl.conf 
net.ipv4.ip_forward = 1 // 0 에서 1로 수정
[root@cnode1 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
[root@cnode1 ~]#_

1.4. Slave Node

1.4.1. Whatis arptables_jf

  1. 준비중 ....

1.4.2. Install arptables_jf

1. RPM 설치
  • 여기서 필자는 arptables_jf-0.0.8-2.i386.rpm 아주 쉽게 인스톨 하였다.
  • ifconfig에 NOARP 옵션이 있다. (ex: ifconfig -a {dev} -arp )
작업 서버 [Slave]
===================================================================================
[root@cnode2 ~]#  rpm -Uvh arptables_jf-0.0.8-2.i386.rpm    
warning: arptables_jf-0.0.8-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...                ########################################### [100%]
   1:arptables_jf-0.0.8-2   ########################################### [100%]
[root@cnode2 ~]# 
[root@cnode2 ~]# arptables -V
arptables v0.0.8 // 설치를 확인 한다.
[root@cnode2 ~]# _

1.4.3. Configuration - arptables

1. 192.168.0.50 를 요청하는 나른 노드의 "Arp Request" 패킷은 모두 무시한다.
  • 이러므로서, 같은 네트워크(콜리전 도메인)안에서 두개 이상의 아이피를 가질 수 있다.
작업 서버 [Slave]
===================================================================================
[root@cnode2 ~]# arptables -A IN -j DROP -d 192.168.0.50
[root@cnode2 ~]# /etc/init.d/arptables_jf save
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]
[root@cnode2 ~]# _

1.4.4. Configuration - Set virtual IP

  • Dummy0 net/dev 만들고 확인 한다.
작업 서버 [Slave]
===================================================================================
[root@cnode2 ~]# ifconfig dummy0 192.168.0.50 netmask 255.255.255.255 broadcast 192.168.0.50 up
[root@cnode2 ~]# ifconfig
dummy0    Link encap:Ethernet  HWaddr 00:01:02:03:04:03  
          inet addr:192.168.0.50  Bcast:192.168.0.120  Mask:255.255.255.255
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:210 (210.0 b)

eth0      Link encap:Ethernet  HWaddr 00:01:02:03:04:02  
          inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:54613114 errors:0 dropped:0 overruns:0 frame:0
          TX packets:154669808 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4190538150 (3.9 GiB)  TX bytes:524576645 (500.2 MiB)
          Interrupt:11 Base address:0xc000 
[root@cnode2 ~]# 

1.5. Test

  1. 준비
    • Master & Slave 각 node 80포트로 서비스할 웹 서버를 설치 한다.
    • 각 서버의 동일한 index.html파일을 만들고 파일 내용은 hostname 을 적어 준비한다.
  2. 접속
  3. 확인
    • Refresh를 통해 index.html 파일을 보고 로드 밸런싱이 되는지 확인 한다.
  4. 참조
    • (정확히 말하면 리눅스 다이렉트 라우팅에 의한 로드 밸런싱이지, 클라이언트 대상으로 한 로드 밸런싱은 아니다. 다만 로드 밸런싱 하는 비슷한 효과를 낼뿐.....)

ID
Password
Join
To criticize the incompetent is easy; it is more difficult to criticize the competent.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-05-22 10:11:43
Processing time 0.0079 sec