본문 바로가기

3-3. Virtualization

[무조건 긁어오기] 리눅스 운영체제를 이용한 LVS(Linux Virtual Server)의 구현에 관한 연구

저자: GnomeRnD 기술연구소 소장 임영규

1. 서론

레드햇 리눅스를 이용하여 LVS를 만드는 방법과 구현에 대하여 본 연구결과를 발표한다. 많은 방법으로 LVS를 구현할 수 있지만 레드햇 리눅스 어드밴스 서버2.1이 제공하는 피라나(Piranha)툴을 이용하여 NAT를 구현하였다. 여기에서는 실제서버(이하, 리얼서버)가 하나뿐인 관계로 하나의 컴퓨터에 DNS를 설치하고 리얼 서버로 사용하는 컴퓨터는 아파치의 가상 웹 호스터 방식의 가상 IP 기반의 가상 웹 호스팅을 이용하여 웹 서버 로드밸런싱을 구현하였다. 로드밸런싱과 직접 라우팅, 터널링에 대한 문서는 리눅스 가상 서버 프로젝트에 자세히 설명되어 있다.

2. 본론

우선 LVS를 구현하기 위해서는 네트워크에 대한 지식, 아파치 웹 서버, IP Aliasing, 패킷 필터링, 기본적인 DNS 구현에 대해 여러분은 선수 학습을 하여야 한다. 본 연구에서는 이러한 선수 학습이 기본이 되어 있다는 것을 염두에 두고 구현에 대한 설명을 하기로 한다. 레드햇 리눅스는 이러한 모든 사항을 기본적으로 GUI를 통하여 제공한다. 본 논문에서 사용한 레드햇 리눅스 어드벤스 2.1은 이러한 기능을 훌륭히 제공한다. DNS 설정에 관한 내용은 한빛 네트워크 전문기사의 IP Alise부분을 참고하고 DNS 설정 부분을 참고 하기 바란다. 꼭 등록된 도메인만 사용 가능한 것은 아니다. 본 연구에서는 인터넷이 되지 않은 환경에서 충분히 검정되고 실험한 결과이므로 구현에 필요한 컴퓨터만 적어도 3대 이상만 준비하면 되겠다.

2.1 piranha 사용하기

우선 피라나를 이용하기 위해서는 DNS 서버 역할을 하는 컴퓨터에 아파치를 실행시켜야 하는데 이것은 순수 웹 서버 기능으로서의 아파치를 사용하는 것이나 피라나 웹 도구를 기본적으로 제공하므로 httpd 데몬을 실행시키지 않는다. 따라서 piranha-gui 데몬만 실행하면 이것이 아파치 모듈과 링크되므로 httpd 데몬을 실행 해서는 안된다. piranha를 사용하기 위해서는 piranha-passwd를 실행해서 piranha 유저 암호를 등록해야 한다. 그리고 localhost:3636 포트로 접속하여 piranha를 설정하게 된다. 따라서 여러분은 piranha 데몬을 실행시키고(/etc/rc.d/init.d/piranha-gui start) 웹 브라우저를 통해 여기에 접근 가능하다.

2.2 piranha 설정

기본적인 piranha및 LVS 개념은 piranha 설치 가이드를 참고하며, 여기에서는 부가 설명을 하지 않는다. 단지 연구에 사용된 공인 IP인 210.220.230.1, 210.220.230.10, 그리고 사설 IP(192.168.1.1, 1.2)에 대해서만 설명한다.

2.3 DNS 설정

하나의 공인 IP로 DNS를 설정한다. 본 연구에서는 본인의 연구소 도메인(실제 도메인에 등록되지 않았음)을 이용하였다. 인터넷이 연결되지 않는 이유로 인해 www.gnomernd.com으로 도메인을 설정하고 구현하였으므로 여러분의 도메인을 그대로 DNS에 설정하면 되겠다. 여러분이 인터넷에 연결되어 있다면 실제 위 주소를 입력해 보기 바란다. 분면히 페이지를 찾을 수 없다고 나올 것이다. 인터넷이 안되는 환경에서 오직 리눅스 구현 기술만을 고집하고자 가상으로 설정한 도메인 이름이라는 것을 염두에 두면 좋겠다.

