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) 를 주소에 적고
새로 고침을 계속 누르면 빨간색과 파란색이 번갈아가면서 화면에 보이는 것을 확인할 수 있다.