카테고리 없음

하워드 2007. 4. 24. 10:07

 

 

Direct Routing 부하 분산 방식

실제 서버와 부하 분산 서버 사이에서 가상 IP를 공유하는 방식으로 부하 분산 서버와 실제
작업 서버에 모두 동일한 가상 IP를 가지도록 구성한다.
가상 IP가 설정된 인터페이스에 arp caching이 남으면 사용자가 초기에 연결된 서버와만
통신이 이루어지게 되므로 커널 차원에서 arp hidden patch가 필요하다.



Load Balance server ( ip : 192.168.1.150 )

1. 2.6.18 커널 컴파일 - Virtual Server Configuration 옵션 필요

2. www.linuxvirtualserver.org 에서 ipvsadm 다운로드
  Red hat 경우 source rpm 으로 다운받아 rpmbuild --rebuild 가능
  그 외에는 source 로 받아 source 컴파일을 한다. 

3. ]# ln -sf /usr/src/kernel/2.6.9-5.EL-i686 /usr/src/linux
  ipvsadm 소스에서 linux kernel의 head file 과 라이브러리 파일을 이용하게끔
  만들어져 있고, 이는 /usr/src/linux 하위의 경로로 코딩이 되어있으므로 링크를 건다.

4. ipvsadm 설치
    ipvs 테이블에 Real Server 들의 ip 설정을 편하기 하기 위한 유틸 (?) -_-;;;
    이것 역시 커널 컴파일 후에 설치 가능 ㅠㅠ!!!

    ]# tar zxvf ipvsadm-1.24.tar.gz

5. ]# cd ipvsadm-1.24
6. ]# make
7. ]# make install
8. ]# ln -sf /sbin/ipvsadm /usr/sbin/ipvsadm

9. 설치 확인
  ]# ipvsadm
  IP Virtual Server Version 1.2.1 (size=4096)
  Prot LocalAdress:Port Scheduler Flags
  -> RemoteAddress:Port  Forward Weight ActiveConn InActConn

10. 정책설정
    ]# ipvsadm -A -t 192.168.1.151:80 -s wlc
    ]# ipvsadm -a -t 192.168.1.151:80 -r 192.168.1.114 -g -w 1
    ]# ipvsadm -a -t 192.168.1.151:80 -r 192.168.1.116 -g -w 2

    ipvsadm 옵션 
    -s : 스케줄링 알고리즘 설정 
    wlc : -s 의 옵션으로 weight least connection scheduling 의 약자.
               서버마다 성능의 가중치를 부여하여 그 가중치만큼 씩 분배 
    -A : 서비스를 추가 
    -t : tcp 서비스를 추가 
    -a : add server (-e: edit, -d: delete) 
    -r : 실제로 서비스 할 서버를 의미 
    -g : 다이렉트 라우팅 
    -w + 숫자 : 가중치 설정, 값 부여

11. 정책설정 확인
    ]# ipvsadm
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port  Forward Weight ActiveConn InActConn
    TCP  192.168.1.151:ssh wlc
    TCP  192.168.1.151:http wlc
    -> 192.168.1.116:http  Route  2      0          0       
    -> 192.168.1.114:http  Route  1      0          0

12. ipvsadm 설정파일 저장
    ]# vi /etc/sysconfig/ipvsadm
    ipvsadm -A -t 192.168.1.151:80 -s wlc
    ipvsadm -a -t 192.168.1.151:80 -r 192.168.1.114 -g -w 1
    ipvsadm -a -t 192.168.1.151:80 -r 192.168.1.116 -g -w 2

13. VIP 설정
    ]# cd /etc/sysconfig/network-scripts/
    ]# vi ifcfg-eth0:0
    DEVICE=eth0:0
    BOOTPROTO=static
    BROADCAST=192.168.1.255
    HWADDR=00:50:BF:3F:5B:75
    IPADDR=192.168.1.151
    NETMASK=255.255.255.255
    NETWORK=192.168.1.0
    ONBOOT=yes
    TYPE=Ethernet

    * 기존의 ifcfg-eth0 와 ifcfg-lo 는 수정하지 않고 새로 만든다.
    * 터미널 접속이 다운되는 현상을 막기 위해서 netmask 값은 반드시 255.255.255.255 로
      설정한다.

    ]# service network restart
    ]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:50:BF:2E:AE:CD 
              inet addr:192.168.1.150  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:6612 errors:0 dropped:0 overruns:0 frame:0
              TX packets:4985 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:744779 (727.3 KiB)  TX bytes:908969 (887.6 KiB)
              Interrupt:11 Base address:0xe800

    eth0:0    Link encap:Ethernet  HWaddr 00:50:BF:2E:AE:CD 
              inet addr:192.168.1.151  Bcast:192.168.1.255  Mask:255.255.255.255
              UP BROADCAST RUNNING MULTICAST  MTU:1500  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:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:11 Base address:0xe800
 
    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:295 errors:0 dropped:0 overruns:0 frame:0
              TX packets:295 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:11891 (11.6 KiB)  TX bytes:11891 (11.6 KiB)

