OpenVZ 手記

更新時間: 25/7/11

目錄:

  • 緣起
  • 安裝
  • 建立 template
  • 建立虛擬機
  • 基本設定
  • 有關指令
  • VPS Configure Template
  • 名詞

 


緣起:

 

由於現時的 CPU 多數是多核心(Core)的, 而且往往都是逗留在 ildle 狀態,

看上去相當可惜. 因為開著它電用了, 而又沒有物盡其用, 真是浪費了 !!

用盡它的其中一個方法是一機多用, 如同時做 Web Server , File Server, VPN Server, DNS Server 等等...

出於安全的考慮, 分隔它們是不二法門. 因為以免一個 Sevice 被 hack, 其他的就糟糕了 ~

這問題正正係"虛擬方案"可以解決的 !!

市面上有不少這類軟件, 方法及方案.

我試過用 vmwave, qemu, 及 virturebox,

又試過 xen, vserver 等等虛擬技術,

最後都是紮根於 openvz 了, 原因 ??

因為它簡單, 成熟, 完善, 效能高 !!

 


安裝:

 

1. 安裝 Kernel

 

不同的發行本會有不同的openvz Kernel, 它們分別是 kernel 預設值的不同

這是因為它們會以不同的 .config 去 compile openvz 的 kernel.

在 Debian_5 ( lenny ) 之後, Debian 就有了 openvz 的軟件包

所以安裝就變得方便許多

apt-get install linux-image-2.6-openvz-686

P.S.

現時在 Squeeze 上的 Kernel 是 2.6.32-* (non-VSwap kernel)

所以既不是 RHEL6(2.6.42), 也不是 RHEL5(2.6.28)

2. 安裝管理工具

 

不能不提的是 Kernel 是與它的管理工具分開來安裝的 ~

原因是它們的 license 有所不同 !!

Kenerl 一定是以 GPL 發行, 不過工具就未必如此了 !!

apt-get install vzctl vzquota

 

 

3. 建立開機服務

令 openvz 的功能在相應的 runlevel 啟用就可以了

update-rc.d vz start 30 2 .

它的功用是載入所需的 kernel modules 及 自動啟用 VE

 

4. 修建 cron job

VZ 的 cron job 是為了實現 Clean network rules 及 Containers rebooted 的

不過, 定的真身是在 /etc/vz/cron/vz 裡

每次啟動 VZ 時, 系統會 copy /etc/vz/cron/vz  到 /etc/cron.d/vz  

我們亦可以手動實現它

/etc/init.d/vz update-cron

小小修改:

*/2 * * * * root /usr/share/vzctl/scripts/vpsreboot

令 VZ 的 VE 可以更快 reboot

4. 建立捷徑 (為了方便而已)

ln -s /var/lib/vz /vz
 

5. 設定 kernel 的設定值

修改 sysctl.conf

############### OpenVZ Configure ############
net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
#############################################

一切就緒後, 就要重新啟動電腦, 之後選用 openvz 的 kernel.

如無意外, 大家就有虛擬機了 ~~

不過進入 terminal 後, 又好像與以往沒有什麼分別 @@"?

 

6. 確認成功安裝:

uname -a

Linux debian 2.6.26-2-openvz-686 #1 SMP Thu Mar 26 03:55:11 UTC 2009 i686 GNU/Linux

lsmod | grep ^vz

vzethdev 9184 0
vznetdev 14532 4
vzrst 116532 0
vzcpt 97924 0
vzdquota 32732 2 [permanent]
vzmon 23112 6 vzethdev,vznetdev,vzrst,vzcpt
vzdev 3624 4 vzethdev,vznetdev,vzdquota,vzmon

 

cat /proc/vz/version

feoktistov

 

P.S.

