:::
顯示具有 OS/Zentyal 標籤的文章。 顯示所有文章

Zentyal的DLLL-CIAS Router更新記錄 / DLLL-CIAS Router Moduel Update

Zentyal的DLLL-CIAS Router更新記錄 / DLLL-CIAS Router Moduel Update

image

DLLL-CIAS Router是我在開放原始碼的網路路由器Zentyal上所開發的模組。這次我在Zentyal 4.1版本上再度開發了新版本的DLLL-CIAS Router。這個版本是特別為了DLLL-CIAS架構中的網路管理伺服器(Router)、資料儲存伺服器(Storage)、虛擬機器管理伺服器(Virtual Environment)、以及虛擬機器(Virtual Machines)的架構所設計,並且融入知識管理、允許重複網域名稱的功能,最後則是留下完整的安裝方法與自動備份的功能,即使Zentyal再度毀損也能夠輕易地將之還原。這篇記錄著這一版本DLLL-CIAS Router所增加的各種功能。

(more...)

用OpenVZ安裝Zentyal失敗記錄

用OpenVZ安裝Zentyal失敗記錄

openvz

為了繼續之前提出的DLLL-CIAS第四版架構,我開始試著在Proxmox VE 3.2上用OpenVZ來安裝Zentyal (附帶一提,Proxmox VE本身是以VirtualBox架設的,因此是全部都在虛擬機器下運作)。我以ubuntu-14.04-x86_64.tar.gz為基礎,用apt-get來安裝Zentyal。過程很順利,但問題卻卡在最後的網路上:無法建立具有內網與外網的NAT。我嘗試了很多方法來解決這個問題,但總歸來說,無法建立的原因可歸納為兩個門檻:1. OpenVZ的veth網卡只能連到未公開的虛擬網路;2. OpenVZ的veth與venet之間無法轉遞封包。以下來說明我遇到的這兩個問題。


1. OpenVZ的veth網卡只能連到未公開的虛擬網路

image

在討論這個問題之前,我們必須先釐清OpenVZ的兩種網路模式:venet跟veth。下表是veth跟venet的差異比較:

veth跟venet的差異
Feature
特徵
veth venet
可使用的虛擬機器類型 OpenVZ
KVM
OpenVZ
可透過網頁管理
直接配置網路IP
No Yes
MAC address
網卡位置
Yes No
Broadcasts inside CT
封包會在虛擬機器間廣播
Yes No
Traffic sniffing
封包攔截
Yes No
Network security
網路安全
Low High
Can be used in bridges
可否用於橋接器
Yes No
IPv6 ready
可否使用IPv6
Yes Yes
Performance
效能
Fast Fastest

OpenVZ預設使用的是venet (Virtual NETwork),可以直接給定IP,速度非常快。但是venet沒有MAC位址,使用上較為受限,可能不適合作為Zentyal的網路。因此這次我選擇使用veth (Virtual ETHernet)來架設,veth是用模擬真實的網卡的方式,可給虛擬機器安裝如「eth0」的虛擬網卡,因此配置上會比較貼近我們真實使用情境下安裝Zentyal的模式。

我原本是這樣想,但很遺憾的是,veth並沒有照我想的去運作。建立的veth網卡只能在虛擬機器之前彼此連線,但是卻無法連上網際網路。

用KVM的方式新增veth:失敗

我是以Ubuntu 14.04來建立虛擬機器(又稱為container),一開始是用類似KVM的方式來新增網卡,但沒有成功。大致上步驟如下:

  1. 將虛擬機器關機。
  2. 新增veth網卡,Bridge設為vmbr0 (預設),其他參數、包括MAC位址,全由Proxmox VE自動指定。
  3. 虛擬機器開機。
  4. 在console端進入虛擬機器的指令列,設定網路。 (因為網路尚未設定好,所以沒辦法用SSH連入)
    以下都是虛擬機器 (container) 中的操作。
  5. /etc/network/interfaces中設定eth0:
    auto eth0
    iface eth0 inet static
            address 192.168.11.118
            netmask 255.255.255.0
            gateway 192.168.11.99
  6. 重新啟動網路:
    [container]# /etc/init.d/networking restart
  7. 使用ifconfig,確認eth0有正常啟動
  8. 使用ping,無法連到網際網路。
參考OpenVZ的veth說明來設定:失敗

由於用KVM設定veth的方法失敗了,所以我改找OpenVZ官方網站的veth說明來操作。該網頁介紹了很多方法,從簡單的設定使用IPv4的直接路由使用IPv6的直接路由、或是建立橋接器(brdige)等等。我按照上面的指示操作,但大部分都失敗了。

在OpenVZ的介紹中有幾個動作是之前沒有做過的:

  • 確保vzethdev載入:
    modprobe vzethdev
  • 開啟網路卡的forwarding跟proxy_arp

    [host-node]# ifconfig veth101.0 0
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

其他設定網卡的方法大致上類似。但是很遺憾的是,這些設定依然是無法讓veth網卡連線到網際網路。

奇妙的是,網路上許多人在OpenVZ中使用veth看起來都很順利,可是我自己使用OpenVZ從以前到現在就沒有veth順利連線的印象,這究竟是怎麼會是呢?如果有高手看到我這篇的話,希望能夠在下面留言欄為我解惑解惑。


2. OpenVZ的veth與venet之間無法轉遞封包

由於veth未能照預期的形式運作,所以我改轉用venet來設定網卡。

Zentyal只能抓到venet一張網卡

image

儘管虛擬機器可以設定兩個venet的IP,各別配置對外網路用的IP: 192.168.11.117跟對內網路用的IP: 10.0.0.254,但結果會如上圖所示,Zentyal只能抓到一個venet網卡。

這是因為venet網卡只有venet0,兩個IP是用虛擬網路卡的方式模擬出來的。我們可以用ifconfig來觀察虛擬機器的設定:

image

[container]# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:200 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10000 (10.0 KB)  TX bytes:10000 (10.0 KB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:35 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4480 (4.4 KB)  TX bytes:6905 (6.9 KB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.11.117  P-t-P:192.168.11.117  Bcast:192.168.11.117  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

