Proxmox and OpenVZ in OVH Alpha US Server!

Proxmox 安裝完成後(這程式安裝步驟在網路上應該不少),但不少文件都仍是以1.X的版本及畫面來說明,有時我還真對不上。

主要第一次使用不熟悉,陣子因為抽到OVH Alphas Test Server,又聽虛擬化這字熱很久了,自己工作上雖偶有用到,只是侷限在筆電上安裝VritualBox,也就那麼一個GUEST能跑,再多也跑不動,所以有不少虛擬化東西不怎明瞭。

而這次的學習過程裡,不得不讚賞OVH的Manager V3 只有按下要的OS就能成功的安裝想要的OS,提供的選擇很多,其中一個就是Proxmox 2.0按下後,不用20分鐘就全好了。

再來就是我的虛擬化之旅,以下就是日記~記得很亂主因有些東西我自己已知道怎麼弄就跳過不記。共花了我三天右右的時間,將近一天瞭解一些字眼及虛擬化的訊息,再接下來把我Blog and Seedbox 試著搬到這台測試主機,其中一個IP對我來說真的還蠻痛苦的。

這裡記錄了

 – 如何下載範本

 – 如何設定VM,網路及Reverse Proxy

 – 使用Pound 接收 443(SSL)連線,並搭配CloudFlare免費SSL

 – Apache Log 更動才能記錄由Client 端IP

– 換掉 Apache2 改用 Nginx (April/25)

1. 下載範本(Download Template), 一開始找不到, 請參考下圖在Node 內Content的 local 下。範本的功能,應該是用來快速建立及設定你要的OS及APP,而不用在大費周章去準備及安裝。

  • 其中在同畫面內可分為 VM及Container ,而Container 就是 OpenVZ目前全都都安裝OpenVZ.
  • 網路部分有不少東西要弄,以前都用ipfw 現在用iptables 指令還真不太習慣,常打成 iptable,只好用alias 幫忙!
  • 這台測試機器的規格可以參考 Ovh Alpha Test Server ,該站站主還希望大夥能夠利用 iperf 測試協助OVH提供更好的routing route! Please participate for testing, click the link of Ovh Alpha Test Server in ahead sentence , under Iperf section has an instruction how to test.

而網路設定的部分參考 Network_Model ,我之前常用的VPS或Seedbox都是利用Bridge 方式做出來的,每個Guest OS都可以配置自己的IP,當然與HOST會同網段,真的要成立一家公司VPS要備不少IP。 另外可以參考 Virtual Networking Explained 這篇則是解釋常見的字及使用的時機。

我用的主機是 Kimsufi dedicate 只配 1 個 IP(可額外購買IP). 因此不能用Bridge Mode,只能用NAT方式,把所有GUEST主機網卡封包導給HOST上的 eth0 或 eth1 等。 這個概念試了好久,網路上文章也沒有直接說明。 一般來說安裝Proxmox給了二個Bridge 卡(交換器),可惜我們都用不到(vmbr0 , vmbr1)

Setting Guest an Host IP address and masquerad , if you dedi server only has one ip address!

首先設定HOST的網路,需要先編輯 /etc/network/interfaces 把真實IP加上

Host eth0 為真實IP

Host 內虛擬網卡設定 Guest 網段,指定到 192.168.0.x (private network) 網段,


Host iptables 需要加入,把連接3022埠的封包導到內網主機 192.168.0.100 的 22埠,這樣我才能由外網(家裡)管理這個VM。

在Proxmox Host主機上只要選定一個埠,指到後端某台GUEST 的IP及埠就可以了. 這裡是連接  Host(Real IP) 的 30022 埠後轉接到 192.168.0.100 SSH 埠去.

iptables -t nat -A PREROUTING -p tcp -i eth0 --destination-port 30022 -j DNAT --to-destination 192.168.0.100:22
iptables -A FORWARD -p tcp -i eth0 --destination-port 22 --destination 192.168.0.100 -j ACCEPT

– Save iptables and automatically apply while system boot up.

iptables-save > /etc/iptables

put config into interfaces

auto eth0
iface eth0 inet static
	address 8.18.x.x
	netmask 255.255.255.0
        broadcast 8.18.x.255
        gateway 8.18.x.254
        post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
        pre-up iptables-restore < /etc/iptables.rulesl

-設定Guest OS

  • 如果是 ubuntu base

