Xen 으로 버텨보아요~

[b:qp3m79sj][/b:qp3m79sj] DualCore 나 Quard CPU
[b:qp3m79sj]
[/b:qp3m79sj] 4G 이상의 RAM
[b:qp3m79sj]*[/b:qp3m79sj] 40G 이상의 HDD

의 하드웨어 구성을 가진 PC에서 Windows, Linux, FreeBSD 등을 동시에, 웹서비스를 위해서 사용하고 싶거나, 걍, -___-) 노는 꼴 보기 싫을때… XEN을 써보아요~

용어정리:

[code:qp3m79sj]
XEN : 오픈소스 가상호스트 패키지 (아마존의 EC2 가 CentOS 기반의 XEN 으로 동작합니다여)
dom0 : 가상호스트를 동작시키는 본체
domU : 가상호스트[/code:qp3m79sj]

사용중인 Ubuntu Desktop을 XEN Desktop으로 사용하는 것을 설명하게는게 아니라, 처음부터 XEN Server로 설치하는 것을 가정하고있으니, 혼동하지 마세요

[b:qp3m79sj]01)[/b:qp3m79sj] .ISO 혹은 .DVD 미디어를 사용해서 Ubuntu Server 로 설치합니다. 파티션 구성은 제 경우로 설명합니다. 각자 입맛에 맞게 하세여

[code:qp3m79sj]
/boot 128M ext3 # sda1
swap 1G swapfs # sda2
/ 16G xfs # sad3[/code:qp3m79sj]
[b:qp3m79sj]* 설치과정에서 시스템서비스로 openssh는 반드시 설치하시는게 좋습니다.[/b:qp3m79sj]

설치후, 일반적인 업그레이드를 하세여~ 그런후,

[b:qp3m79sj]02)[/b:qp3m79sj] 최대 동시 사용가능 루프 디바이스 갯수를 64개로 지정하는 라인을 추가해주세요

[code:qp3m79sj]

echo "dm_mod" >> /etc/modules[/code:qp3m79sj]

[b:qp3m79sj]03)[/b:qp3m79sj] LVM2 패키지를 설치및 조절

[code:qp3m79sj]

fdisk /dev/sda (나머지 모든 영역을 4번째 파티션으로 만드세여)

apt-get install lvm2 ubuntu-xen-server

mkdir -p /home/xen/templates

mv /lib/tls /lib/tls.disabled[/code:qp3m79sj]

[b:qp3m79sj]04)[/b:qp3m79sj] vim /etc/xen/xend-config.sxp (변경되는 부분만 표시했습니다)

[code:qp3m79sj]
(logfile /var/log/xen/xend.log)
(loglevel DEBUG)
(xend-http-server no)
(xend-unix-server yes)
(xend-tcp-xmlrpc-server no)
(xend-unix-xmlrpc-server yes)
(xend-relocation-server no)
(xend-unix-path /var/lib/xend/xend-socket)
(xen-tcp-xmlrpc-server-address ‘0.0.0.0’)
(xen-tcp-xmlrpc-server-port 8006)
(xend-relocation-hosts-allow ‘^localhost$ ^localhost\.localdomain$’)
(console-limit 4096)
(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 196)
(dom0-cpus 0)
(vnc-listen ‘0.0.0.0’)
(vncpasswd ‘password’)
[/code:qp3m79sj]

[b:qp3m79sj]05)[/b:qp3m79sj] vim /etc/xen-tools/xen-tools.conf (변경되는 부분만 표시했습니다)

[code:qp3m79sj]
install-method = debootstrap
size = 4Gb # Disk image size.
memory = 384Mb # Memory size
swap = 384Mb # Swap size
fs = xfs # use the EXT3 filesystem for the disk image.
dist = hardy # Default distribution to install.
image = sparse # Specify sparse vs. full disk images.
gateway = 192.168.0.1 #(자신의 상황에 맞게 고치세여)
netmask = 255.255.255.0 #(자신의 상황에 맞게 고치세여)
broadcast = 192.168.0.255 #(자신의 상황에 맞게 고치세여)
dhcp = 0
passwd = 1
arch=i386
serial_device = xvc0
disk_device = xvda #default[/code:qp3m79sj]