venet0:1  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.0.0.254  P-t-P:10.0.0.254  Bcast:10.0.0.254  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

 

Zentyal設定邏輯中對外網路與對內網路有相當大的差異,若使用venet會導致Zentyal無法判斷那一張網卡是對外網路(External, WAN)還是對內網路,因此並不是一個可行的方案。

venet可連上網際網路,但無法架設NAT

即使如此,若使用venet的兩個IP來設定,對內網路依然連得到對內網路的虛擬機器、對外網路則可以讓網際網路的電腦來連線。不過光是這樣依然無法做成NAT的網路架構。

一般使用情境下,只要在Zentyal當中設定好對外網路與對內網路的網卡,Zentyal就會自動設定成NAT。若是不仰賴套裝軟體,也可以用iptables來實作NAT。我參考Ubuntu Server 12.04 LTS 設定 iptables 實現 NAT Server這篇的做法來做,關鍵的設定是在設定 IP Forwarding and Masquerading:
iptables --table nat --append POSTROUTING --out-interface venet0:0 -j MASQUERADE
iptables --append FORWARD --in-interface venet0:1 -j ACCEPT

但是很遺憾的是,依然無法成功。然後我試著用veth來作為內部網路的網卡,結果反而連venet都無法連線。我猜是因為Zentyal會蓋掉Proxmox對虛擬機器的網路設定,兩者導致了衝突。


結論:應該使用KVM來架設Zentyal

直到剛剛我都還在嘗試各種設定,但是總是該設一個期限。當我把這篇失敗的記錄寫完之後,我想也差不多該終止以OpenVZ架設Zentyal的研究,而回歸到原本使用KVM架設的規劃

想來還是有點不甘心,以OpenVZ架設的Zentyal壓縮後的備份檔案大小只有800MB不到,而且啟動速度又快。回去使用KVM的話,虛擬網卡會有網路轉換的額外負荷,只能說是「可以用」但稱不上是「很有效率」。只是因為伺服器虛擬化之後管理起來比較方便而已。

好吧,雖然不是一篇成功的研究,不過總是該打起精神,這條路就先到此為止吧。

(more...)

DLLL-CIAS介紹 / DLLL-CIAS Introduction

DLLL-CIAS介紹 / DLLL-CIAS Introduction

image

這篇發佈我在2014年6月底的「雲端科技與圖書館行動服務研習班」中課程「雲端平台基礎設施建置實務──DLLL-CIAS介紹」的課程投影片。

This article is the slide of my course “Cloud Technology and Library Mobile Service Workshop” in July, 2014. Finally is my thought of this workshop.


DLLL-CIAS是什麼? / What is DLLL-CIAS

DLLL-CIAS是政大圖檔所數位圖書館與數位學習實驗室中我所開發的開放原始碼雲端平台方案。主要目的是希望能夠讓經費不多的中小型單位也能夠用現有伺服器資源架設好用的IaaS雲端平台。其他介紹請看「DLLL-CIAS雲端平台架設與使用專題目錄」。

課程投影片 / Course Slide

Google Drive的原始版本投影片 / Slide Original Version on Google Drive

另外值得一提的是,這篇投影片是一開始是以Google Drive投影片製作。

image

雖然Google Drive投影片製作起來並不如Power Point一般的精緻(另一方面也是因為這個版本是供列印用的,所以特別以高對比黑白相間的範本製作),但是Google Drive投影片製作功能卻是相當足夠使用。更重要的是,Google Drive的協同製作跟註解(comment)完全贏過Windows的OneDrive。

這學期我大量使用Google Drive的協同編輯功能,像是跟人一起編修論文計劃書、規劃投影片內容,這份投影片也是從Google Drive開啟編輯起。我先規劃投影片大綱,記錄每一張投影片欲講述的內容,以及相關參考資料的來源。然後各張投影片的內容則是跟實驗室各位助理一起填寫資料,接著我再重整資料內容。當投影片內容確定之後,最後我再下載成Power Point檔案作進一步的排版美化。

image

最後排版而成的版面就是這樣子了。

Google Drive與Power Point轉換編輯注意事項 / Difference Between Google Drive and Power Point

使用Google Drive製作投影片跟Power Point製作投影片有幾個重點差異需要注意:

  • Power Point匯入到Google Drive時樣式容易跑掉,但相反的從Google Drive匯入到Power Point問題卻不大。
  • Google Drive不支援投影片頁碼、不支援陰影、不支援連接線的折線。這幾種功能都是投影片常用的重要特色,請自行斟酌。
  • 請善加利用「投影片母片」(Power Point用詞)、「主投影片」(Google Drive用詞),可以保持投影片格式一致。

有機會我再詳細聊一下Google Drive協同編輯的心得吧。


結語:終於把研習班課程完成了 / Conclusion: The Experience of Workshop

這份投影片發佈之後,研習班的工作總算是告一段落了。

這次研習班跟其他研習班最大的差異,就是在於有很多實作的內容,而不是一直坐著聽老師授課。這次研習班主要兩個實作課程,一個是KALS合作標註閱讀學習,另一個則是這個DLLL-CIAS實作,這兩個實作都讓我煞費苦心。DLLL-CIAS要架設許多虛擬機器伺服器這點顯而易見,而KALS要弄到讓學員能夠在系統上順利操作,這背後其實也修改了許多細節。之前去IMLF 2014時就已經拖延了許多工作,然後之後投入在這研習班上,課程的部分就有點顧不住了,真是對不起老師啊。

雖然期末與這研習班整個像是災難一樣鋪天蓋地而來,但最後總算能夠過去。上課過程中有些兵荒馬亂,感謝各位助理大力相挺,沒有你們我一個人真的完成不了這些東西,這也包括了之前寫的幾篇DLLL-CIAS的細部操作文章

研習班上課過程中,我本來以為這麼硬的內容,應該會讓大家聽到一片瞌睡。結果時候聽完還蠻多人跑來跟我比較他們圖書館使用的VMware方案之間的差異,也有平時不碰技術的人跟我表達這堂課讓他獲益,有些人甚至想要在自己家裡架起這套方案。即使是客套話,我也覺得很開心。