2.4 iptables, ipvsadm 모듈 로딩

ntsysv또는chkconfig를이용하여 iptables, ipvsadm 모듈을 커널에 로딩하여야 한다. 이것을 로딩하지 않으면 가상 서버를 구현할 수 없으므로 반드시 로딩하여야 한다. 이 작업은 piranha 설정 전에 하는 것이 좋다. 컴퓨터가 부팅 되면서 바로 모듈을 로딩하기 때문에 관리자가 다시 로딩할 필요가 없기 때문이다.

2.5 pulse 데몬 실행

기본적인 환경 구성이 완료되면 /etc/rc.d/init.d/pulse start를 구동하여야 한다. 일단 pulse가 로딩되면 [그림 1]과 같은 결과를 얻을 수 있다. 본 연구에서 사용한 리얼ip는 C Class 사설 IP이다. 경우에 따라 A,B Class의 사설IP를 사용해도 되겠다.


[그림 1] pulse 데몬 실행 결과

LVS 설정이 완료되면 어드벤스 서버는 /etc/sysconfig/ha/lvs/cf파일을 만들어 저장한다. 이 파일은 piranha가 만들어 저장하기 때문에 유심히 살펴보면 별 어려움 없이 매뉴얼로 수정 할 수 도 있다. 단, 매뉴얼로 수정하는 경우에는 반드시 pulse를 재 시작하여야 한다. 중요한 것은 210.220.230.10과 192.168.1.10의 IP는 LVS에서 수동으로 만들지 말아야 한다. 이 IP는 piranha 툴에서 만들어 내부적으로 eth0:1, eth1:1을 UP하기 때문이다. /etc/sysconfig/network-scripts에는 이들을 위한 설정 파일을 만들지 않아야 한다는 것이다. 매우 중요하므로 반드시 상기하기 바란다.

그리고 리얼 서버에서는 [그림 2]와 같이 가상 웹 호스팅을 설정하고 아파치 데몬을 시작하여야 한다. 이렇게 하는 이유는 본인의 연구소에 리얼 서버로 사용할 컴퓨터가 부족하여서 부득이 사용하게 된 방법이다. 여러분의 환경이 허락 된다면 이 과정은 생략하고 대신 각각의 리얼 서버에 ip와 LVS에 설정되어 있는 eth1:1을 gw로 설정해 주는 작업만 하면 되겠다. 이점은 여러분이 이해가 될 것이라고 믿는다.


[그림 2] 리얼서버의 가상 웹 호스팅 설정

라인 1098-1104까지가 리얼 서버(192.168.1.2)의 아파치 환경설정 파일에서 변경되어야 할 부분이다. 그리고 192.168.1.1과 1.2의 리얼 서버의 gw는 192.168.1.10이 되어야 한다. 이것은 LVS(본 연구에서 DNS를 설치한 컴퓨터의 eth1:1에 해당하고, 수동으로 설정하지 않은 IP, 즉 piranha 설정에서 만들어 짐.) 참고로 가상 웹 호스팅 설정은 IP기반과 네임 기반으로 나뉜다. 위 가상 웹 호스팅에서 웹 문서의 저장위치는 1.1은 /var/ww/html 이지만 정상적인 실행을 확인하기 위하여 192.168.1.2는 /var/www/real로 설정하였다. 본 연구에서 1.2 IP를 사용한 이유는 리얼 서버를 이용할 수 있는 컴퓨터 부족으로 인하여 부득이 아파치 가상 웹 호스팅을 사용하였다.

2.6 /etc/hosts 파일
210.220.230.1  gnome.gnomernd.com	gnome
# LVS
210.220.230.10 www.gnomernd.com www

#test를 위한 윈도우 컴퓨터
210.220.230.30 samba.gnomernd.com samba

# 리얼서버.. 추가 가능하다
192.168.1.1 real.gnomernd.com real
192.168.1.2 real1gnomernd.com real1
2.7 ipvsadm 및 iptables

