文/姜鵬
部署多鏈路機房出口分流系統(tǒng)
文/姜鵬
現(xiàn)有學(xué)校采用多出口鏈路提升校園網(wǎng)用戶訪問外網(wǎng)的速度,同時還構(gòu)筑了自己的數(shù)據(jù)中心機房。但是數(shù)據(jù)中心機房往往采用單鏈路教育網(wǎng)出口,而不同區(qū)域的訪問者來自不同運營商,造成用戶訪問同一數(shù)據(jù)資源速度差異較大。本文探討在不改變現(xiàn)有的數(shù)據(jù)中心架構(gòu)情況下,采用開源軟件在數(shù)據(jù)中心外層部署數(shù)據(jù)分流系統(tǒng)。
首先部署用戶分流部分,在Linux的機器上安裝bind進(jìn)行解析,使用DNS的智能解析把不同運營商的用戶進(jìn)行分流。首先在bind的配置文件中構(gòu)筑幾個地址列表,這里只列舉了2個例子,可根據(jù)多鏈路的需求添加,核心配置如下:
//掩碼方式表示的地址列表,形成第一個地址池。
acl "LIST1" {
192.168.1.0/24;
192.168.2.0/26;
};
//掩碼方式表示的地址列表,形成第二個地址池。
acl "LIST2" {
10.0.0.0/16;
10.1.0.0/32;
};
//用view功能根據(jù)來源地址調(diào)用不同的zone配置文件進(jìn)行解析
view "view_list1" {
match-clients { LIST1; };
zone "test.edu.cn" {
type master;
file "test.edu.cn.zone";
};
};
view "view_list2" {
match-clients { LIST2; };
zone "test.edu.cn" {
type master;
file "test.edu.cn.zone2";
};
};
//一般來說我們列舉的地址段做不到包含所有來客的地址,防止遺漏需要加一個針對
//“any”地址的配置。
view "view_list3" {
match-clients { any; };
zone "test.edu.cn" {
type master;
file "test.edu.cn.zone3";
};
};
在開通測試網(wǎng)站(www.test.edu.cn)多鏈路均衡的時候,需要分別修改“test.edu. cn.zone”、“test.edu.cn.zone2”、“test. edu.cn.zone3”三個文件,分別添加“www. test.edu.cn”的域名,指向不同鏈路的轉(zhuǎn)發(fā)服務(wù)器IP,后重新載入bind。實現(xiàn)針對相應(yīng)鏈路的域名解析。
構(gòu)筑好分流部分后,使用Apache軟件進(jìn)行轉(zhuǎn)發(fā)和緩沖。在不同的鏈路上分別放置一臺轉(zhuǎn)發(fā)服務(wù)器。安裝Linux系統(tǒng),采用兩個網(wǎng)卡,一個連接本鏈路,正常設(shè)置IP地址、子網(wǎng)掩碼、網(wǎng)關(guān);另外一個連接在服務(wù)器網(wǎng)段,這個網(wǎng)卡只設(shè)置服務(wù)器網(wǎng)段IP地址和子網(wǎng)掩碼,當(dāng)然可根據(jù)安全需求放置在數(shù)據(jù)中心防火墻內(nèi)部或者外部。然后修改Apache的配置文件httpd.conf,添加如下內(nèi)容:
ServerName www.test.edu.cn
ProxyPass / http://10.10.0.1/ //10.10.0.1是www.test.edu.cn在服務(wù)器網(wǎng)段的IP
ProxyPassReverse / http://10.10.0.1/
按照類似這樣的方式,在每個鏈路上分別配置好一臺轉(zhuǎn)發(fā)服務(wù)器。推薦每個鏈路都有自己的至少一臺轉(zhuǎn)發(fā)服務(wù)器,防止出現(xiàn)單點故障。這里僅列出了一個“www.test.edu. cn”域名的服務(wù)器配置,其他多臺服務(wù)器可以通過類似的方式實現(xiàn)。
通過配置開啟Apache的靜態(tài)緩沖功能,可以進(jìn)一步減少核心服務(wù)器的負(fù)載;也可以同時配置網(wǎng)頁壓縮傳輸技術(shù),減少鏈路流量。
上面即可形成一個完整的多鏈路機房出口分流的解決方案,不過如果考慮到冗余和動態(tài)機制的話,還可以采用自行編寫簡單程序的方式進(jìn)一步優(yōu)化。
1.首先采用多臺DNS服務(wù)器互為冗余,可以使用多種方式進(jìn)行,例如:
(1)向上級DNS管理機構(gòu)注冊多個DNS服務(wù)器地址同時提供服務(wù),分別放置在不同鏈路上,對自己學(xué)校的二級域名進(jìn)行解析。
(2)采用雙機熱備的方式構(gòu)筑DNS服務(wù)器。
2.安裝bind to mysql的插件或采用其他手段。通過對數(shù)據(jù)庫實時讀寫或直接修改bind配置文件的方式,實現(xiàn)適時調(diào)整不同鏈路IP列表的功能。
3.在DNS服務(wù)器上部署一個簡單腳本,進(jìn)行實時的監(jiān)控,主要包含以下指標(biāo):
(1)通過SNMP或者其他方式讀取各個出口鏈路的狀態(tài),比如通斷、負(fù)載、丟包率。
(2)獲取各個轉(zhuǎn)發(fā)緩沖服務(wù)器的狀態(tài),比如Apache工作狀態(tài)、CPU內(nèi)存負(fù)載、網(wǎng)絡(luò)占用。
利用這些指標(biāo),自己設(shè)定閥值,修改bind策略,適時調(diào)整IP地址池,以實現(xiàn)整個系統(tǒng)的自動調(diào)整。尤其特殊情況下,如監(jiān)控到某鏈路中斷,舍棄某鏈路的分流。并把報警信息發(fā)送到管理員郵箱和手機短信上。
通過以上操作在很少的投入的基礎(chǔ)上,充分挖掘現(xiàn)有鏈路的價值。而且把真實服務(wù)器隱藏起來,在抵御網(wǎng)絡(luò)攻擊上有一定的作用。
(作者單位為中國海洋大學(xué)網(wǎng)絡(luò)與信息中心)