希望下次能夠吸取這次的經驗,然後再帶給大家更好的課程內容吧。

(more...)

設定Zentyal DHCP伺服器 / Setup DHCP Server in Zentyal

設定Zentyal DHCP伺服器 / Setup DHCP Server in Zentyal

image

這一份教學說明如何設定ZentyalDHCP伺服器,以提供動態IP給區域網路中的伺服器使用。

In this article, I will describe the steps to setup DHCP server in Zentyal. DHCP server could provide dynamic network configuration for servers in DLLL-CIAS local network.

  • 對應講義:PART-2-STEP-1-3-2
  • 主題:設定Zentyal DHCP伺服器 

教學目錄 / Table of Contents

  1. Zentyal 3.0.2安裝準備
  2. 安裝Zentyal 3.0.2
  3. DLLL-CIAS之Zentyal網路設定
  4. [目前在此篇 >> ] 設定Zentyal DHCP伺服器
  5. Zentyal安裝DLLL-CIAS Router雲端網路模組
  6. Zentyal設定DLLL-CIAS Router雲端網路模組

DHCP伺服器 / About DHCP Server

DHCP是一種用於區域網路中的通訊協定。當區域網路中有伺服器需要設定網路時,該伺服器會查詢區域網路中是否有DHCP伺服器,並跟該DHCP伺服器請求IP設定,最後設置到自己的伺服器上。關於DHCP的運作方式詳細可以看鳥哥的說明

在DLLL-CIAS中,我們也要架設DHCP伺服器,讓區域網路的虛擬機器能夠方便地連上網路。雲端網路模組也需要搭配DHCP伺服器來依據虛擬機器的MAC網卡位址固定他分配的IP位址。因此以下教學將帶大家在Zentyal中設定DHCP伺服器。


啟用DHCP模組 / Enable DHCP Module

  1. 先登入Zentyal網頁管理介面。
    image_thumb1
  2. 進入左邊導覽列的Module Status (模組狀態)
  3. 將DHCP的Status (狀態)打勾
    2014-06-24_141121
  4. 出現確認事項,按「ACCEPT」按鈕確認。
    2014-06-24_141238

DHCP伺服器設定 / Setup DHCP Server

  1. 在左邊導覽列下面找到DHCP進入。
    2014-06-24_141154
  2. DHCP中會有兩張網卡,我們關閉eth0 對外廣域網路的設定,取消前面Enabled的打勾;然後進入eth1 對內區域網路的COnfiguration,點選齒輪按鈕。
    2014-06-24_141340
  3. 這是eth1網卡的DHCP設定畫面,我們要設定的地方在下面,請往下捲動。
    2014-06-24_141351
  4. 找到Ranges (範圍),按下「+ Add new」按鈕。
    2014-06-24_141410
  5. 接著設定要配給的IP範圍。請照以下設定
    - Name: dlll-cias-dhcp
    - From: 10.10.0.1
    - To: 10.10.0.254
    然後按下「ADD」按鈕
    2014-06-24_141449
  6. 確認設定已經新增了。
    2014-06-24_141500
  7. 到左上角按下「Save changes」,將設定確實存入Zentyal之中。這樣DHCP伺服器就設定完成了。
    2014-06-24_141509

下一篇:Zentyal安裝DLLL-CIAS Router雲端網路模組 / Install DLLL-CIAS Router Module in Zentyal

為了更方便管理DLLL-CIAS雲端平台的網路,我們還需要為Zentyal安裝我自行開發的DLLL-CIAS Router雲端網路模組。詳細請看下一篇!

下一篇:「Zentyal安裝DLLL-CIAS Router雲端網路模組」。

(more...)

第四版DLLL-CIAS架構規劃 / DLLL-CIAS Version 4 Structure Planning

第四版DLLL-CIAS架構規劃 / DLLL-CIAS Version 4 Structure Planning

image

在整理DLLL-CIAS第三版教學的時候,我發現現有架構中有許多缺陷。因此我著手規劃DLLL-CIAS第四版的架構,目標是達到去中心化、分散式儲存、高可用、腳本自動化安裝,讓IaaS管理更為簡單。以下則是記錄到目前為止的規劃內容。

In order to impove some disadvantages in DLLL-CIAS version 3, I want to plan the next version with decentralized network structure, distributed storage, high availibity and setup script. Following is the next DLLL-CIAS structure draft.


系統架構 / System Architecture

image

這一張圖用來說明目前規劃DLLL-CIAS第四版(以下簡稱v4)的系統架構。跟DLLL-CIAS第三版(以下簡稱v3)的架構不同,虛擬機器管理伺服器(以下簡稱Proxmox)的功能大幅上升、網路管理伺服器(以下簡稱Zentyal)改以虛擬機器架設、而資料儲存伺服器(以下簡稱NAS)則是非必備的元件,在此圖中省略。主要元件只剩下1. 虛擬機器管理伺服器(Proxmox VE)之MASTER;2. 其他虛擬機器管理伺服器;3. 網路管理伺服器。以下先說明網路架構,再說明這三個元件的功能。

硬體需求 / Hardware Requirments

v4架構要求每一個Proxmox節點都能夠擔任身為MASTER的工作,因此硬體需求為:

  • 至少一台伺服器,最多可以擴增到1270台
  • CPU:64位元,必須支援Intel VT或AMD-V
  • 記憶體:8GB以上
  • 硬碟:80GB以上,建議每台伺服器都有2到4顆硬碟
  • 網路卡:1張

不支援以上最低需求的伺服器,再安裝時應該把Keepalive的HA優先度降低為0,以避免自己被輪到擔任Master Proxmox。

網路架構 / Network Topology

v3架構中是以網路管理伺服器(Zentyal)作為網路閘道路由器來連接內外網,在v4架構中則改成所有的節點都可直接連到對外網路。v4的所有節點仍維持原本的區域網路設定,僅有真正對外的伺服器以虛擬網路卡(Virtual Interface)掛載上可對外連線的網路設定。