[b:qp3m79sj]06)[/b:qp3m79sj] lvm2 파티션 설정

[code:qp3m79sj]

pvcreate /dev/sda4

vgcreate vdisk /dev/sda4 (vdisk 라는 이름은 각자 정하시면 되여)

vgchange -a y vdisk

mkdir -p /mnt/vdisk[/code:qp3m79sj]

[b:qp3m79sj]07)[/b:qp3m79sj] XEN domU 고유 맥주소 생성기 다운로드 (필요할것이니, 받아두셈)

[code:qp3m79sj]

cd /usr/local/bin

wget http://os-drive.com/files/easymac.sh

chmod easymac.sh[/code:qp3m79sj]

[b:qp3m79sj]08)[/b:qp3m79sj] XEN domU (Ubuntu) 생성 스크립트 ([b:qp3m79sj]/usr/local/bin/create-xen-image.sh[/b:qp3m79sj])

[code:qp3m79sj]
#!/bin/bash
echo -n "hostname: "
read HOSTNAME
echo -n "IP: "
read IP
echo -n "Netmask (255.255.255.0): "
read NETMASK
echo -n "Gateway (192.168.0.1): "
read GATEWAY
echo -n "DISK size(G): "
read DISK
echo -n "RAM size(G): "
read RAM

KERNEL="2.6.24-19-xen"

xen-create-image --hostname=$HOSTNAME --size=${DISK}Gb --swap=384Mb --ide
–ip=${IP} --netmask=${NETMASK} --gateway=${GATEWAY}
–force --fs=xfs
–dir=/home/xen --memory=${RAM}Mb --arch=i386
–kernel=/boot/vmlinuz-${KERNEL}
–initrd=/boot/initrd.img-${KERNEL}
–install-method=debootstrap --dist=hardy
–mirror=http://archive.ubuntu.com/ubuntu/
–passwd
[/code:qp3m79sj]

[b:qp3m79sj]09)[/b:qp3m79sj] XEN domU (Ubuntu) 생성

[code:qp3m79sj]

chmod +x /usr/local/bin/create-xen-image.sh

create-xen-image.sh

  hostname: ubuntu.test.net
  IP: 192.168.0.50
  Netmask (255.255.255.0): 255.255.255.0
  Gateway (192.168.0.1): 192.168.0.1
  DISK size(G): 6
  RAM size(G): 384

  ... (졸라 기다리셈) ...

[/code:qp3m79sj]

[b:qp3m79sj]10)[/b:qp3m79sj] 생성된 설정파일 확인 (위의경우: [b:qp3m79sj]/etc/xen/ubuntu.test.net.cfg[/b:qp3m79sj]) disk: => tap:aio: 로 바꾸세여!

[code:qp3m79sj]
kernel = ‘/boot/vmlinuz-2.6.24-19-xen’
ramdisk = ‘/boot/initrd.img-2.6.24-19-xen’
memory = ‘384’
vcpus = ‘1’
root = ‘/dev/hda2 ro’
disk = [
‘tap:aio:/home/xen/ubuntu.test.net/swap.img,hda1,w’,
‘tap:aio:/home/xen/ubuntu.test.net/disk.img,hda2,w’,
]
name = ‘ubuntu.test.net’
vif = [ ‘ip=192.168.0.50,mac=00:16:3E:15:CF:2B’ ] #(맥주소는 domU 마다 틀릴수있슴)
on_poweroff = ‘destroy’
on_reboot = ‘restart’
on_crash = ‘restart’

extra = ‘3 console=xvc0’
[/code:qp3m79sj]