* /etc/sysctl.conf 會被安裝包修改的, 如果沒有, 只自己動手
* 注意 initrd.img-2.6.26-2-openvz-686 要有足夠 driver 去開機, 比如 NIC 的 driver !!
* 官網上還有另外一個 deb 庫 ( deb http://download.openvz.org/debian etch main )

 


 

建立 template

 

這裡的 template 是指  VEs 的整個 root 目錄結構,

它包括 /etc, /bin, /dev, /usr, /lib 等多個必要目錄

我們可以用它一次過 clone 多台虛擬機出來 ^ ^

勉強來說, 這可以當作為"裝機"

如果怕煩, 那可在官網上直接用現成的 template

http://wiki.openvz.org/Download/template/precreated

 

建立 template 的目錄

cd /vz/template

mkdir squeeze

debootstrap  squeeze ./squeeze

# 這裡的 debootstrap 是用來建立 debian 系統的結構

# 它會在網上下載最基本的目錄及檔案架構回來

# debootstrap 的用法詳見 link

 

 

不帶環境變進數入chroot環境

env -i /usr/sbin/chroot ./squeeze/ /bin/bash

 

建立基本環境變數(方便工作)

export LANG=C
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux

# root 的家目錄當然只有 root 可以進啦

chmod 700 /root

 

下載字表編碼

apt-get install locales

# 建立 /etc/locale.gen, 內容如下

en_HK.UTF-8 UTF-8
zh_CN GB2312
zh_CN.UTF-8 UTF-8
zh_TW BIG5
zh_TW.UTF-8 UTF-8

# 修改  /etc/default/locale, 內容如下

LANG=zh_TW.UTF-8

建立字碼表

locale-gen

 

修改 root 的 .bashrc

 
export PS1='\[\e[32m\]\h:\w\$\[\e[m\]' umask 007

 export LS_OPTIONS='--color=auto'
 eval "`dircolors`"
 alias ls='ls $LS_OPTIONS'
 alias ll='ls $LS_OPTIONS -l'
 alias l='ls $LS_OPTIONS -lA'

 alias rm='rm -i'
 alias cp='cp -i'
 alias mv='mv -i'

 

安裝一些基本軟件

apt-get install vim screen lftp tree openssh-client rsync perl nload net-tools localepurge dar

# 千萬不要在 template 上安裝 openssh-server, 否則架架虛擬機會同 Key !!!

 

# 為系統的 root 用戶建一個簡單的密碼 ( 如 toor, 它是 root 的反過來串 =,=" )

dpkg-reconfigure passwd

 

修改時區

dpkg-reconfigure tzdata

 

# 修改 /etc/inittab , 把所有 tty 關閉, 亦即是把以下 6 行刪去

1:23:respawn:/sbin/getty 38400 tty1
.....................
6:23:respawn:/sbin/getty 38400 tty6
 

修改 /etc/default/rcS

把 UTC=yes 改成 UTC=no

# 將 DNS 加入 /etc/resolv.conf

 

使用 OpenDNS的 DNS

加以下兩行到 /etc/resolv.conf

nameserver 208.67.220.220
nameserver 208.67.222.222

 

將 mirror 加入 /etc/apt/source.list

###################### Package_Mirror
deb http://ftp.hk.debian.org/debian stable main
deb http://ftp.tw.debian.org/debian stable main

###################### Security
deb http://security.debian.org/ stable/updates main
deb http://volatile.debian.org/debian-volatile stable/volatile main

 

# 修改 /etc/syslog.conf , 令 log 不用即時寫入 HardDisk

sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/rsyslog.conf

 

修正 /etc/mtab

rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab

停用不必要功能

update-rc.d -f klogd remove

 

清除垃圾

apt-get clean

 

# 完成以上工作後離開 chroot

exit

 

打包

mkdir -p /vz/template/cache

cd /vz/template/squeeze

tar -zvcf /vz/template/cache/debian-6.tar.gz *

 

!!! 完工 !!!

完成的 debian-6.tgz  大約只有 101Mbyte ~

 

P.S.
hostname, ip, dns 是可以在 "實體主機" 上設定的
debian-6.0.tar.gz 的名稱是與 /etc/vz/dists/debian-*.conf 有關聯的 !!

 


 

建立虛擬機:

# 把系統資源平均分四份, 並儲存成 /etc/vz/conf/ve-quad.conf-sample

vzsplit -n 4 -f quad

# 建立基本的虛擬機

vzctl create 1003 --ostemplate debian-6 --config quad

# 以上指令會建立了虛擬機的設定檔 1003.conf 及虛擬機的空間 /vz/private/1003

當 /vz/private/1003 本身已經存在時, 那就要加上 --private /vz/private/1003/tmp 如下

vzctl create 1003 --ostemplate debian-6 --config quad --private /vz/private/1003/tmp

mv /vz/private/1003/tmp/* /vz/private/1003/

之後修正 /etc/vz/conf/1003.conf 內的 VE_PRIVATE="/vz/private/1003/"

 


 

基本設定:

vzctl set 1001 --ipadd 192.168.1.11 192.168.123.11\
                      --nameserver 208.67.220.220 208.67.222.222 \
                      --hostname mail \
                      --name mail \
                      --noatime yes \
                      --onboot yes \
                      --save

P.S.

如果不使用 --save 的話, 那麼這裡的設定只對已運行的虛擬機是次生效

--noatime yes 會大大提升系統效能

--name 會在 /etc/vz/name 目錄放上相對應的連結, 如

lamp -> /etc/vz/conf/1001.conf

 

 


一般運行:

# 啟動

vzctl start 1003

 

# 查看基本資料

vzlist

VEID NPROC STATUS IP_ADDR HOSTNAME
1001 30 running 192.168.1.1 lamp
1201 8 running 192.168.1.201 test

 

進階使用:

例出可顯示的列

  • vzlist -L
ctid
.......
ip
status
kmemsize
......
cpuunits
......

 

vzlist -o ctid,status,kmemsize,oomguarpages,cpuunits

CTID STATUS  KMEMSIZE OOMGUARP CPUUNI
1001 running 4615849  9319     50000
1002 running 1879447  15765    23809

 

# 在虛擬機內執行指令

vzctl exec 1201 passwd

# 進入虛擬機 ( 小心使用, 因為你是外部 root 的身份來 !!! )

vzctl enter 1201

# 安裝 ssh, 令遠程可以登入

apt-get install openssh-server

 

# 停止虛擬機

vzctl stop 1201

 


 

有關指令
 

vzctl

主要工具, 用來設置 VPS 的一切

vzlist

查看有什麼虛擬機在運行及其IP 等等

vzps -E 0

查看某一虛擬機內行了什麼程式(Debian 是沒有此程式的)

vzsplit

把本機資源平均分多份

vzcfgvalidate /etc/vz/conf/1001.conf

檢查設定檔的設定值是否正確

vzcpucheck

查看本機 CPU 資源及已佔用了幾多

vzdqdump

備份工具

vzcalc

查看每一架虛擬機用了幾多 RAM

vzmemcheck -v

查看每一架虛擬機用了幾多 RAM, 比 vzcalc 詳細

vzpid

查看某一 pid 是那虛擬機的

vzmigrate

vznetcfg

vzdqcheck

vzquota

vzdqload


 

VPS Configure Template:

 

VPS 的設定檔存放在 /etc/vz/conf/<VID>.conf

 

#### Info
NAME="lamp"
DESCRIPTION="test"

#### Start
DISABLED="no"
ONBOOT="yes"
ALLOWREBOOT="yes"
BOOTORDER="5"

#### Property
OSTEMPLATE="debian-6.0"
HOSTNAME="test"

#### Net
P_ADDRESS="192.168.1.1"
NAMESERVER="192.168.123.1"

#### Paths
VE_ROOT="/var/lib/vz/root/$VEID"
VE_PRIVATE="/var/lib/vz/private/$VEID"

#### Feature
FEATURES="nfs:on "
NOATIME="yes"
# OpenVPN
DEVICES="c:10:200:rw "
# Pureftpd
CAPABILITY="NET_ADMIN:on "


################ Resource ################
### Proccess
### CPU
### Net
### RAM
### File
### other
##########################################

 


 

名詞:

host = Node = 真實的主機
guest = VE = VPS = 虛擬出來的 linux

 

Creative Commons license icon Creative Commons license icon