在這個架構中至少四個對外IP。一個是給Master Proxmox實際對外連線的IP,其他3個是Zentyal上供管理Proxmox、NAS與虛擬機器的IP,其中管理虛擬機器的IP最多可以設定到250個。

設定舉例如下:

  • Master Proxmox IP位址:192.168.56.101
  • Zentyal上的設定:
    • 管理Proxmxo IP位址:192.168.56.102 (必須事先獲得上層DNS授權)
    • 管理NAS IP位址:192.168.56.103
    • 管理虛擬機器的IP位址:192.168.56.104

廣域網路其他設定:

  • Netmask 子網路遮罩:255.255.255.0
  • Gateway 網路閘道:192.168.56.1

v4在區域網路中的設定也跟v3不一樣:

  • Master Proxmox:10.254.0.254
    ※ 以虛擬IP掛載,同時會掛載Proxmox對外IP位址
  • Zentyal的IP位址:10.0.0.254
    ※ 同時會掛載Zentyal對外IP位址與兩個管理用IP
  • 每一台Proxmox:10.254.{1..5}.{1..99}
  • 每一台NAS:10.253.{1..5}.{1..99}
  • 虛擬機器:10.{1..250}.{1..5}.{1..254}

區域網路其他設定:

  • Netmask 子網路遮罩:255.0.0.0
  • Gateway 網路閘道:10.0.0.254

元件(1): 虛擬機器管理伺服器 / Component (1): Virtual Machine Management Server

跟v3架構中Proxmox僅作為Proxmox VE Cluster的一個節點不同,在v4架構中Proxmox還加上了高可用、分散式儲存等多項功能。

網路設定 / Network Configuration

Proxmox僅在區域網路中連線,網路設定為:

  • IP: 10.254.{1..5}.{1..99}
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

Proxmox Hostname設定規則為:

  • pve.master-rack.a.1-1.example.com

以下說明hostname設定規則:

  • pve: 這是一個Proxmox VE伺服器
  • master-rack:所在機架代號
  • a:機架上的位置編號
  • pve: 這是一個Proxmox VE伺服器
  • 1-1: IP位址的第三部分與第四部分
  • example.com:依據單位各自狀態設定

在這個架構下,舊節點捨棄之後,新的節點不取代舊節點的IP,直接往上新增。例如節點10.254.1.1毀損之後,新機器不設定10.254.1.1,而是設定10.254.1.2。

特別是Hostname必須不同,不能取代舊節點的Hostname,不然Proxmox VE Cluster會發生錯誤。

功能 / Functions

v4架構中每一台Proxmox都具備一樣的工作,以下分項目敘述。

Proxmox VE Cluster跟v3架構一樣,只有Storage多掛載一個目錄:

  • 每一台Proxmox都是Proxmox VECluster的節點
  • 以下設定只有第一台需要設定:
    • 建立Proxmox VE Cluster,名稱為DLLL-CIAS
    • Storage 掛載 /mnt/mfs 為 a_mfs,Max Backup設定為1。關於/mnt/mfs下面會說明。
    • 再到Storage 掛載 /mnt/mfs 為 mfs-backup,Max Backup設定為5,僅有Backup功能。
    • 排程備份VMID 100到mfs-backup,時間為每週一凌晨2:00,備份模式為snapshot,壓縮為none。
    • 排程備份除了VMID 100之外的虛擬機器到a_mfs,時間為每週日凌晨2:00,備份模式為snapshot,壓縮為gzip最佳。
  • 第二台之後設定以下:

高可用:

  • keepalived套件
  • 每一台都擔任BACKUP角色
  • keepalived中使用notify_master的腳本keepalived_to_master.sh:當該節點升格成MASTER角色時執行的動作。細節在下面的「情結:切換MASTER」會說明。
  • 開機自動啟動keepalived

分散式儲存:

  • MooseFS套件
  • 設定/etc/hosts:10.254.0.254 cias-pve-master
  • 除了安裝Proxmox所在硬碟之外的所有硬碟,全部格式化為ext3,掛載到/data/底下。例如/dev/sdb掛載到/data/sdb
  • master套件:安裝完成,預設不啟動,縮短垃圾桶時間,限制只能10.254.0.0/16連線
  • metalogger套件:監控cias-pve-master (原本預設是mfsmaster,在此做修改)
  • chunkserver套件:提供/data底下的資料夾給cias-pve-master當做儲存空間
  • mfsmount (mfs-client端):在/mnt/mfs掛載cias-pve-master
  • 以上都開機自動啟動、開機自動掛載

Zentyal備份到本機端:

  • 用crontab,在每週一凌晨4:00,從/mnt/mfs/dump/vzdump-qemu-100-*_*_*-*_*_*.*,複製並重新命名到/var/lib/vz/dump/zentyal.tar.vma,覆蓋舊檔案

停電斷線自動關機:

  • 使用crontab,每3分鐘確認是否可連線到8.8.8.8。如果無法連線,表示可能對外網路已經斷線,預約15分鐘後進行關機
  • 若恢復連線,則取消關機動作。

元件(2): MASTER虛擬機器管理伺服器 / Component (2): Master Virtual Machine Management Server

在v4架構中只會有一台Proxmox擔任Master,以下簡稱Master Proxmox。這台Master Proxmox在以Keepalived實作的高可用集叢(High Availability Cluster,以下簡稱HA)中,可由任何一台Proxmox擔任。Keepalived會依照優先權決定擔任Master的Proxmox,在安裝Proxmox的時候可以設定優先權。

網路設定 / Network Configuration

Master的Promxox同時具有對外網路與對內網路連線,Keepalived會自動幫擔任Master的Proxmox設定好額外的網路設定。Master的網路設定都是用虛擬IP的方式設定,並不影響原本Proxmox本身的網路設定。

廣域網路設定如下,請根據現實環境來修改:

  • IP: 192.168.56.101
  • Netmask: 255.255.255.0
  • Gateway: 192.168.56.1

區域網路設定如下:

  • IP: 10.254.0.254
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

Hostname為:cias-pve-master。但實際上並不設定在伺服器本身,僅在/etc/hosts記錄。