[b:qp3m79sj]11)[/b:qp3m79sj] domU 조절

[code:qp3m79sj]

mkdir -p /mnt/xen/ubuntu

mount -t loop -o rw /home/xen/ubuntu.test.net/disk.img /mnt/xen/ubuntu

cd /mnt/xen/ubuntu

vim ./etc/event.d/xvc0

  exec /sbin/getty 38400 xvc0   # <---- 기본값 'tty1'을  'xvc0'로 바꾸지 않으면 xm console 명령을 통해서 진입할 수 없다

mv ./lib/tls ./lib/tls.disabled

vim ../etc/network/interfaces (eth0: DHCP를 제외하고 domU 생성당시 기입했던 static IP를 넣는다.)

  auto eth0
  iface eth0 inet static
  address 192.168.0.50
  netmask 255.255.255.0
  gateway 192.168.0.1

cd /etc/xen/

umount /mnt/xen/ubuntu

[/code:qp3m79sj]

[b:qp3m79sj]12)[/b:qp3m79sj] domU 시작

[code:qp3m79sj]

xm create ubuntu.test.net

xm list

xm console ubuntu.test.net

  콘솔에서 빠져나올땐 CTRL+]

[/code:qp3m79sj]

이상, 간략 소개였습니다. (쓰는게 힘들어서, -___-a, 속히 대충 적고 일단 마무리합니다여… 내용 보강은 추후, )

이것도 좋은 팁이군요. XEN은 들어만 봤지 실제 사용은 해보지 않아서… ^^;

확실히 요새는 가상화가 대세긴 대세인 듯. :)

유용한 글입니다.

근데… 질문이요.

xen 만의 사설 IP를 사용하고 싶은데… 어떻게 해야 하나요…
서버 외부에서 접속을 못하게 하고 싶습니다.

지금과 같은 상황이라면… 같은 gateway를 쓰는 네트웍 망에서는 ip만 알면 접속이 가능하겠지요.

따라서… 제가 원하는것은… Xen domu들 만의 네트웍망을 원합니다.

넘 어려운 가요?..

이상한 질문을 한것 같아 죄송하네요.
수고하세요

유용한 글입니다.

근데… 질문이요.

xen 만의 사설 IP를 사용하고 싶은데… 어떻게 해야 하나요…
서버 외부에서 접속을 못하게 하고 싶습니다.

지금과 같은 상황이라면… 같은 gateway를 쓰는 네트웍 망에서는 ip만 알면 접속이 가능하겠지요.

따라서… 제가 원하는것은… Xen domu들 만의 네트웍망을 원합니다.

넘 어려운 가요?.. 난해한가요? 막연한가요? ^^;;

이상한 질문을 한것 같아 죄송하네요.
수고하세요

[quote="yeslinux":2wlag9kn]
xen 만의 사설 IP를 사용하고 싶은데… 어떻게 해야 하나요…
서버 외부에서 접속을 못하게 하고 싶습니다.
지금과 같은 상황이라면… 같은 gateway를 쓰는 네트웍 망에서는 ip만 알면 접속이 가능하겠지요.
따라서… 제가 원하는것은… Xen domu들 만의 네트웍망을 원합니다.
[/quote:2wlag9kn]

NAT 방식을 원하시는군여

[b:2wlag9kn]01)[/b:2wlag9kn] /etc/xen/xend-config.sxp 파일내에, 네트워크 연결방식을 변경합니다.
[b:2wlag9kn]변경전[/b:2wlag9kn]

[code:2wlag9kn](network-script network-bridge)
(vif-script vif-bridge)
...

Use the following if network traffic is routed with NAT, as an alternative

to the settings for bridged networking given above.

#(network-script network-nat)
#(vif-script vif-nat)[/code:2wlag9kn]

[b:2wlag9kn]변경후[/b:2wlag9kn]

[code:2wlag9kn]#(network-script network-bridge)
#(vif-script vif-bridge)
...

