2012年12月23日 星期日

Linux KVM 魔法書 - 虛擬框架系統


Linux KVM 魔法書這套系統, 要感謝我的學生與同好這一年熱心支持. 才得以順利推出. Linux KVM 魔法書系統主要是提供 IT 資訊專家資料科學家, 一個可擴展及可客製化的資訊實作平台.

利用此資訊實作平台, 使用者只需製定 XML 系統架構檔, Linux 核心虛擬框架便會為你建立所需的實作系統. 目前實作成功的系統有 1.企業靜態路由網路系統   2.企業網路服務 (Apache, Samba,..)系統  3.海量分散檔案系統 (Hadoop)  4. IPv6 企業網路系統等.  成功實作的系統架構圖, 如下 :

1. 企業靜態路由網路系統


2. 企業網路服務系統  (DNS Server, WINS Server, DHCP server,..)



3. 海量分散檔案系統 (Hadoop)


4. IPv6 企業網路系統




實作說明

以下以建置一個簡易的企業靜態路由系統為例, 為你說明如何使用 Linux 核心虛擬框架系統, 此實作系統架構圖, 如下 :


1. 取得 Linux 核心虛擬框架系統檔

$ wget http://tobala.net/download/kvmgrimoire.zip
--2012-12-15 14:49:51--  http://tobala.net/download/kvmgrimoire.zip
正在查找主機 tobala.net (tobala.net)... 69.89.27.215
正在連接 tobala.net (tobala.net)|69.89.27.215|:80... 連上了。
已送出 HTTP 要求,正在等候回應... 200 OK
長度: 25981275 (25M) [application/zip]
Saving to: `kvmgrimoire.zip.1'

100%[======================================>] 25,981,275   198K/s   in 2m 44s

2012-12-15 14:52:38 (155 KB/s) - `kvmgrimoire.zip.1' saved [25981275/25981275]

2. 安裝 Linux 核心虛擬框架系統
將 kvmgrimoire.zip 解壓縮至家目錄中, 命令如下 :

$ unzip kvmgrimoire.zip

3. 檢查與安裝 Linux 核心虛擬框架系統所需之執行套件

$ cd ~/kvmgrimoire

$ sudo ./lib/kvmcheck.sh
sudo apt-get install uml-utilities libxml2-utils libxml-xpath-perl

請根據上述程式的輸出資訊, 安裝所需套件, 命令如下 :

$ sudo apt-get install uml-utilities libxml2-utils libxml-xpath-perl

4. 產生與指定 XML 系統架構檔

首先在 ~/kvmgrimoire/conf 目錄中, 產生 mynet.xml 系統架構檔, 命令如下 :

$ cd ~/kvmgrimoire

mynet.xml 系統架構檔建立後, 在 conf/default 指定使用 mynet.xm, 操作命令如下 :

$ touch conf/mynet.xml

$ echo "conf/mynet.xml" > conf/default

5. 建立所需的虛擬 Switch HUB
編輯 mynet.xml 系統架構檔, 設定內容如下 :

<?xml version="1.0"?>
<network>

  <!-- 透過 name 屬性, 指定 Switch HUB 的名稱 -->
  <switch-hub name="SH100">
     <!-- 設定 Bare-Metal 主機可直接與此網段其他虛擬主機連接的 IP 位址 (可以不設定) -->
     <ip>172.16.100.1/24</ip>
     <ports>
       <!-- 此 Port 作為 Switch-Hub 裝置本身使用 -->
       <tap name="SH100-NET" mac="02:01:00:00:00:00"/>

       <!-- 這些 Port 提供給虛擬主機使用 -->
       <tap name="SH100P1" mac="02:01:00:00:00:01"/>
       <tap name="SH100P2" mac="02:01:00:00:00:02"/>

       <!-- 這些 Port 提供給路由主機使用 -->
       <tap name="SH100R1" mac="02:01:00:00:00:f0"/>
       <tap name="SH100R2" mac="02:01:00:00:00:f1"/>
     </ports>
  </switch-hub>
</network>

XML 系統架構檔一旦設定完畢, 可執行 kvmaddsw.sh 程式, 實作所需的 Switch-HUB

$ sudo ./kvmaddsw.sh SH100
SH100SH100 建立成功
  SH100-NET 建立成功
  SH100P1 建立成功
  SH100P2 建立成功
  SH100R1 建立成功
  SH100R2 建立成功

如要刪除所建立的 Switch HUB, 執行以下程式

$ sudo ./kvmdelsw.sh SH100
SH100 刪除成功
  SH100-NET 刪除成功
  SH100P1 刪除成功
  SH100P2 刪除成功
  SH100R1 刪除成功
  SH100R2 刪除成功