功能 / Functions

Master的Proxmox基本功能都跟其他Proxmox一樣,只是額外具有以下功能:

  • 負責給其他Proxmox加入Cluster用
  • Keepalived的status為MASTER
  • MooseFS的mfsmaster跟mfscgiserv皆啟動,可用9425連接埠觀看
  • 自身運作著Zentyal虛擬機器
  • 定時匯出虛擬機器列表到mfs管理目錄中
  • 定期檢查節點是否存活,如果沒有存活則自動將該節點進行情節(6)移除節點的腳本

元件(3): 網路管理伺服器 Zentyal / Component (3): Network Management Server

Zentyal的工作跟v3時差不多,但是把管理區域區隔開來,這部份會在雲端網路模組中改進。

網路設定 / Network Configuration

Zentyal的網路設定跟v3一樣有兩張網卡。對外廣域網路網卡上基本設定了一個IP,然後再用虛擬IP掛載至少兩個管理用IP。對內區域網路網卡則只會有一個設定。

廣域網路的設定請根據現實環境來修改。管理Proxmox的IP如下,這同時也是Zentyal Web GUI的連線設定,也必須是擁有DNS授權的功能:

  • IP: 192.168.56.102
  • Netmask: 255.255.255.0
  • Gateway: 192.168.56.1

然後以下兩個廣域IP是用虛擬IP的方式設定:

  • 管理NAS用:192.168.56.103。整合到雲端網路模組設定。
  • 管理虛擬機器用:192.168.56.104。此類型IP可以增加到240個。整合到雲端網路模組設定。

區域網路設定只有一個,設定如下:

  • IP: 10.0.0.254
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

Hostname為cias-router。

功能 / Functions

Zentyal使用KVM虛擬機器,主要工作為基本的閘道器跟雲端網路模組這兩種。

以KVM虛擬機器架設Zentyal設定為:

  • 硬碟:4 GB
  • 記憶體:2 GB
  • 網路卡:1張virtio高速網卡

該虛擬機器會預先配置好以下動作:

  • 安裝好Zentyal 3.0,僅安裝最小需要的元件:DNS Server、DHCP Server
  • 啟用模組
  • 配置區域網路設定:10.0.0.254/8
  • 安裝好雲端網路模組
  • 網路設定:SSH僅供10.254.0.254連線,其餘禁止
  • 設置DHCP Server:提供範圍是10.251.{0..254}.{1..254}
  • 設置腳本:新增Zentyal帳號與密碼 (create_user.sh)、設定Proxmox管理IP (setup_ip_proxmox.sh)、設定NAS管理IP (setup_ip_nas.sh)、設定虛擬機器管理IP (setup_ip_vm.sh)
  • 開發用腳本:清除log設定 (dev_clean.sh)

基本網路閘道器角色功能為:

  • DNS Server:可以設定註冊新的Domain Name
  • DHCP Server:給區域網路暫時取得IP使用

雲端網路模組包括:

  • PVE Back End:Proxmox連線管理:固定使用原本的IP,給Proxmox做連接埠轉遞跟反向代理伺服器(reverse proxy,以下簡稱RP)來連線管理
  • NAS Back End:NAS連線管理:指定一個IP給NAS用,給NAS做連接埠轉遞管理跟RP來連線管理
  • VM IP:虛擬機器管理IP對應編號設定:設定IP與區域網路第二部分對應,對應編號範圍為{0..250}。舉例來說,192.168.56.104對應設定0,對應的區域網路範圍就是10.0.{1..5}.{1..99},對應VMID為{1..5}{01..99}。虛擬機器VMID與區域網路IP對應請看後面的介紹。
  • VM Back End:虛擬機器連線管理:給虛擬機器做連接埠轉遞跟RP。直接設定VMID,由VMID轉換成區域網路IP對應。虛擬機器VMID與區域網路IP對應請看後面的介紹。
  • 其他:URL Redirect、DNS,功能跟v3相同,只是IP使用的是給Proxmox管理用IP。

元件(4): 資料儲存伺服器 NAS / Component (4): Storage Server

NAS在v4架構中不是必須的,但如果有多的NAS想納入架構的話,在v4中依有NAS的位置。跟v3一樣,NAS的功能主要的工作是擺放備份檔案、ISO跟虛擬應用範本。許多人會拿NAS來放置KVM的映像檔,然後運作KVM,但是在DLLL-CIAS中並不這樣做。DLLL-CIAS的虛擬機器預設都會運作在a_mfs上。

網路設定 / Network Configuration

NAS的網路設定都是區域網路,僅提供DLLL-CIAS內部使用,對外連線則是由Zentyal的NAS管理IP來控制。

  • IP: 10.253.{1..5}.{1..99}
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

NAS的Hostname設定規則與Proxmox類似:

  • nas.master-rack.a.1-1.example.com

以下說明Hostname設定規則:

  • nas: 這是一台NAS
  • master-rack:所在機架代號
  • a:機架上的位置編號
  • 1-1: IP位址的第三部分與第四部分
  • example.com:依據單位各自狀態設定
功能 / Functions

在v4中的NAS只會使用它的NFS功能,分享的NFS名稱同Hostname,讓它掛載到Proxmox VE Cluster的Storage中,掛載名稱也跟Hostname相同。


虛擬機器VMID與區域網路IP對應規劃 / Virtual Machine ID and Local IP Address Mapping

為了確保虛擬機器與區域網路IP的一致性,v4架構中在雲端網路模組改以強制設定VMID,而非以往的設定區域網路IP。VMID與IP的對應規則如下:

VMID 100為特殊VMID,僅給zentyal使用。

VMID的組合基本上為3~6碼,分成前三碼跟後三碼兩個部分,前三碼為虛擬機器管理對外IP對應編號,範圍為{0..250},對應到區域網路IP的第二部分;後三碼為連接埠轉遞的編號,範圍為{101..199}、{201..299}、{301..399}、{401..499}、{501..599},連接埠轉遞編號第一碼對應到區域網路IP的第三部分、後兩碼對應到區域網路IP的第四部分。