– apt-get install sudo denyhost lftp curl
– apt-get update ; apt-get upgrade
modify network/interfaces

  • 當使用turnkey application template(版本時,因為第一次開機時,你無法連線進入設定,所以開頭的設定無法進行..相關的啟動設定可以參考 Inithooks

– 需手動去執行 /usr/lib/inithooks/firstboot.d/ 內的檔案, 以wordpress為例,在安裝重開VM後怎麼都沒法子登入也沒有設定過admin的密碼,就要利用目錄內檔案,手動執40wordpress這個檔案設定密碼,phpmysql 接連 mysql帳號則要執行 35mysqlpass

– Reverse Proxy

為何會用到Reverse Proxy(RP)主要是因為在單一真實IP環境,所有的VM都躲在虛擬IP網段之內,利用NAT方式出網無法接收來自80(WWW)的要求,因此利用RP把瀏覽網站的80埠需求先接下,再導到後端(虛擬)VM,對瀏覽者來說是透明的沒感覺,跟瀏覽一般網站相同。

當然你也可以把所有 80及 443 埠給全部導到後面WEB VM 也行,但少了分流及快取的功能。

這裡假設我們有二個需求分別是BLOG與rutorrent的話,就會需要分流(RP)才能搞定。

  • Varnish Reverse Cache

Ubuntu 10.04 TLS內建版本比官網舊是2.1版,建議更新為最新版本

curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
echo "deb http://repo.varnish-cache.org/ubuntu/ lucid varnish-3.0" >> /etc/apt/sources.list
apt-get update
apt-get install varnish

方案A-Varnish 不支援ssl,所以假設要使用SSL,網路上是有方法利用 Nginx 接SSL後把request forward 到 varnish 再到後端的apache ,有點麻煩但還可以做。 只是因為Proxmox與apache之間相依度太高,有用到一些特有的mod,使得更換成Nginx變的不可能。 另default.vcl 的撰寫很重要,如果錯誤會導致網頁的狀況不正確,例如rutorrent 頁面每60秒就要重新登入一次。

方案B-前端把80 及 443埠直接導到後端apache(wordpress)主機也行,但未來你可能同時架了二台以上的WEB,此時有個中繼者做分流及快取能夠加大服務能量。

iptables -t nat -A PREROUTING -p tcp -i eth0 --destination-port 443  -j DNAT --to-destination 192.168.0.101:443

方案CPound加入。其實利用方案B很快,也不用頭痛什麼,或許有些小地方要修改!想想要學就都嘗嘗看看,加上不少人利用此方法完成我想要的,就試著使Pound收取SSL。

安裝sudo apt-get install pound

       修改/etc/pound/pound.cfg, 其中的Cert 參數很重要,沒有這個檔案將無法接收SSL請求。

ListenHTTPS
        Address 8.18.x.x
        Port 443
        Cert "/etc/pound/server.pem" #從Couldflare取得的SSL證書
        AddHeader "X-Forwarded-Proto: https"
        HeadRemove "X-Forwarded-Proto"
        Service
                BackEnd
                        Address 內部WEB主機位址
                        Port 80
                End
        End
End

其中pem檔,利用下方指令產生,一種是由下方方式產生,另一種是後來我由Cloudflare 下載的,其實這塊怎麼運作有點模糊,觀念也可能錯誤,但至少可以執行。

openssl req -x509 -newkey rsa:1024 -keyout server.pem -out server.pem -days 1095 -nodes。

-Secure Proxomon manage page

因為主機的80埠被導到後端WWW主機,但管理介面的登入也希望能夠有所限制。

  • 用iptables 的方式,限制只能某IP能夠連接8006 埠其他的都不行,而443埠給Pound  -> Varnish 了所不用濾掉!
iptables -A INPUT -p tcp -i eth0 ! -s 114.32.x.x --dport 8006 -j DROP
  • 由apache 來管控! 放棄太麻煩了!

– Rsync my blog to wordpress guest OS

這裡其實還有 xml and wp-backup 等方式,甚至由 phpmyadmin 匯出 db 再匯入至新主機上也行!

ssh-keygen -t rsa
scp ras.pub to remote server
/usr/bin/rsync -zavr -P --log-file=/tmp/r-synlog.log --bwlimit=1024 --rsh="ssh -l nobody  -c arcfour"   203.x.x.x:/var/www/wordpress/wp-content/  .

– Ip Failover

  • Alias IP 的概念 還沒申請,但可以試試看。 1英鎊,還真他媽的貴! 其實就是Alias IP ,那給的是不同網段的IP,只是Mac Address 應該是相同的
DEVICE="eth0:0" BOOTPROTO="static" IPADDR="IP.FAIL.OVER" NETMASK="255.255.255.255" ONBOOT="yes" BROADCAST="IP.FAIL.OVER"

– Apache Log

這樣才能LOG到由前端Varnish or Pound 丟過來Request 中的Client IP.

LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combined

– RIPE Failover

如果你有其他的需求超過3個IP以上就要考慮OVH RIPE Failover IP ,但收費不便宜 每月有15.0 英鎊的Professsional Service Fee and each IP add 1.0 GBP

What’s the benefit of Virutalization (虛擬化的好處)

我在想一台主機如果功能強大就能包含所有的服務,那有什麼特別的原因,需要虛擬化呢. 我到現在還接觸不久.也說不上來.

  • 想到在搬動主機時方便,可以把自己的Guest OS整個dump下來就直接到另一家的主機。
  • 可以動態的增加CPU及記憶體,這點與Amazon EC2 這些服務是否相似呀,不管如何對Admin或使用者來說是件好事

接下來修改文件,其中不少東西要加, nginx 不支持 .htacess 還有wordpress 中的一些 rewrite rules!

Replace Apache2 with Nginx + php5_fpm

會這麼做,原因是Blog 虛擬機 Apache2 太吃記憶體,1G的記憶體每天都用的滿滿的,雖然有減少fork的apach2,幫助還是不大,這站說實話一天20個瀏覽量就很好了!所以只好換了另一個 風評很好的http server Nginx (發音很像engine-x),只是它無法處理php網頁,需額外安裝php5-fpm,而為不用常見的fast-cgi,而改用php5-fpm是它的效能比fast-cgi或spawn-cgi整體上快了些

整個更換的步驟不會很難,安裝很簡單

sudo apt-get install python-software-propertiessudo
sudo add-apt-repository ppa:brianmercer/php5
sudo apt-get update; sudo apt-get -y upgrade
sudo apt-get install php5-fpm php5-cgi php5-mysql php5-curl php5-gd php5-geoip php5-xmlrpc php5-xsl php5-json
sudo apt-get remove apache2

接下來修改文件,其中不少東西要加, nginx 不支持 .htacess 還有wordpress 中的一些 rewrite rules!

vi /etc/php5/fpm/php-fpm.conf

pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log

vi /etc/php5/fpm/pool.d/www.conf

pm.max_children = 15
pm.start_servers = 4
listen = /var/run/php5-fpm.sock
pm = dynamic

第3行的地方,據網站說明使用sock的速度會比使用tcp:port來的再快一點。

vi /etc/nginx/nginx.conf

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
	worker_connections 768;
	multi_accept on;
        use epoll;
}