13. ]# cd /etc/
    ]# vi sysctl.conf
    net.ipv4.ip_forward = 0 을 1 로 값을 변경

14. 적용
    ]# 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



Real Server ( ip : 192.168.1.114, 192.168.1.116 )

1. 2.6.18 커널 컴파일 (hidden 적용 가능한 설정을 위해 -> 아마도.. iptables 관련)

2. hidden patch - 다운로드 경로 : http://www.ssi.bg/~ja
  hidden-2.6.17-1.diff 파일 다운로드
  ]# cd /usr/src/linux (커널 컴파일 경로)
  ]# cat hidden-diff 파일 경로 | patch -p1

3. VIP 설정
  ]# cd /etc/sysconfig/network-scripts/
  ]# vi ifcfg-lo:0
  DEVICE=lo:0
  IPADDR=192.168.1.151
  NETMASK=255.255.255.255
  NETWORK=192.168.1.0
  BROADCAST=192.168.1.255
  ONBOOT=yes

  * 기존의 ifcfg-eth0 와 ifcfg-lo 는 수정하지 않고 새로 생성한다.
  * 여기서도 netmask 값은 같은 이유로 반드시 255.255.255.255 로 설정한다.

  ]# service network restart
  ]# ifconfig
  eth1      Link encap:Ethernet  HWaddr 00:0B:6A:BF:45:25 
            inet addr:192.168.1.114  Bcast:192.168.1.255  Mask:255.255.255.0
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:60524 errors:0 dropped:0 overruns:0 frame:0
            TX packets:106187 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:15645075 (14.9 MiB)  TX bytes:75797923 (72.2 MiB)
            Interrupt:10 Base address:0x4e00
 
  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:563 errors:0 dropped:0 overruns:0 frame:0
            TX packets:563 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:0
            RX bytes:10550 (10.3 KiB)  TX bytes:10550 (10.3 KiB)
 
  lo:0      Link encap:Local Loopback 
            inet addr:192.168.1.151  Mask:255.255.255.255
            UP LOOPBACK RUNNING  MTU:16436  Metric:1
            RX packets:60532 errors:0 dropped:0 overruns:0 frame:0
            TX packets:106204 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:0
            RX bytes:15645555 (14.9 MiB)  TX bytes:75799949 (72.2 MiB)


4. hidden 설정
  ]# cd /etc/
  ]# vi sysctl.conf
  net.ipv4.conf.all.hidden=1
  net.ipv4.conf.lo.hidden=1

5. arp 문제 해결 설정
  ]# cd /etc/
  ]# vi sysctl.conf
  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

6. 설정 적용
  ]# sysctl -p
  net.ipv4.ip_forward = 0
  net.ipv4.conf.default.rp_filter = 1
  net.ipv4.conf.default.accept_source_route = 0
  kernel.sysrq = 0
  kernel.core_uses_pid = 1
  net.ipv4.conf.all.hidden = 1
  net.ipv4.conf.lo.hidden = 1
  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



각 서버에 apache를 설치하고, httpd.conf를 수정한다.

]# cd apache 설치경로/conf/httpd.conf

1. ServerName 에 자신의 ip 입력
2. KeepAlive = Off
3. MaxKeepAliveRequest 1



테스트

Real server (114, 116) apache/htdocs 에 index.html 을 각각 간단하게 만든다.
<html>
<head></head>
<body><font color=red>test ip 114</font></body></html>
 
<html>
<head></head>
<body><font color=blue>test ip 116</font></body></html>

서버 별로 화면이 변경되는지 확인을 하기 위해 color를 다르게 지정.
서버 외 다른 PC 로 192.168.1.151 (Load Balance server ip) 를 주소에 적고
새로 고침을 계속 누르면 빨간색과 파란색이 번갈아가면서 화면에 보이는 것을 확인할 수 있다.

 

 

 

출처 : Alpha (α)
글쓴이 : NeverSayDie 원글보기
메모 :