舉例來說:

  • VMID 101:對外IP編號0,連接埠轉遞101xx,區域網路IP 10.0.1.1,這是VMID範圍的最小值。
  • VMID 10501:對外IP編號10,連接埠轉遞501xx,區域網路IP 10.10.5.1
  • VMID 250599:對外IP編號250,連接埠轉遞599xx,區域網路IP 10.250.5.99,這是VMID範圍的最大值。

在這樣的規劃下,v4的虛擬機器最大數量為495連接埠轉遞*250對外IP編號共123000 (12萬3千)台,此時需要250個給虛擬機器用的對外IP,加上其他元件的需求,總共需要253個對外IP。

若以最低對外IP的條件來看,以最少4個對外IP的規劃中,虛擬機器最大數量即為495台。


管理情節 / Management Scenario

v4的架構中有許多管理情節,主要會用到的有以下幾項,並概述情節中會進行的動作。

情節(1):安裝 / Scenario (1): Install Master

v4架設需要一台伺服器跟一片Proxmox VE 3.2光碟,你可以從這邊下載。安裝動作只需要執行一次,簡稱為Master安裝,只要有Master Proxmox在,其他伺服器應該執行擴增動作。

以下是手動的部份,[M]表示Master安裝中特別會做的動作:

  • 安裝Proxmox VE 3.2
  • [M] 安裝過程中設定對外Master IP
  • 從網路下載dlll_cias-setup.sh腳本
  • 增加執行權限並執行dlll_cias-setup.sh腳本

腳本首先先蒐集設定資訊:

  • 腳本檢查網路可否連線,不可連線則提示訊息後退出
  • 詢問Keepalived的優先度,範圍是{0..100},預設值是50,數字越大越可能擔任Master Proxmox。
  • 腳本檢查是否有Master在,來決定是否是Master安裝模式。
  • [M] 腳本詢問給Zentyal的帳號與密碼
  • [M] 腳本詢問給Zentyal網路設定:Proxmox管理IP、NAS管理IP、虛擬機器管理IP、netmask、gateway
  • 腳本提示準備開始安裝,按enter確認。

腳本先保存管理資訊跟下載必要檔案,保存到/data/cias管理目錄中:

  • [M] 保存Master Proxmox的對外IP、Zentyal的Proxmox網路設定到一個管理連線設定檔
  • [M] 下載keepalived需要的keepalived.conf等必要腳本
  • [M] 根據對外IP來調整keepalived設定檔
  • [M] 製作手動切換的keepalived設定檔
  • [M] 下載MooseFS必要的設定檔案
  • [M] 下載Zentyal虛擬機器即必要腳本
  • [M] 下載DLLL-CIAS管理用的必要腳本
  • [M] 根據此Proxmox VE安裝中設定的管理者email,設定通知設定檔
  • [M] 調整腳本權限

腳本接著進行網路設定與Keepalived的安裝:

  • 安裝Keepalived必要元件
  • 從管理目錄複製必要設定到指定位置
  • 根據現在網路卡數量,將所有網路卡都bonding到vmbr0上
  • [M] 修改vmbr0網卡設定為10.254.0.1
  • 啟用Keepalived
  • [M] 此時vmbr0應該會額外被掛上Master對外IP跟10.254.0.254的虛擬IP
  • 設定開機自動執行

腳本接著進行MooseFS安裝:

  • 新增10.254.0.254 cias-pve-master設定到/etc/hosts
  • 安裝MooseFS所需元件(包括更新fuse)
  • 從管理目錄複製必要設定檔到指定位置
  • 啟用metalogger
  • [M] 啟用master
  • 確認cias-pve-master可連線
  • 格式化Proxmox VE安裝外的其他磁碟,並進行掛載
  • 依據磁碟數量調整chunk設定檔
  • 啟用chunk
  • 掛載mfsmount
  • 設定開機自動執行
  • [M] 把需要共用的檔案放到 /mnt/mfs/cias 中

如果是Master安裝模式,則腳本進行以下動作:

  • [M] 新增Promxox VE Cluster
  • [M] 新增Cluster的Storage,掛載MooseFS
  • [M] 新增Cluster的排程備份

如果是Master安裝模式,則腳本接著進行Zentyal的安裝:

  • [M] 從管理目錄還原Zentyal虛擬機器
  • [M] 開機Zentyal
  • [M] 以預設帳號cias與預設密碼dlll@nccu連線到Zentyal (預設IP為10.0.0.254)
  • [M] 設定Zentyal的管理用IP
  • [M] 新增Zentyal帳號與密碼
  • [M] 在背景執行備份Zentyal
  • [M] 在背景執行備份Zentyal到Local

腳本新增排程工作:

  • 設定排程,定期將Zentyal備份檔案備份到Local硬碟中
  • 設定排程,定期偵測斷線自動關機腳本
  • [M] 設定排程,定期將現有節點上所擁有的虛擬機器的VMID儲存到/mnt/mfs/cias/pve_master_vmid.conf中
  • [M] 每隔5分鐘確認所有節點可連線狀態,若一節點無法連線,則等待30分鐘,若30分鐘後仍然無法連線,執行情節(6)移除此節點

腳本提示安裝完成訊息:

  • 安裝完成
  • 根據/mnt/mfs/cias/cias-network.conf,顯示Proxmox VE管理IP跟Zentyal網頁管理IP

以上安裝完成,這時候應該會持續備份Zentyal虛擬機器,就讓它跑吧。


情節(2):擴增 / Scenario (2): Extend Slave

v4架構下,擴增時需要一台伺服器跟一片Proxmox VE 3.2光碟,你可以從這邊下載。若已經架設好Master Proxmox,則其他伺服器則是用擴增的方式安裝,簡稱Slave安裝。

以下是手動的部份,[S] 表示擴增使用

  • 安裝Proxmox VE 3.2
  • [S] 安裝過程中設定區域網路IP 10.254.{0..254}.{2..254} (因為10.254.0.1給Master Proxmox使用了)
  • 從網路下載dlll_cias-setup.sh腳本
  • 增加執行權限並執行dlll_cias-setup.sh腳本