6. 規劃與建置所需的虛擬硬碟檔
因 NAT 虛擬主機所面對的網路架構可能是多網段,所以它會需要虛擬硬碟, 儲存路由表資訓. 建立虛擬硬碟檔, 請在 conf/mynet.xml 加入以下定義

<network>
                 :
  <vm-disk>
    <disk type="raw" name="vmdisk/NAT100.img" size="20m"/>
  </vm-disk>

</network>

根據 mynet.xml 定義檔產生所需的虛擬硬碟檔, 執行以下程式

$ sudo ./kvmdisk.sh 
vmdisk/NAT100.img : 建立成功 (raw 型態)
vmdisk/NAT100.img : 掛載成功 (/dev/loop5)
vmdisk/NAT100.img : 硬碟分割成功
vmdisk/NAT100.img : 格式化 Ext4 檔案系統 成功
vmdisk/NAT100.img : 卸載成功 (/dev/loop5)

7. 規劃與建置所需的 NAT 虛擬主機

增加實作主機 br0 網路介面, 編輯 /etc/network/interfaces 檔案, 命令如下 :

$ sudo nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
  bridge_ports eth0
  bridge_stp off

設定 NAT 虛擬主機, 請在 conf/mynet.xml 加入以下定義

<network>
              :
              :
  <router name="RBR0.100">
     <vm name="GW100" osname="TSC" ostype="32">
       <uplink sw="br0" port="NAT100" mac="02:01:72:16:10:22">
         <!-- 設定此網路介面使用 DHCP 取得 TCP/IP 設定 -->
         <ipv4>dhcp</ipv4>
       </uplink>
       <nextlink port="SH100R2" mac="02:02:72:16:10:ff">
         <ipv4>172.16.100.254:255.255.255.0::</ipv4>
       </nextlink>
       <!-- 啟動 NAT 功能 -->
       <nat>true</nat>
       <disk name="vmdisk/NAT100.img"/>
     </vm>
  </router>
</network>

根據 mynet.xml 定義檔啟動所需的 NAT 虛擬主機, 執行以下程式

$ sudo ./kvmrouter.sh RBR0.100

NAT 虛擬主機啟動後, 需在系統中自行下載 iptables.tcz 套件, 命令如下 :

$ tce-load -wi  iptables.tcz                                          
Downloading: netfilter-3.0.21-tinycore.tcz                                     
Connecting to distro.ibiblio.org (152.19.134.43:80)                            
netfilter-3.0.21-tin 100% |*******************************|   316k  0:00:00 ETA
netfilter-3.0.21-tinycore.tcz: OK                                              
Downloading: iptables.tcz                                                      
Connecting to distro.ibiblio.org (152.19.134.43:80)                            
iptables.tcz         100% |*******************************|   404k  0:00:00 ETA
iptables.tcz: OK  

重新啟動 NAT 虛擬主機, 命令如下 :

$ sudo reboot

$ sudo iptables -t nat -L -n                                         
Chain PREROUTING (policy ACCEPT)                                               
target     prot opt source               destination                           
                                                                                 
Chain INPUT (policy ACCEPT)                                                    
target     prot opt source               destination                           
                                                                                  
Chain OUTPUT (policy ACCEPT)                                                   
target     prot opt source               destination                           
                                                                                  
Chain POSTROUTING (policy ACCEPT)                                              
target     prot opt source               destination                           
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0 

8. 建立虛擬電腦

請在 conf/mynet.xml 加入以下定義

<network>
                 :
                 :
  <client name="SH100" osname="TSC" ostype="32">
     <vm name="HDNN10" tap="SH100P1" mac="02:01:72:16:10:10">
       <!-- 設定虛擬主機的 IP, Default Gateway 及 DNS Server -->
       <ipv4>172.16.100.10:255.255.255.0:172.16.100.254:168.95.1.1</ipv4>

       <!-- 設定虛擬主機使用 root 帳號登入 -->
       <superuser>true</superuser>
     </vm>
     <vm name="HDSN11" tap="SH100P2" mac="02:01:72:16:10:11">
       <ipv4>172.16.100.11:255.255.255.0:172.16.100.254:168.95.1.1</ipv4>
     </vm>
  </client>

</network>

根據 mynet.xml 定義檔產生所需的虛擬主機, 執行以下命令

$ sudo ./kvmclient.sh SH100

啟動的虛擬主機會自動登入, 登入後畫面如下 :

Tiny Server Core 1.0 (Philosopher's Stone)                                     
---------------------------------------------------------------                                   
[eth0]                                                                         
  IP : 172.16.100.11                                                           
  Gateway : 172.16.100.254                                                     
  DNS : 168.95.1.1

檢測內網是否正常運作, 命令如下 :

$ ping 172.16.100.254    

檢測外網是否正常運作, 命令如下 :

$ ping 168.95.1.1

檢測 DNS 是否正常運作, 命令如下 :

$ ping www.hinet.net


沒有留言:

張貼留言