Linux 기반의 Load Balance 프로젝트 By Hyun Chul,Kim k072@godpeople.com 017-347-1433
목 차 7. 응용분야 1. 개요 2. 목표 3. 설계 주안점 4. 시스템 특징 및 장점 5. 시스템 구현 목 차 1. 개요 2. 목표 3. 설계 주안점 4. 시스템 특징 및 장점 5. 시스템 구현 6. Technology 7. UltraMonkey 이용한 LVS 구축 . 관리 페이지 7. 응용분야 8. 기대효과
1.개요 인터넷의 폭발적 성장과 생활 수단에 비중 커짐에 따라 정보 전송량도 급속히 증가. 유명세를 타는 인터넷사이트는 하루에 억대의 방문을 기록하는 곳도 있슴. 이러한 이유로 많은 시스템관리자들이 서버의 성능상 병목 문제 직면하게 되었지만 그 방법으로 서버의 자체 처리 용량을 늘려도 얼마 지나지 않아 쉽게 과부하에 도달한다. 요즘의 비지니스에 인터넷서비스가 필요조건으로 되어있으며 서버가 제공하는 인터넷상의 어떤 서비스도 단절 중단은 기업과 비지니스에 비용손실과 신뢰의 손실을 의미 하게 된다.
2.목표 더 높은 성능의 서버로 개선은 높은 비용과 함께 개선여지가 필요시마다 비용 발생. 확장성 용이, 비용대비 효율성이 높고, 높은 가용성을 요구하게 됨. 해결방법으로는 빠른 네트웍에 연결된 부하 분산 요소가 있다면 이러한 해결요구는 어느정도 수준에 서 해결될 것으로 보인다. L4 스위치의 장비로도 이러한 요소를 감당할 수 있지만 이 장비는 웬만한건 1천만원을 훌쩍 넘어버린다. 클러스터링을 이용하여 시스템의 부하를 분산시킴으로써 인터넷 서비스의 원할한 제공,기존 의 여러 대의 서버를 연결하여 적은 비용으로 보다 안정된 성능의 고효율 서버를 구축할 수 있는 1.Linux System 이용 Load Balancer구축 2.사용자가 쉽게 접근 및 수정을 하기 위하여 모니터링 프로그램을 구현 3.각 실험조건에 따라 테스팅 분석, 자료 도출함을 목적으로 한다.
3.설계주안점 Real Server의 부하량을 측정하여 스케줄링을 구현 IP 패킷 포워딩의 한 방법으로 Direct routing 구현 로드밸런서에서 백업서버로 fail-over기능 (heartbeat) Real Server간의 Redirect 기능 구현 Web base 실시간 상태 모니터링 구현.
4. 시스템 특징 및 장점 ■스케줄러(AGENT) 실시간으로 실제 서비스를 제공 하는 서버의 상태를 파악하여 로드밸런서의 부하분산정책에 반영시키는 동적 스케줄러 구현 ■Failover 시스템(Hearbeat,Ldirectord) 부하 분산 서버의 과도한 집중이나 시스템이상으로 주 로드밸런서가 다운 되었을 때 다른 기능을 하고 있던 서버가 부하분산 서버의 시스템을 이어받아 클라이언트에게 끊임 없는 고가용성 서비스를 제공 ■모니터링, 관리서버 PHP이용한 웹베이스에서 클러스터 전체의 시스템을 관리 할 수 있도록 구성 할 것이며클러스터 시스템이 구성되어 있는 네트웍의 노드를 주기적으로 관리 함으로서 항상 가용할 수 있는 실제 서버의 상태를 나타낼 수 있도록 하겠다.
5.시스템 구현 시스템구성도 LVS Load Balancing method LVS-Direct Routing Technology Test 장애 시나리오 Test 조건에 따른 결과 분석
LVS System Architecture Floating Address X.X.X.X Linux Director Linux Director Internet Heartbeat X.X.X.X X.X.X.X Real server 1 Real server 2 Real server 3
LVS Load Balancing method NAT 이용한 가상서버 IP 터널링 이용한 가상 서버 다이렉트 라우팅 이용한 가상 서버(적용) 리눅스 다이렉터는 다이렉트 라우팅을 이용해 가상 서버로 가는 연결만 처리 분리되어있는 네트워크 라우터를 통해 사용자에게 응답 패킷을 전송 가상 서버의 확장성을 매우 높일 수 있음 IP 터널링 방식에 비해 터널링에서 생기는 과부하가 없음
LVS-Direct Routing 사용자의 요청은 가상 IP 주소를 가진 부하분산서버로 간다 부하분산서버는 스케줄링 알고리즘에 따라 클러스터에서 실제 서버를 선택 접속을 기록하는 해시 테이블에 새로운 접속을 추가 부하분산서버에서 선택한 서버로 직접 패킷을 전송 리얼서버는 요청을 처리하고 결과를 사용자에게 직접 전송 Virtual IP Address3 request LinuxDirector Reply going to the client directly Real Server1 Real Server2 Real Server3 Real Server4
LVS 스케즐링 알고리즘 Round-Robin Scheduling 순차적 방식을 이용해 네트워크 연결을 서로 다른 서버에 연결 실제서버의 연결개수나 반응시간 등은 고려를 하지 않음 Weighted Round-Robin Scheduling 가중치기반 라운드 로빈 스케줄링 서버에 서로 다른 처리 용량(가중치)을 지정 가능. 기본 가중치는 1이다. 예) 서버가 A,B,C 이고 각각의 가중치가 4,3,2 일 경우 스케줄링 순서는 ABCABCABA 라운드 로빈 스케줄링은 가중치 기반 라운드 로빈 스케줄링의 특별한 한 종류이며 모든 가중치가 동일한 경우 장단점 실제 서버의 네트워크 접속 수를 계산할 필요가 없음 스케줄링의 과부하가 적어 더 많은 실제 서버를 운영 가능 요청에 대한 부하가 매우 많을 경우 실제 서버사이에 동적인 부하 불균형 상태 발생 가능
LVS 스케즐링 알고리즘2 Least-Connection Scheduling 최소 접속 스케줄링 가장 접속이 적은 서버로 요청을 직접 연결하는 방식 각 서버에서 동적으로 실제 접속한 숫자를 세어야 하므로 동적인 스케줄링 알고리즘중의 하나이다. 접속부하가 매우 큰 경우에도 아주 효과적으로 분산 수행 가장 빠른 서버에서 더 많은 네트워크 접속을 처리할 수 있음 실제로는 TCP의 TIME_WAIT 상태때문에 아주 좋은 성능을 낼 수는 없음 다양한 처리용량을 지난 서버로 구성되었을 경우 부하분산이 효율적으로 되지 못할 수 있음 Weighted Least-Connection Scheduling 가중치 기반 최소 접속 스케줄링 최소 접속 스케줄링의 한 부분으로서 각각의 실제 서버에 성능 가중치를 가능 가중치가 높은 서버에서 더 많은 요청을 받을 수 있음 가중치의 비율인 실제 접속자수에 따라 네트워크 접속이 할당된다. 기본 가중치는 1이다. 서버들이 같은 처리 용량을 가졌을 때는 최소 접속 스케줄링과 가중치가 있는 최소 접속 스케줄링 알고리즘이 동일
6.Technology Heartbeat Ldirectord ipvsadm
HeartBeat heartbeat프로토콜을 이용하는 오픈 소스 프로젝트 정해진 시간간격을 두고 특정한 패킷을 물리적으로 연결된 호스트에 보내 일정 시간 응답이 없으면 정해진 응급 복구 프로세스를 수행 이더넷 카드 혹은 시리얼케이블을 이용 각각의 호스트를 연결 Heartbeat 프로토콜로 연결된 호스트들은 리얼IP 이외에 가상 IP를 공유 Master 호스트가 서비스를 책임 Master 호스트에 문제 발생시 Standby 호스트가 가상 IP를 인계 받아 서비스 계속 →IP Address Takeover
Ldirectord 리얼서버의 상태를 모니터링 하는 PERL 스크립트 설정파일에 정해진 URL에 주기적으로 특정 문자열 요구 타임 아웃 , 응답된 문자열 유효성 등으로 서버 상태 결정 리얼서버의 다운 시 IPVS 테이블에서 삭제 리얼서버의 복구 시 IPVS 테이블에서 재 등록 다이렉트 라우팅은 Linux Director 서버의 IPVS 테이블을 이용해 커널에서 처리 모든 리얼서버가 다운되었을 경우 fall-back 서버가 응답 일반적인 경우 localhost Linux Director 서버도 웹 서비스 필요
Ldirectord 작동 방식 - service server port schedule Timeout real server ldirectord.conf (/etc/ha.d/) Kernel IPVS table (in Memory) - service server port schedule Timeout real server Test string ipvsadm ldirectord Test string return success Test string return Fail ! Test string request 1. ldirectord.conf 설정파일에 따라 커널 ipvs 테이블 설정 2 .real server 1에 테스트 문자열 요구 3. real server 1은 테스트 문자열 전송 4. 테스트문자 확인 5. real server 2에 테스트 문자열 요구 6. real server 2은 테스트 문자열 전송 7. 테스트문자 확인 불가능 (timeout ) 8. ipvsadm 이용 ipvs 테이블 변경 http (port 80) http (port 80) Real server 1 Real server 2
ipvsadm 2개 이상의 노드를 가진 클러스터링 시스템에서 커널내부의 IPVS 테이블을 설정하고 유지하는 유틸리티 IPVS테이블은 커널이 로드벨런서(Director)로 들어오는 패킷을 각각의 리얼서버 노드로 전달하기 위해 참조 2개의 프로토콜 지원 TCP 와 UDP 3가지 방식의 패킷 포워딩 방식 지원 NAT, tunneling, direct routing 4가지 스케줄링 알고리즘 지원 round robin, weighted round robin, least-connection weighted least-connection
7.UltraMonkey 이용한 LVS 구축 Topolpgies Cluster node 구성 자원 Real Server 설정 Linux Director Server 설정 LVS 서비스 동작확인 테스트 시나리오-Real Server 다운/복구
Topologies Internet Floating Address 211.169.219.230 Linux Director Heartbeat 211.169.219.189 211.169.219.213 Real server 1 Real server 2 Real server 3 211.169.219.198 211.169.219.209 211.169.219.215
Topologies-Review 2대의 Director 를 Heartbeat 으로 연결 한대의 Directors 는 운영 중(Master) 다른 한대는 운영중인 Director 를 감시 (hot stand-by) DNS 및 외부 클라이언트에는 이 가상 IP가 WWW 서비스로 등록 Director 는 가상 IP (211.169.219.230) 로 오는 패킷을 처리 각각의 리얼서버는 80 port 에서 Apache HTTP 서비스 운영 중 클라이언트의 접속은 LVS/DR 방식으로 리얼서버로 부하 분산 이후 클라이언트는 리얼서버 직접 연결
Cluster Node 구성 자원. HW – Director & Web node OS Network Intel P-III 1GMHz, 256MB RAM, 20GB HDD , RealTeck 8139 NIC OS Wowlinux 7.3 update (kernel 2.4.18) Install Network www.mingun.com : 211.169.219.230 ( Virtual IP) Ha1.mingun.com : 211.169.219.213 ( Director 1) Ha2.mingun.com : 211.169.219.189 ( Director 2) www1.mingun.com : 211.169.219.198 ( web node 1) www2.mingun.com : 211.169.219.209 ( web node 2) www3.mingun.com : 211.169.219.219 ( web node 3) Ha1 & ha2 시리얼 케이블 연결
Network 설정(공통) /etc/hosts 127.0.0.1 localhost.localdomain localhost 211.169.219.230 www.mingun.com www 211.169.219.213 ha1.mingun.com ha1 211.169.219.189 ha2.mingun.com ha2 211.169.219.198 www1.wowlinux.com www1 211.169.219.209 www2.wowlinux.com www2 211.169.219.215 www3.wowlinux.com www3
RealServer 설정공통(1) 리얼서버는 버츄얼 IP 주소(211.169.219.230)를 로컬주소로 인식하도록 설정되어야 함 loopback device 에 IP Alias 기능을 이용 /etc/sysconfig/network-scripts/ifcfg-lo:0 스크립트를 다음과 같이 설정 불필요한 경고 메시지를 없애기 위해 게이트웨이는 eth0 로 설정 /etc/sysconfig/network 파일을 확인한다. GATEWAYDEV=eth0 DEVICE=lo:0 IPADDR=211.169.219.230 NETMASK=255.255.255.255 NETWORK=211.169.219.0 BROADCAST=211.169.219.127 ONBOOT=yes NAME=loopback
Real Server설정공통(2) 각각의 web node에서 아파치 데몬이 서비스 되도록 ntsysv 이용 시작 스크립트 수정 위에서 설정한 IP alias 동작시키기 #/sbin/ifup lo /sbin/ifconfig 로 확인 가능. 주의 : Loopback 인터페이스가 네트워크의 모든 트래픽을 받아들일 수 있으니 반드시211.169.219.23 만을 로컬로 인식하도록 넷 마스크를 255.255.255.255 이용 각각의 web node에서 아파치 데몬이 서비스 되도록 ntsysv 이용 시작 스크립트 수정 /etc/ha.d/conf/ldirectord.cf 에 설정된 Index.html Test 페이지에 문자열을 포함하도록 설정 Test Page of www1.mingun.com Test Page of www2.mingun.com lo:0 Link encap:Local Loopback inet addr:211.169.219.230 Mask:255.255.255.255 UP LOOPBACK RUNNING MTU:3924 Metric:1
Real Server설정공통(4)-ARP응답문제 루프 백 디바이스에 엘리어스로 가상 IP를 추가한 경우 로컬네트워크의 ARP 요청에 요청이 로드밸런서로 가지 않고 리얼 서버가 먼저 응답하므로 부하분산이 되지 않는 문제가 생길 수 있다. ARP Response Real Server ARP Response Real IP Virtual IP Real IP Virtual IP ARP Request Real IP Virtual IP Client or Router ARP Response Director
Real Server설정공통(4)- ARP응답문제해결 커널 2.2.14부터 Hidden Device ( ARP Request 에 응답하지 않는 네트워크 디바이스 ) 기능을 지원 쉽게 ARP 문제를 해결 가능. 커널 2.4.X 부턴 Hidden 패치 필요. cd /usr/src/linux patch -p1 <../ipvs-0.2.5/contrib/patches/hidden-2.4.2-1.diff #make dep&&make clean&&make bzImage&&make modules && make modules_install 후 새로운 커널 이미지 만들어 부팅. Real server 의 loopback 디바이스가 ARP 요청에 응답하지 않도록 하기 위해 인터페이스를 hidden 으로 설정 /etc/sysctl.conf 파일에 아래 라인을 추가. 변경 사항을 활성화 하기 위해 /sbin/sysctl –p 참고: http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.arp_problem.html TIP : ARP응답이 제대로 해결 되었나 확인 할려면 Window pc(linux도 마찬가지인 것 같다)에서는 도스창에서 arp –a 를 했을때 Director서버에 맥어드레스가 나오면 정상이다 그렇지 않다면 각 RealServer가 제대로 패치가 안된 경우이다. # Enable configuration of hidden devices net.ipv4.conf.all.hidden = 1 # Make the loopback device hidden net.ipv4.conf.lo.hidden = 1
Directord 설정공통(1) 커널 버전 확인 RPM Package 구하기 2.2.14 이전에서는 커널 패치 필요. kernel 2.2.16은 곧바로 IPVS기능 사용가능 Kernel 2.4.X 도 동일. RPM Package 구하기 http://www.ultramonkey.org/2.0.1/installation.html
Director 설정 (2)- RPM Package install perl-XML-NamespaceSupport-1.08-1.rh.7.3.um.1.noarch.rpm perl-XML-SAX-0.12-1.rh.7.3.um.1.noarch.rpm perl-Authen-SASL-2.03-1.rh.7.3.um.1.noarch.rpm perl-ldap-0.2701-1.rh.7.3.um.1.noarch.rpm perl-Convert-ASN1-0.16-2.rh.8.0.um.1.noarch.rpm perl-Digest-SHA1-2.02-1.rh.7.3.um.1.i386.rpm perl-Digest-HMAC-1.01-1.rh.7.3.um.1.noarch.rpm perl-IO-Socket-SSL-0.92-1.rh.7.3.um.1.noarch.rpm perl-Mail-IMAPClient-2.2.7-1.rh.7.3.um.1.noarch.rpm perl-Net-SSLeay-1.22-1.rh.7.3.um.1.i386.rpm perl-Parse-RecDescent-1.80-1.rh.7.3.um.1.noarch.rpm heartbeat-stonith-1.0.2-1.rh.7.3.um.1.i386.rpm heartbeat-pils-1.0.2-1.rh.7.3.um.1.i386.rpm heartbeat-ldirectord-1.0.2-1.rh.7.3.um.1.i386.rpm heartbeat-1.0.2-1.rh.7.3.um.1.i386.rpm ipvsadm-1.21-1.rh.7.3.um.1.i386.rpm ultramonkey-doc-2.0.0-1.noarch.rpm Ipvsadm-1.15.tar.gz 꼭 순서대로 설치(의존성 문제가 있기때문)-Rebooting 해주면 좋음.
Director 설정 (3) - 서버의 라우팅 기능 확인 Director 서버는 반드시 자신에게 접속하는 클라이언트의 패킷을 리얼서버로 보낼 수 있는 IPVS 기능 필요 따라서 커널의 IPVS4 포워딩 기능이 사용가능 하도록 설정 # Disables packet forwarding net.ipv4.ip_forward = 1 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Disables automatic defragmentation net.ipv4.ip_always_defrag = 0 # Disables the magic-sysrq key kernel.sysrq = 0
Director 설정 (4) - 서버의 라우팅 기능 확인 /etc/sysctl.conf net.ipv4.ip_forward = 1 로 변경한 후 저장 변경 사항을 활성화 하기 위해 아래 명령을 이용 [root@ha1 conf]# /sbin/sysctl -p net.ipv4.ip_forward = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.ip_always_defrag = 0 kernel.sysrq = 0
Director 설정 (5) - ldirectord 설정 실행을 위해 /etc/ha.d/conf/ldirectord.cf 에 설정파일 필요 인스톨 직후에는 없음 적당한 것을 하나 복사해서 사용 /usr/share/doc/ultramonkey-doc-2.0.0/topologies/config/ha-lb/fwmark/linux_director/ 아래에 ldirectord.cf 파일을 복사해서 씀. /etc/ha.d/conf/ldirectord.cf 설정 예 checktimeout=3 checkinterval=1 fallback=127.0.0.1:80 gate autoreload=yes logfile="/var/log/ldirectord.log" quiescent=yes virtual=211.169.219.230:80 real=211.169.219.198:80 gate 3 real=211.169.219.209:80 gate 2 real=211.169.219.215:80 gate 2 service=http checkport=80 checktype=connect request="index.html" receive="Test Page" scheduler=wlc #persistent=600
Director 설정 (6) - ldirectord 설정 checkinterval : 테스트 페이지 요청 주기 fallback : 모든 리얼서버 다운시 이동할 웹 서버 virtual : 가상 서비스 네트워크 real : 리얼 서버 IP 및 포트 , 포워딩 방식 gate = Direct Routing masq = Network address translation ipip = IP Tunneling service : 서비스 프로토콜 request : 요청 페이지 receive : 요청 페이지에서 찾을 문자열 scheduler : 스케줄링 방식 rr = Round-Robin wrr = Weighted Round-Robin lc = Least-Connection wlc = Weighted Least-Connection
Real Server, Director Server 동일하게 구성 #init1(레벨1) #cat /dev/had > /dev/hdb (Real Server2 HDD) 복사 후 각 시스템에 장착 부팅 후 네트웍 설정.
Ldirectord 실행. LVS 소속 각 서버들 httpd 실행. #/etc/rc.d/init.d/ldirectord start 부팅시 자동 실행 되지 않게 설정. Ldirectord 로그 파일 확인 [root@ha1 root]# tail -n 7 /var/log/ldirectord.log [Mon Jun 30 15:19:40 2003|ldirectord] Linux Director Daemon terminated on signal: TERM [Mon Jun 30 15:19:52 2003|ldirectord] Starting Linux Director v1.63 as daemon [Mon Jun 30 15:19:52 2003|ldirectord] Added virtual server: 211.169.219.230:80 [Mon Jun 30 15:19:53 2003|ldirectord] Added fallback server: 211.169.219.213:80 (0 x 211.169.219.230:80) (Weight set to 1) [Mon Jun 30 15:19:53 2003|ldirectord] Added real server: 211.169.219.209:80 (0 x 211.169.219.230:80) (Weight set to 2) [Mon Jun 30 15:19:53 2003|ldirectord] Quiescent fallback server: 211.169.219.213:80 (1 x 211.169.219.230:80) (Weight set to 0) [Mon Jun 30 15:19:53 2003|ldirectord] Added real server: 211.169.219.215:80 (1 x 211.169.219.230:80) (Weight set to 2)
LVS 서비스 동작 확인. Ipvsadm 을 통해 IPVS 테이블 확인 [root@ha1 root]# ipvsadm IP Virtual Server version 0.9.7 (size=65536) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ha.mingun.com:http wlc -> www3.mingun.com:http Route 2 0 0 -> www2.mingun.com:http Route 2 0 0 -> ha1.mingun.com:http Local 0 0 0
Test 두 가지 장애시나리오 시연 및 각 서버의 상태 외부 클라이언트에서 짜여진 가상 트래픽 통해 Load Balance 상태 및 RealServer의 웹서비스 상태 결과 분석 Report
Test시나리오-real server 장애/복구 Floating Address 211.169.219.230 Linux Director Linux Director Internet Heartbeat 211.169.219.189 211.169.219.213 Ldirectord Real server 1 Real server 2 Real server 3 211.169.219.198 211.169.219.209 211.169.219.215
Test시나리오-Master server 장애/복구 Floating Address 211.169.219.230 Linux Director Linux Director Internet Heartbeat 211.169.219.213 master 211.169.219.230 Hot standby Real server 1 Real server 2 Real server 2 211.169.219.198 211.169.219.209 211.169.219.215
가상 트랙픽을 통한 Perfomance측정 1.LVS 부하 분산 능력, RealServer 서비스 능력 check 2.Web stress tool을 통해 각 서버 perfomance 측정 결과 분석 레포트 3.클라이언트 무한 접속 한계 상황까지 테스트 결과 분석 레포트
LVS측정 시스템과 동일한 사양의 서버에서 WAS(Socket접속테스트)라는 웹스트레스 툴로 테스트로 하였슴.(객관성은 높지 않음.) 동시 접속자 800명에서 좋은 성과를 나타내었으며 1000명정도까지 접속에러를 내지 않고 Request를 해주었음. 1000명 이상은 테스트 시스템의 한계로 측정하기 어려움.
8.관리페이지 RRDTool을 이용하여 시스템의 각 자원들을 모니터 했슴.(오른쪽 그림) CPU, Memory, Uptime, Disk i/o, eth0 i/o, Disk Usage, Swap status…. - 서버의 Httpd 상태는 PHP의 소켓함수를 이용하여 테스트 했슴.(왼쪽 그림)
9. 응용분야 10. 기대효과 웹 호스팅 업체, 인터넷 쇼핑몰, 인터넷 게임 서버,인터넷 음악 방송, 음악파일 스트리밍. 음악파일 스트리밍. 10. 기대효과 최근 고성능 컴퓨팅의 새로운 장을 여는 클러스터 컴퓨터에 관심이 고조되고 있다 . 슈퍼 컴퓨터 뿐 아니라 최근 월드 와이드 웹의 폭발적인 수요로 인터넷 전자 상거래 등을 위한 효과 적인 클러스터형 웹 서버의 구축수단이 될 것 이다. 클러스터형 서버는 기존의 상용으로 제작된 전용서버에 비해 적은 비용으로 고성능, 고신뢰성 서버 기능을 발휘할 것이다.
해결과제 간편한 Install 방법 객관적인 테스트 필요 GUI 기반 관리툴 각 웹서버(Real Server)에 업데이트 해결문제 (Shared file system 필요) 대용량데이타베이스 구축에도 이용가능.
참고문서 LVS 구현 참고 http://www.linuxservervirtual.org http://www.ultramonkey.org http://www.kldp.org http://linux.clusterkorea.org http://tunelinux.pe.kr/virtual http://www.linux-ha.org/heartbeat/ http://www.vergenet.net/linux/ldirectord/ http://www.clunix.com http://www.superuser.co.kr Linux 기반의 고가용 로드밸런싱 웹서비스 구축 방안(by 정진호) Linux 시스템 구현 http://www.redhat.com http://www.wowlinux.com 시스템자원 모니터링(RRdTool) http://www.perl.com http://www.bernisys.prima.de/linux/hotsanic/ http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/ http://www.php.net http://www.phpschool.com