腳本首先先蒐集設定資訊:

  • 腳本檢查網路可否連線,不可連線則提示訊息後退出
  • 詢問Keepalived的優先度,範圍是{0..100},預設值是50,數字越大越可能擔任Master Proxmox。
  • 腳本檢查是否有Master在,來決定是否是Master安裝模式。因為有Master在了,所以以下是Slave安裝。
  • [S] 詢問Master Proxmox的連線密碼,並測試連線到Master Proxmox以確認金鑰
  • 腳本提示準備開始安裝,按enter確認。

腳本從Master Proxmox複製管理資訊:

  • [S] 用rsync複製Master Proxmox的管理目錄底下的檔案到本機的管理目錄

腳本接著進行MooseFS安裝:

  • 新增10.254.0.254 cias-pve-master設定到/etc/hosts
  • 安裝MooseFS所需元件(包括更新fuse)
  • 從管理目錄複製必要設定檔到指定位置
  • 啟用metalogger
  • 確認cias-pve-master可連線
  • 格式化Proxmox VE安裝外的其他磁碟,並進行掛載
  • 依據磁碟數量調整chunk設定檔
  • 啟用chunk
  • 掛載mfsmount
  • 設定開機自動執行

腳本接著進行網路設定與Keepalived的安裝:

  • 安裝Keepalived必要元件
  • 根據現在網路卡數量,將所有網路卡都bonding到vmbr0上
  • 從管理目錄複製必要設定檔到指定位置
  • 啟用Keepalived
  • 設定開機自動執行

如果是Slave安裝模式,則腳本進行以下動作:

  • [S] Proxmox VE Cluster加入到Master Proxmox中

腳本新增排程工作:

  • 設定排程,定期將Zentyal備份檔案備份到Local硬碟中
  • 設定排程,定期偵測斷線自動關機腳本
  • [S] 以背景執行從Zentyal備份檔案備份到Local硬碟中

腳本提示安裝完成訊息:

  • 安裝完成
  • 根據/mnt/mfs/cias/cias-network.conf,顯示Proxmox VE管理IP跟Zentyal網頁管理IP

以上安裝完成,這時候應該會持續備份Zentyal虛擬機器,就讓它跑吧。


情節(3):自動切換Master Proxmox / Scenario (3): Automatically Swtich Master Proxmox

由於Keepalived工具提供的高可用集叢,當Master Proxmox無法連線時,Keepalived會自動挑選其中一台Proxmox,把它當作Master Proxmox,並進行以下切換的動作。

以下Keepalived會自動設定:

  • 掛載對外Master Proxmox對外網路
  • 掛載cias-pve-master 10.254.0.254

然後進行MooseFS高可用設定:

  • metalogger復原master資料:mfsmetarestore -a
  • 啟動master

虛擬機器的高可用:

  • 一一檢查/mnt/mfs/cias/pve_master_vmid.conf中的VMID
  • 如果集叢中VMID 100虛擬機器存在且可用,試著Migrate到這個節點上
  • 如果集叢中無法取得該虛擬機器,則嘗試從備份檔案中還原虛擬機器
    • VMID 100是Zentyal,從本機端取得還原檔案
    • 其他VMID則從mfs取得檔案還原,選擇負載量最低且非Master Proxmox的節點去還原
  • 確認虛擬機器的auto_start=1下正常開機

通知:

  • 寫信給現在mfs管理目錄中設定的管理者

情節(4):手動切換Master Proxmox / Scenario (4): Manual Swtich Master Proxmox

有些情況下我們希望手動指定Master Proxmox到特定伺服器上,而若該伺服器沒有被Keepalived指名,我們可以用以下的指令來手動切換Master Proxmox。

  • 到管理目錄執行 dlll_cias-swtich_to_master.sh

該腳本會先進行以下動作

  • 將原本keepalived.conf改成keepalived.conf.temp
  • 把調高權限的keepalived.conf複製到此位置:此設定中預設status為MASTER,priotity為999。
  • 重新啟動Keepalived,此時因為設定的關係,會將其他節點上的Master Proxmox狀態搶到自己身上
  • 自動執行情境(3)的腳本
  • 刪除調高權限的設定檔,復原原本的keepalived.conf設定檔

情節(5):手動退出集叢 / Scenario (5): Proxmox Escape From Cluster

此節點預備要退出集叢,則在要此節點上執行此腳本:

  • 設定遷移完畢之後的通知email
  • 取得本機上的虛擬機器列表
  • 每一台虛擬機器進行以下動作
    • 根據每一台Proxmox的RAM使用量,決定移到負荷量最低且非Master Proxmox的Proxmox
    • 遷移虛擬機器,除了VMID 100
  • 如果自己是Master Proxmox
    • 更新本機端虛擬機器檔案
    • 重新啟動Keepalived,此時其他節點會搶走MASTER狀態,並把VMID 100 Zentyal遷移到他身上去
    • 每隔5分鐘確認VMID 100是否遷移完成
  • 全部遷移完成之後,脫離Cluster
  • 發信通知管理者,以及mfs管理目錄中的管理者
  • 實體伺服器關機

情節(6):移除Proxmox節點 / Scenario (6): Delete Proxmox Node

如果某一個節點因為意外斷線,則必須重建該節點上面的虛擬機器,並移除該節點。這個情節是由Master Proxmox定時運作,此腳本工作為:

  • 取得參數:指定要移除的節點
  • 確認該節點是否可連線
  • 如果可連線,則在該節點上執行情節(5)
  • 如果不可連線,則讀取該節點的虛擬機器列表
  • 選擇最低負載量與非Master Proxmox,從mfs備份檔案中還原
  • 全部還原完成之後,將此節點從cluster中移除
  • 寫信通知email

注意事項 / Attention Notes

v4的架構在使用的時候有一些地方需要特別注意。

網路連線安全性 / Network Security

為了讓網路管理伺服器去中心化,所有的節點都暴露在對外網路中。這個意思是,如果該網域底下有人自行設定網路為Master Proxmox的10.254.0.254或任一10.x.x.x的IP,v4架構就會很容易發生錯誤或是被入侵。但是比起v3時會有網路管理伺服器Zentyal單點故障導致整體無法運作的問題,去中心化的設計只是在安全性與便利性上的取捨。