Use the following if network traffic is routed with NAT, as an alternative

to the settings for bridged networking given above.

(network-script network-nat)
(vif-script vif-nat)[/code:2wlag9kn]

[b:2wlag9kn]02)[/b:2wlag9kn] /etc/xen/*.cfg 파일내의 IP/Subnet-Mask/Gateway 를 내부IP 사용환경으로 적절히 변경합니다.

[b:2wlag9kn]03)[/b:2wlag9kn] rebooting

*1) 이후로 포트연결은 iptables를 사용하셔서 적절히 스위칭하세요
*2) XEN의 네트워크 연결방식을 학습하셔야합니다. 생각보다 어렵지 않습니다.

참조#1: [url:2wlag9kn]http://wiki.xensource.com/xenwiki/XenNetworking[/url:2wlag9kn]
참조#2: [url:2wlag9kn]http://wiki.kartbuilding.net/index.php/Xen_Networking[/url:2wlag9kn]

1번째 DomU는 webserver로 쓸꺼고…
2번째 DomU는 MySqlserver로 쓸꺼에요.

Dom0에서 iptables를 사용하여 webdomU와 mysqldomU의 포트를 열어 주면 되는거죠?와우 감사합니다.

[quote="yeslinux":1rsrlbx4]1번째 DomU는 webserver로 쓸꺼고…
2번째 DomU는 MySqlserver로 쓸꺼에요.

Dom0에서 iptables를 사용하여 webdomU와 mysqldomU의 포트를 열어 주면 되는거죠?[/quote:1rsrlbx4]

[b:1rsrlbx4]01)[/b:1rsrlbx4] NAT 환경에서 [b:1rsrlbx4]domU 사이의 네트웍[/b:1rsrlbx4]은 이미 연결되어 있습니다. 따라서, 별다른 조치는 필요없습니다.

[b:1rsrlbx4]02)[/b:1rsrlbx4] 외부 –> dom0 –> domU 로의 연결과정에서 dom0의 80번 포트로 들어오는 연결을 domU의 88번 포트로 연결하는 것은 아래의 룰을 적용하여 구현합니다:

[code:1rsrlbx4]

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.50:88

[/code:1rsrlbx4]
위의 룰은 eth0 디바이스로 들어오는 80번포트로의 모든 TCP 연결을 192.168.1.50의 88번 포트로 돌립니다. 이것은 방향을 돌리는 것만 지정한 것이므로, 아래와 같이 새로운 연결을 받아들이라는 룰을 추가합니다:

[code:1rsrlbx4]

iptables -A INPUT -p tcp -m state --state NEW --dport 80 -i eth0 -j ACCEPT

[/code:1rsrlbx4]

[b:1rsrlbx4]사견)[/b:1rsrlbx4]:

  • iptables를 통한 포워딩은 구현방법이 간단하지만 domU 가 off여서 안내 페이지를 보여야한다거나, domU를 대체하거나 등등의 요구조건을 실행시키는 동안 잠시동안 다른 사이트로 방향을 돌리거나 해주어야할땐, nginx 를 사용하는 것도 좋은 방법일수있습니다
  • nginx 를 memcached 와 연계해서 사용할경우 제법 괜찮은 속도향상을 주지요.

새로운 안목을 넓혀 주시는 군요.
memcached 나 nginx 부분은 찾아서 공부를 또 해야 겠군요.^^;;
wiki를 사용하고 있어서 memcached 부분에서 또 좋은걸 배웠습니다.

http://ubuntulove.tistory.com/20

nGinX 와 memcached를 사용한 것에 대한 잼난 글은 아래와 같습니다:

  • [url:70kd5kr3]http://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/[/url:70kd5kr3]
    [attachment=0:70kd5kr3]nginx-memcached.png[/attachment:70kd5kr3]
    즉, 원격지에서 연결요청이 오면 nginx는 일단 memcached에 해당 URL의 정보가 있는지 살펴본후,
    적절하면 하드디스크를 읽지않고 즉시 원격지로 결과를 보내줍니다.
    캐쉬된 정보가 없다면 nginx는 기존방식대로 URL을 가져오고 원격지로 전달전에 memcached에 저장합니다.
    따라서, 추후에 같은 정보를 요구할 경우 하드디스크를 읽지 않는다는 큰 장점이 있지요.
    물론 동적컨텐트는 EXPIRE 헤더를 통해 캐쉬조절할 수 있습니다.

제가 쓰는 nginx.conf의 한 부분을 보시면 즉시 감을 잡으실듯… (something.kr 이란 사이트는 없어요 -__-)

[code:70kd5kr3]
#user nobody;
worker_processes 3;
worker_rlimit_nofile 10240;

error_log logs/error.log info;
pid logs/nginx.pid;

events {
worker_connections 1024;
use epoll;
}

http {
include mime.types;
default_type application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                  '"$status" $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;
sendfile       on;
tcp_nopush     on;
keepalive_timeout  0;
#keepalive_timeout  65;
#gzip  on;

server {
    listen       80;
    server_name  www.something.kr something.kr;
    charset utf-8;
    access_log  logs/somthing.kr/access.log  main;
    location / {
        root   html;
        index  index.html index.php index.cgi index.htm;
        set $memcached_key $uri;
        memcached_pass 127.0.0.1:11211;
        default_type text/html;
        proxy_pass http://www.something.kr:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

}
[/code:70kd5kr3]

nginx = 아파치? 음 memcached 와 함께 앞단에서 쓰이는 건 알겠는데요.
apache에서 memcached 를 지원만 해준다면 nginx는 않써도 되는 건가요?
아니면 nginx가 memcached 이외에도 큰 장점이 있는 건가요?
xen에서 얘기가 흘러 여기 까지 왔는데
추후 nginx 라던가 memcached 부분에 대한 Tip이나 강의도 함 부탁드리겟습니다.
memcached 부분은 config파일을 보니 뭐 별 설정은 없어서 크게 어려운 것은 없는듯 한데요.
nginx 부분은 제가 못찾는건지 한글로되어 있는 문서를 찾을수가 없더군요. 아님 있어도 빈약하거나 마음에 안들어요 ^^;;

수고하세요.~^___^

[quote="yeslinux":14dam0m4]nginx = 아파치?[/quote:14dam0m4]nginx 와 apache는 둘다 HTTP 서버입니다.

[quote="yeslinux":14dam0m4]음 memcached 와 함께 앞단에서 쓰이는 건 알겠는데요.
apache에서 memcached 를 지원만 해준다면 nginx는 않써도 되는 건가요?[/quote:14dam0m4]네.

[quote="yeslinux":14dam0m4]아니면 nginx가 memcached 이외에도 큰 장점이 있는 건가요?[/quote:14dam0m4]졸라~ 많져.

[quote="yeslinux":14dam0m4]xen에서 얘기가 흘러 여기 까지 왔는데
추후 nginx 라던가 memcached 부분에 대한 Tip이나 강의도 함 부탁드리겟습니다.[/quote:14dam0m4]Ubuntu와는 관계없는 주제라고 생각되어 할 계획이 없습니다.

[quote="yeslinux":14dam0m4]memcached 부분은 config파일을 보니 뭐 별 설정은 없어서 크게 어려운 것은 없는듯 한데요.[/quote:14dam0m4]네, 머, 껌이져…^_^;;

[quote="yeslinux":14dam0m4]nginx 부분은 제가 못찾는건지 한글로되어 있는 문서를 찾을수가 없더군요. 아님 있어도 빈약하거나 마음에 안들어요 ^^;;[/quote:14dam0m4]한글로 된 문서는… 제가 별로 찾질 않아서 뭐라 말씀드릴수없네요. 걍, 이기회에 영어로 돌아서심이…