[그림 3] iptables와 ipvsadm이 실행된 것을 보여준다. 그림에서 210.220.230.10:80 다음에 rr 이라는것이 보인다. rr은 라운드로빙 스케쥴링 방식으로 웹 서비스를 하겠다는 것이다. 실제 실행 결과를 먼저 알아 보기 위해서 가장 확실한 방법이므로 piranha에서 라운드로빙 방식으로 지정하였다. 보다 많은 연구를 원하는 경우 다른 스케쥴링을 도입해 보면 되겠다. 이 역시 piranha에서 설정 가능하다. 또는 man ipvsadm을 해 보면 더 정확한 정보를 얻을 수 있다. [그림 3]과 같은 결과를 얻기 위해서는 우선 다음과 같이 패킷 필터링과 NAT가 가능하도록 설정해 주여야 한다. 참고로 패킷 필터링은 보안을 공부하는데 상당한 도움을 가져다 줄 것이다. 레드햇 보안 가이드를 참고하기 바란다. 레드햇 2.4 커널에서는 ipchains를 지원하지만 iptables를 더 많이 사용한다. 가벼우면서도 성능이 좋기 때문이라고 한다.


[그림 3] iptables와 ipvsadm의 실행결과

2.8 NAT 설정과 페킷 필터링 설정

커널의 proc 파일 시스템에 페킷을 포워딩 할 수 있도록 지정해 주는 방법과 NAT를 구현하기 위한 기본 체인 설정을 하여야 한다. 이것을 위한 방법은 다음과 같다
echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -t mangle -A PREROUTING -p tcp -d 210.220.230.10/32
--dport 80 -j MARK --set-mark 80
[그림 4]는 앞서 설명한 iptables 모듈이 설정된 실행결과이다. 물론 iptables ?t mangle ?L로 확인 할 수 있지만 이것은 체인이 설정된 것을 확인 하는 것이지 모듈이 커널에 로딩된 것을 확인 하지는 않으므로 반드시 ps ?ax로 확인 하기 바란다. 또한 페킷 필터링 확인을 위해서는 ipvsadm 명령으로 확인할 수 있다. 이제 모든 구현은 완료 되었다.


[그림 4] iptables의 모듈로딩 확인

3. 결론

인터넷이 안되는 상황에서 이러한 구현을 하기 위해서 많은 것을 얻을 수 있었다. 우선 DNS도 설정할 수 있으면, 하나의 NIC에 여러 IP를 부여하는 방법, 그리고 아파치 가상 웹 호스팅 설정, 최종 목적인 LVS 구현까지 많은 것을 이번 연구를 통해 얻을 수 있었다. 이것을 구현하기 위해 필요한 많은 선수 학습 역시 리눅스를 활용할 수 있는 지식을 얻게 하였다. 최종적으로 상기 /etc/hosts 파일에 등록된 samba(사실은 삼바를 위해 준비한 윈도우 컴퓨터)에서 익스플로러를 이용하여 www.gnomernd.com에 접속하여 실제 LVS의 실행 여부를 그 결과로 제출한다. [그림 5]와 [그림 6]은 samba 컴퓨터에서 www.gnomernd.com으로 접속했을 때 서로 다른 웹 페이지가 보여지는 것을 알수 있다. 결과 확인을 위해 piranha에서 스케쥴링 방법을 라운더로빙 방식으로 지정하였기 때문에 새로 고치기를 누르게 되면 서로 웹 페이지가 번갈아 나타남을 알 수 있다. 결과가 확인되면 스케쥴 방법은 여러분의 편의에 따라 바꾸면 되겠다. 이것은 곧 lvs.cf 파일을 변경하는 것이 되므로 반드시 pulse를 재 시작 하여야 한다는 것은 당연하다. 이것을 활용하고 연구하는 것은 여러분의 몫이 되었다.


[그림 5] 실행결과 1


[그림 6] 실행결과 2

만약 여러분의 test 클라이언트가 리눅스 기반이라면 컹커리 또는 모질라, lynx를 이용하여 확인 하여도 되겠다. 본 연구에서는 삼바 test을 위한 윈도우가 유일하게 클라이언트가 될 수 있어서 익스플로러를 사용하였다.

펌d by network.hanb.co.kr / Original Link is 『http://network.hanb.co.kr/view.php?bi_id=677』