額外的便利性是任一虛擬機器都可以設定成對外IP,提供直接連線。

Master Proxmox的高負荷量 / High Loading of Master Proxmox

目前Master Proxmox主要只有做高可用,可是其本身負擔著大量的工作,最主要的就是Zentyal跟Mooster的mfsmaster。Zentyal必須處理大量連線,而mfsmaster在檔案數量大增的時候對於RAM的需求也很高。

即使可以手動指定負載能力最高的伺服器擔任Master Proxmox,但還是沒辦法讓其他人分擔Master Proxmox的工作量。目前我想不到是否有其他的好辦法,留待下一版DLLL-CIAS再看看有沒有更好的方案吧。


待研究事項 / To-Do

這篇只是v4的架構草案,目前還有許多地方未經確認與實作,仍有待繼續研究。目前主要需要確認的問題包括:

  • 網路卡實作bonding的技術還沒實作過
  • Proxmox VE Cluster節點只剩下一台的時候,會因為cluster not ready而限制很多操作,包括下一個問題。
  • 新master還原虛擬機器zentyal時,會因為舊節點還沒移除而被卡住:理論上,在cluster上會保留斷線的節點以及上面的虛擬機器設定,而禁止在同一個cluster不同節點上新增同樣的VMID。這部份一定得想辦法克服才行。
  • Zentyal在最小安裝與合理負荷之間的平衡:只有實際上架設過後才能知道了
  • Zentyal腳本操作可行性:我記得Zentyal可以用腳本來操作,可是一時間找不到說明文件

可能比較不會是問題,但是需要研究如何撰寫的腳本:

  • 依據磁碟數量來做格式化的腳本
  • metalogger復原master還沒實作過
  • 改進雲端網路模組的功能
  • 確認虛擬機器在Cluster中存在的腳本
  • 遷移虛擬機器到本機端的腳本

實作上面的待辦事項:

  • 架設開發用的Zentyal:要注意硬體設定
  • 各種腳本與設定檔的撰寫

結語:Proxmox VE Cluster依然是大難關 / Conclusion: Problems With Proxmox VE Cluster

以上規劃了DLLL-CIAS第四版的架構,基於第三版的架構之上再納入網路管理伺服器去中心化、分散式儲存、虛擬機器高可用與腳本簡化安裝等想法,並改進了雲端網路模組的設計,讓可同時運作的虛擬機器上限提高。

但是其實最根本的問題還沒解決:Proxmox VE Cluster仍有高度不穩定性的問題。

如果一開始都把Proxmox VE Cluster架設好、加入集叢,然後每個節點放著正常運作,這樣子Cluster沒有問題。若是節點以正常的方式關機,Cluster依然沒有問題。

但問題會出現在節點以非正常方式斷線或關機,或是節點數量只剩下一台時,這樣會導致整個Cluster運作失靈。要移除節點或是用相同Hostname加入Cluster時,好像也有可能導致Cluster毀損。

當Cluster毀損時,不管點任何動作,都會被要求登入,而且除了自己節點之外的其他節點都無法顯示任何訊息。

目前修復Proxmox VE Cluster的方法仍然不明,要如何避免Cluster毀損的方法也還沒有摸熟,這些都是要在發展v4之前必須搞懂得部分。

我們之前修復的方式是以不同名字重建Cluster,然後從NFS中取得備份檔案來還原。手動作業耗費了相當多的時間,我覺得這是相當大的一個問題。

之後有機會會再針對這部份進行深入的研究,至少要確保Cluster正常運作,DLLL-CIAS才算是一個穩定的方案吧。

(more...)

DLLL-CIAS雲端平台架設與使用專題目錄 / DLLL-CIAS Cloud Platform Installation & Usage Catalog

DLLL-CIAS雲端平台架設與使用專題目錄 / DLLL-CIAS Cloud Platform Installation & Usage Catalog

image

DLLL-CIAS是政大圖檔所數位圖書館與數位學習實驗室中我所開發的開放原始碼雲端平台方案。我預定於103學年的「雲端科技與圖書館行動服務研習班」中介紹此方案,希望能夠讓經費不多的中小型單位也能夠用現有伺服器資源架設好用的IaaS雲端平台。這篇將列出DLLL-CIAS雲端平台架設與使用相關文章的目錄。

DLLL-CIAS is an open source IaaS solution for my laboratory, Digital Library and Learning Laboratory in  National Chengchi University Graduate Institue of Library, Information and Archival Studies. I will introduce DLLL-CIAS in a workshop at June 2014. DLLL-CIAS is very suitable for small organization to build a low-cost, powerful and easy to use IaaS cloud platform. This catalog will list articles of DLLL-CIAS build and usage instruction.


DLLL-CIAS介紹 / DLLL-CIAS Introduction

DLLL-CIAS安裝(1):網路管理伺服器 / DLLL-CIAS Installation (1): Network Management Server

DLLL-CIAS安裝(2):資料儲存伺服器 / DLLL-CIAS Installation (1): Storage Server

DLLL-CIAS安裝(3):虛擬機器管理伺服器 / DLLL-CIAS Installation (1): Virtual Machine Management Server

DLLL-CIAS使用 / Usage of DLLL-CIAS

DLLL-CIAS的未來發展 / DLLL-CIAS Next Version

(more...)

Zentyal安裝DLLL-CIAS Router雲端網路模組 / Install DLLL-CIAS Router Module in Zentyal

Zentyal安裝DLLL-CIAS Router雲端網路模組 / Install DLLL-CIAS Router Module in Zentyal

image

這一份教學是介紹如何在Zentyal上安裝我自行開發的DLLL-CIAS Router雲端網路模組。這個模組是DLLL-CIAS架構中管理網路的核心元件。

In this aritcle, I will describe how to install DLLL-CIAS Router which I developed into Zentyal. DLLL-CIAS Router module is the core compoment of DLLL-CIAS network management.

(more...)