更新時間: 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