log_format main '$remote_addr "$http_x_forwarded_for" - $remot
e_user [$time_local] '
        '"$request" $status $body_bytes_sent "$http_referer" '
        '"$http_user_agent"' ;
	access_log /var/log/nginx/access.log main;
	error_log /var/log/nginx/error.log;

第11行內

"$http_x_forwarded_for"

,主要目的是記錄真實的用戶IP,情況與上頭Apache一樣,不改就只會看到前端的varnish主機IP。這裡並沒有把全部的config貼上,大都用預設值就夠這小站用了。

vi /etc/nginx/sites-enabled/wordpress 建立wordpress(站台)設定值

server {
	root /var/www/wordpress;
	index index.php index.html index.htm;
	access_log /var/log/nginx/blog.funseed.net.access.log main;
	error_log /var/log/nginx/blog.funseed.net.error.log;
	server_name blog.funseed.net ;
         if ($host != 'blog.funseed.net') {
            rewrite ^/(.*) https://blog.funseed.net/$1 permanent;
         }

	location / {
		try_files $uri $uri/ /index.php;
	}

	location ~ \.php$ {
	        fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}

}

第7-8行,是把網友點擊google搜尋網址由原先站名改成新的站台網域blog.funseed.net

至/etc/nginx/sites-available 目錄把 default 刪除,並建立

ln -s /etc/nginx/sites-available/wordpress wordpress

啟動php5-fpm and ngixn

 SSL(CloudFlare)

站台SSL目前使用Cloudflare(以下簡稱CF)的免費SSL,這事也弄了幾天原因是設定好後,連接會出現Error 400 〞The plain HTTP request was sent to HTTPS port “

一直沒想到原因,主要不夠熟悉,各程式扮演角色,還有年紀大了

要有SSL最快的方式可以將下列功能開啟,支援的模式有很多種,最快的方式選擇Flexible 即可

各項的差別

Flexible 是用戶與CF之間加密,但站台與CF之間是明碼,不加密,你的伺服器不用額外申請SSL證書,方便許多,最重要是用戶在瀏覽你站台是會看到有〞鎖頭〞標示
另外Full SSL/Full SSL(strict) 則是三方間傳輸都有加密,但strict模式是你的SSL證書是要被認可的,不是網路上常用的自行簽發證書(self-signed ssl certificates),目前我的站台使用strict 模式,是使用CF給的Certficates。

要使用strict 模式、可以在CF管理介面中的Crypto 找到下方的功能,申請Certificates,會取得Private Key and Certification 二個檔,再分別存到Pound所在伺服器中,主要是因為我用pound接CF送來的SSL 連線,所以這個證書是放在pound中,而非nginx 伺服器內

並將這CF的這個功能打開、可避免一個頁面同時使用https 也有http的情況,用戶端才不會出現警告訊息

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料