공개 SW 솔루션설치 & 활용가이드 미들웨어 > 분산시스템 SW 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 LVS(Linux Virtual Server) 란한대의서버로증가하는인터넷사용자를처리하기가힘들어지면서고가용성서버를구축하기위해리눅스머신을로드밸런스하도록해주는운영시스템 만약하나의노드에서처리량이너무많아서서비스가불가능할경우간단히하나의노드를병렬구성으로추가함으로써부하분산을하도록하는것을말함 우수한확장성, 신뢰성및서비스가능성을제공하는클러스터링기술을사용하여 Linux용고성능및가용성이뛰어난서버를구축 대분류 미들웨어소분류 분산시스템 SW 라이선스형태 GNU General Public License 사전설치솔루션 N/A 운영체제 Linux, Windows, Solaris 등버전 1.2.1 (2018 년 10 월기준 ) 특징 보안취약점 개발회사 / 커뮤니티 공식홈페이지 높은가용성 추가확장성 비용효율성 DR, NAT, Tunneling 방식으로다양한환경에서가상서버를구축가능 취약점 ID : CVE-2000-0248 심각도 : 10.0 HIGH(V2) 취약점설명 : passwd.php3 스크립트의결함과함께원격사용자가시스템에서임의의명령을실행가능 대응방안 : Redhat piranha-gui-0.4.12-1.i386.rpm 패치및 Redhat Linux 6.2 i386 이상으로업그레이드 참고경로 : https://www.securityfocus.com/bid/1148/info redhat http://www.linuxvirtualserver.org
- 4-2. 기능요약 기본 LVS 구성 LVS 스케줄링알고리즘 라우팅방식 지속성및방화벽표시기능
- 5-3. 실행환경 LVS 지원운영체제 구분 지원여부 Windows 지원 Solaris 지원 Red Hat 지원 CentOS 지원 Ubuntu 지원 devian 지원 Fedora 지원
- 6-4. 설치및실행 세부목차 4.1 LVS 설치 4.2 ipvsadm 이란? 4.3 ipvsadm 설치및설정
- 7-4. 설치및실행 4.1 LVS 설치 다양한방법으로설정하고실행할수있는데커맨드로간단히실행하는방법에서부터설정파일을직접편집해서실행하는방법, Piranha를이용하는방법, 다른패키지를이용해서설정하고실행하는방법, 조합해서이용하는방법등있음 아래의사이트에접속하면다양한방법들을확인가능 - http://www.linuxvirtualserver.org/software/index.html
- 8-4. 설치및실행 4.2 ipvsadm 이란? ipvsadm은 LVS(Linux Virtual Server) 를관리하기위해사용되는유틸리티로 iptables가커널의 netfilter 테이블을관리하는것과유사하게커널의 Virtual server table을관리하는데사용 ipvsadm은 TCP/UDP를지원하며 NAT, Tunneling, Direct routing을지원하고 RR, WRR, LC, WLC를포함하여총 8개의 Load balancing 알고리즘지원
- 9-4. 설치및실행 4.3 ipvsadm 설치및설정 ipvsadm 설치및설정 - $ yum -y install ipvsadm - $ sysctl -a grep ip_forward - net.ipv4.ip_forward = 0 으로나온다면 1 로고쳐줌 - $ vi /etc/sysctl.conf - net.ipv4.ip_forward = 1 - $ sysctl p 리부트후값이저장되었는지확인진행 - $ reboot - $ sysctl -a grep ip_forward
- 10-5. 기능소개 세부목차 5.1 스케줄링이필요한이유 5.2 LVS 스케줄링 5.3 라우팅이필요한이유 5.4 라우팅방식 5.5 지속성및방화벽표시기능
- 11-5. 기능소개 5.1 스케줄링이필요한이유 실서버를분산처리할때동일하게분산하면사양이서로다른서버가혼재하는환경에서는한쪽으로부하가몰릴수있음 따라서관리자는실제서버풀에있는각각의노드에가중치를부여가능 이러한가중치는정수값으로모든가중치관련스케줄링알고리즘 ( 예 : 가중치기반최소접속 ) 에영향을미치며 LVS 라우터가다른처리용량이있는하드웨어를보다균등하게로드함 가중치는서로에관해비율로동작함 - 예를들어하나의실제서버가가중치 1로되어있고다른서버가가중치 5로되어있을경우가중치 1로된서버가 1번연결될때마다가중치 5로되어있는서버는 5번연결됨 - 실제서버가중치에해당하는기본값은 1임
- 12-5. 기능소개 5.2 LVS 스케줄링 (1/3) Round-Robin Scheduling - 각각의요청을실제서버의풀로순차적으로배분하는방식 - Round-Robin 알고리즘을사용하여용량이나부하량을고려하지않고모든실제서버를동일하게다룸 - 이러한스케줄링모델은 Round-Robin DNS 방식과유사하지만호스트기반이아닌네트워크연결기반의보다세분화된방식 - LVS 라운드로빈스케줄링은캐쉬된 DNS 쿼리에의해불균등하게분산되지않음 Weighted Round-Robin Scheduling - 가중치기반라우드로빈스케줄링은풀에있는실제서버의용량이다를경우선택할수있는사항 하지만, 요청부하량이아주다양할경우더가중치가있는서버가요청공유량보다더많이응답할수있음 Least-Connection - 가장접속이적은실제서버로더많은요청을배분하는방식 - 동적인스케줄링알고리즘유형중하나로 IPVS 테이블을통해실제서버로의라이브연결을추적하기때문에요청부하에극도로다양한처리량이있을경우유용 - 각각의노드에대략비슷한처리용량이있는실제서버풀의경우에도적합
- 13-5. 기능소개 5.2 LVS 스케줄링 (2/3) Weighted Least-Connections (default) - LVS 관리자는실제서버풀에있는각각의노드에가중치를부여가능 - 가중치는정수값으로모든가중치관련스케줄링알고리즘영향을미치며 LVS 라우터가다른처리용량이있는하드웨어를보다균등하게로드 Locality-Based Least-Connection Scheduling - 목적지 IP와관련하여가장접속이적은서버로더많은요청을배분하는방식 - 이러한알고리즘은프록시-캐쉬서버클러스터에서사용 - 서버가서버처리용량을초과하지않고서버가반부하상태에있지않을경우 IP 주소를최소로부하된실제서버로할당하여 IP 주소의패킷을해당주소의서버로라우팅
- 14-5. 기능소개 5.2 LVS 스케줄링 (3/3) Locality-Based Least-Connection Scheduling with Replication Scheduling - 목적지 IP와관련하여가장접속이적은서버로더많은요청을배분하는방식 - 알고리즘은프록시-캐쉬서버클러스터사용 - 대상 IP 주소를실제서버노드의서브셋으로묶는다는점에서 LBLC 스케줄링과다름 - 서브넷에있는가장접속이적은서버로요청을라우팅 - 목적지 IP 주소에대해모든노드가처리용량을초과할경우가장접속이적은실제서버를실제서버의전체풀에서목적지 IP의실제서버에대한서브넷으로추가하여해당목적지 IP 주소에대한새로운서버를복사 - 최고로과부화된노드는실제서버서브넷에서제외 Destination Hash Scheduling - 정적해쉬테이블에있는목저지 IP 를찾아실제서버의풀로요청을배분하는방식 Source Hash Scheduling - 정적해쉬테이블에있는소스 IP 를찾아실제서버의풀로요청을배분하는방식
- 15-5. 기능소개 5.3 라우팅이필요한이유 데이터가전달하는과정에서여러네트워크들을통과해야하는경우가생김 여러네트워크들의연결을담당하고있는라우터장비가데이터의목적지가어디인지확인하여 빠르고정확한길을찾아전달해주는것을라우팅이라함 전달받은패킷을전달하기위해라우터도가장먼저목적지가어디인지 ip주소를확인 가장빠른경로가어디인지를확인하고그경로로가기위해서는자신이어느인터페이스로패킷을내보내야하는지결정 결정한인터페이스로패킷을전달하면그패킷은또다른라우터로전달되어위와같은과정을목적지네트워크에도착할때까지반복 이처럼데이터를목적지까지전달하기위한모든일련의과정을통틀어라우팅이라함
- 16-5. 기능소개 5.4 라우팅방식 (1/4) NAT 라우팅 - 그림에서활성화된 LVS 라우터에는두개의 NIC 있음 - 인터넷용 NIC는 eth0에실제 IP 주소가있고알리아스된 eth0:1에는유동 IP 주소가있음개인네트워크인터페이스용 NIC에는 eth1에실제 IP 주소가있고알리아스된 eth1:1에는유동 IP 주소가있음 - 장애조치시인터넷에대한가상인터페이스와가상인터페이스에대한개인네트워크는동시에백업 LVS 라우터에의해백업 - 개인네트워크에있는모든실제서버는 NAT 라우터에대해활성화된 LVS 라우터와통신하기위한기본값라우터로유동 IP 주소를사용하므로인터넷에서의요청에응답하는기능에문제를일으키지않음
- 17-5. 기능소개 5.4 라우팅방식 (2/4) - 이러한토플로지를사용하여활성 LVS 라우터는요청을받아적절한서버로보냄 - 그뒤실제서버는요청을처리하고 LVS 라우터로패킷을되돌려보냄 - LVS 라우터는네트워크주소트랜잭션을사용하여패킷에있는실제서버의주소를 LVS 라우터공개 VIP 주소로교체 - 실제서버의실질적인 IP 주소가요청중인클라이언트에게보이지않게되므로이러한절차를 IP 마스커레이딩이라고부름 NAT 라우팅을사용하면다양한운영체제가실행되고있는아무컴퓨터나실제서버가될수있음 NAT 라우팅의주요취약점은들어오고나가는모든요청을처리해야하기때문에 LVS 라우터의대량의분배작업에서병목현상이일어날수있다는점이있음
- 18-5. 기능소개 5.4 라우팅방식 (3/4) 직접라우팅 - 전형적인직접라우팅 LVS 설정에서 LVS 라우터는가상 IP (VIP) 를통해들어오는서버요청을받고스케줄링알고리즘을사용하여실제서버에요청을보냄 - 각각의실제서버는요청을처리하고 LVS 라우터를바이패싱하여클라이언트에게직접응답 - LVS 라우터에추가된처리량없이실제서버에서클라이언트로나가는패킷을보내기위해실제서버에서확장성을감안한직접라우팅이추가될수있어과중한네트워크로드에서병목현상이나타날수있음
- 19-5. 기능소개 5.4 라우팅방식 (4/4) 직접라우팅 - LVS에서직접라우팅을사용하는데있어서여러장점이있는반면제한점도있음 - 직접라우팅응통한 LVS 사용에서가장일반적으로발생하는문제는 ARP 와의문제임 - 직접라우팅 LVS 설정에있는 ARP 요청에서의문제는 IP 주소로의클라이언트요청이처리될요청에대한 MAC 주소와관련되어있어야하며 LVS 라우터의가상 IP 주소도 MAC 주소와관련되어있어야한다는점임 - LVS 라우터와실제서버의 VIP가같을경우 ARP 요청은 VIP와관련되어있는모든컴퓨터로브로드캐스트됨 - 이는 VIP가실제서버중하나에관련되어직접적으로요청을처리하는것 LVS 라우터를바이패싱하여 LVS 설정목적을의미없게하는것과같이여러가지문제를발생시킬수있음
- 20-5. 기능소개 5.5 지속성및방화벽표시기능 (1/2) 지속성 - 활성화된경우지속성은타이머처럼작동 - 클라이언트가서비스에연결되면 LVS는지정된기간동안의마지막연결을기억 - 동일한클라이언트 IP주소가해당기간내에다시연결되면이전에연결한서버로전송되어로드밸런싱메커니즘을우회 - 시간창밖에서연결이발생하면지정된예약규칙에따라연결처리 - 어떤주소가더높은수준의지속성을갖게할지를제어하기위한도구로서관리자가클라이언트 IP 주소테스트를위한서브넷마스크를지정하게하여서브넷에그룹으로연결 - 목적지가다른포트에대한그룹연결은 FTP와같이하나이상의포트를사용하여통신하는프로토콜의경우중요한사항이될수있음 - 하지만목적지가다른포트로되어있는그룹연결문제를처리하는데지속성기능이가장효과적인방법은아님 - 이러한경우방화벽표시기능 (firewall marks) 을사용하는것이가장좋음
- 21-5. 기능소개 5.5 지속성및방화벽표시기능 (2/2) 방화벽표시기능 - 방화벽표시기능은연관된프로토콜의프로토콜이나그룹에사용되는가장쉽고효과적인그룹포트방법 - 예를들어 LVS가전자상거래사이트를실행하도록되어있을경우방화벽표시기능은포트 80에서의 HTTP 연결과포트 443에서의 HTTPS 연결을일괄적으로묶어처리하는데사용될수있음 - 각각의프로토콜에대해가상서버에동일한방화벽표시기능을지정하면포트가연결된후 LVS 라우터가동일한실제서버에모든요청을보내기때문에트랜잭션에대한상태정보를보호가능 - 이와같은효과적이고사용간편함때문에 LVS 관리자는그룹연결을할때마다지속성기능보다방화벽표시기능을사용해야함 - 하지만클라이언트가일정기간동안동일한가상서버로다시연결하게하기위해가상서버에방화벽기능과함께지속성기능을추가가능
- 22-6. 활용예제 세부목차 6.1 다이렉트라우팅방식 6.2 NAT 라우팅방식
- 23-6. 활용예제 6.1 다이렉트라우팅방식 (1/6) 가상 IP(VIP) 추가 - $ ipconfig ens33:0 192.168.0.10 netmask 255.255.255.0 up 잘못추가했다면 - $ ip addr del 192.168.0.10 dev ens33:0 - $ ip addr
- 24-6. 활용예제 6.1 다이렉트라우팅방식 (2/6) Ipvsadm 에분산할서비스등록 - $ ipvsadm C - $ ipvsadm -A -t 192.168.0.10:80 -s wrr -p 300 * -s rr : 라운드로빈 * -s wrr : 가중치적용라운드로빈 * -s lc : 최소연결 * -s wlc : 가중치적용최소연결 * -p 300 으로세션시간을 5분으로설정 이제분산에참가시킬서버지정 - $ ipvsadm -a -t 192.168.0.10:80 -r 192.168.0.101:80 -g -w 5 - $ ipvsadm -a -t 192.168.0.10:80 -r 222.117.155.123:80 g w 10
- 25-6. 활용예제 6.1 다이렉트라우팅방식 (3/6) 분산에참가시킬서버지정 - $ ipvsadm -a -t 192.168.0.10:80 -r 192.168.0.101:80 -g -w 5 - $ ipvsadm -a -t 192.168.0.10:80 -r 222.117.155.123:80 g w 10 설정보기 - $ ipvsadm Ln 연결상태보기 - $ ipvsadm Lnc * -w 로가중치줌 * -g 다이렉트라우팅 * -i 터널링 *-m NAT
- 26-6. 활용예제 6.1 다이렉트라우팅방식 (4/6) ipvsadm 명령어 - -A 서비스추가 - -E 서비스수정 - -D 서비스삭제 - -a 리얼서버추가 - -e 리얼서버수정 - -d 리얼서버삭제 - -C 설정초기화 - -t 대상타겟 - -r 리소스주소 - -g 다이렉트라우팅 - -w 가중치설정 - -m NAT
- 27-6. 활용예제 6.1 다이렉트라우팅방식 (5/6) real 서버쪽에 VIP 점유를막기위한옵션설정 - $ vi /etc/sysctl.conf ARP 문제해결을위해 arp에대한응답없음으로설정 - 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 - net.ipv4.conf.default.arp_ignore = 1 - net.ipv4.conf.default.arp_announce = 2 - net.ipv4.conf.eth0.arp_ignore = 1 - net.ipv4.conf.eth0.arp_announce = 2 - $ sysctl p
- 28-6. 활용예제 6.1 다이렉트라우팅방식 (6/6) real 서버쪽에 loop back up 등록 - $ touch /etc/sysconfig/network-script/ifcfg-lo:0 직접추가 - $ ifconfig lo:0 192.168.0.10 netmask 255.255.255.255 broadcast 192.168.0.10 up - $ route add -host 192.168.0.10 dev lo:0 192.168.0.10 접속하면만들어두었던홈페이지표출확인
- 29-6. 활용예제 6.2 NAT 라우팅방식 (1/4) NAT 방식은 network 이다를경우나포트포워딩이필요할경우사용 모든서버는 eth0 에사설대역을할당해두고, 분산서버에만 eth1 로리얼망 ip 를추가부여 - eth1 리얼망 IP (VIP) : 211.47.13.234 분산을위한가상을하나더올림 - eth0:0 ip 는 10.0.0.234, 10.0.0.101, 10.0.0.102 총 3 대의서버중 234 번은리얼망과사설망을같이사용하며분산서버가됨
- 30-6. 활용예제 6.2 NAT 라우팅방식 (2/4) 가상망 ip 를셋팅 분산서버는 ip 만셋팅 - $ ifconfig eth0:0 10.0.0.234 netmask 255.255.255.0 up 리얼서버는게이트웨이를분산서버로설정 - $ ifconfig eth0:0 10.0.0.2 netmask 255.255.255.0 up - $ route add default gw 10.0.0.234 dev eth0:0 다른게이트웨이가있으면오동작을하게되므로제거 - $ route del default gw 192.168.0.1
- 31-6. 활용예제 6.2 NAT 라우팅방식 (3/4) 가상서버에로드밸런스가가능하도록패킷포워딩해제 - $ vi /etc/sysctl.conf - net.ipv4.ip_forward = 0을 1로수정 - $ sysctl p ipvsadm 에분산할서비스등록 - $ ipvsadm C - $ ipvsadm A t 211.47.13.234:80 s wlc
- 32-6. 활용예제 6.2 NAT 라우팅방식 (4/4) 분산에참가시킬서버지정 - $ ipvsadm -a -t 211.47.13.234:80 -r 10.0.0.101:8080 -m -w 1 - $ ipvsadm -a -t 211.47.13.234:80 -r 10.0.0.102:8080 -m -w 2 - $ ipvsadm Ln - $ ipvsadm -Lnc -m 을사용해야 NAT 가됨 NAT 방식은 gateway 등록중요 2 개의대역을사용하고있기때문에 eth0:0 보다는가능하다면 eth1 이나 eth2 등을추가해서 엮어주는것이좋음
- 33-7. FAQ Q LVS 클러스터는 Linux 서버만지원합니까? A 아닙니다. 실제서버는 Linux, BSD, Solaris 및 Windows 와같은 LVS 클러스터의모든운영체제를거의실행할수있습니다. LVS / NAT 는 TCP / IP를지원하는운영체제의서버를균형조정하고 LVS / TUN 은 IP 터널링프로토콜이있는서버를필요로하며 LVS / DR 은 arp가아닌장치가있는서버를필요로합니다. Q LVS 는 100 만개가넘는동시연결을처리할수있습니까? A 예, LVS 는 100 만개가넘는동시연결을처리할수있습니다. 하나의연결은 LVS 상자에서 128 바이트를소비하기때문에 1G 메모리가있는 LVS 상자는 800 만개가넘는동시연결을처리할수있습니다.
- 34-8. 용어정리 용어 라운드 - 로빈 (round-robin) 가중라운드 - 로빈 (weighted roundrobin) 최소연결 (least connection) 가중최소연결 (weighted least connection) 설명 로드밸런서에들어오는요청패킷들을차례대로실제서버에할당하는방식 가중라운드 - 로빈방식은기본적으로라운드 - 로빈방식을사용하면서각서버에서로다른가중치를주어서할당하는방식 최소연결방식은실제서버들중에서현재가장적은수의요청을처리하고있는서버를선택하여요청패킷을할당하는방식 가중최소연결방식은기본적으로최소연결방식인데, 가중라운드 - 로빈방식과마찬가지로각서버에서로다른가중치를주어서할당하는방식
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.