透過4M/1M或8M/768k的ADSL,一般工程師都可輕易架出小型流量網站。
遇到要架設中型,到大型流量的網站,服務水準要ok,而又要能夠省cost的方案是我目前在探究的方向。
頻寬問題處理:
目前看到最大的ADSL頻寬是12M/1M。如尚不考慮有條件限制的光纖服務,若要1M以上的對外流量,勢必要架設兩條以上的ADSL來分散流量。
考慮是架站,而非架設網咖或宿網服務。因此需透過in-bound load balancer的概念來實質達到將進來網站的流量分散到不同的ADSL上。
最簡單的作法是在DNS Server上,設定超過一個以上的dns正解,並把TTL時間做調整。
假設網域名稱是 foo.bar,可在DNS Server上對這個名稱設定多個A Record,如
foo.bar. 60 IN A 123.45.67.8 # Hinet ADSL 固定IP
foo.bar. 60 IN A 123.45.67.9 # Giga ADSL 固定IP
TTL的時間調短,那麼有人想連上http://foo.bar時,就會來詢問他的IP位址,IP會隨機給予,就可將流量分散到不同條ADSL上面。
這種 DNS RoundRobin分散流量的作法,有眾多的缺點,無法做到實質的負載平衡。
購買多WAN口具in-bound load balancing功能的路由器
看了網路上幾個產品,例如TAMIO 1600 4 Wans 自動雙向負載平衡器 ,價格還可以接受,而且支援4 port,有機會用ADSL做到in-bound 4M的頻寬。透過內建DNS Server,加上一些演算法,在流量分散上面,可以做到比較好的結果。
有無針對ADSL連線作流量分散的solution?
因為我有拉Giga的ADSL,所以遇到這個額外的問題。沒用Giga ADSL的人或許不知道,Giga跟Hinet因為費用的關係,兩者機房沒有專線連通。如果站台架設在Giga,Hinet的User連上來有時會覺得超慢。
針對我的環境,如果我有一條Giga ADSL,與一條Hinet ADSL的線路,我想讓DNS Server遇到來自Giga DNS詢問時,回應我這邊Server的Giga IP。而遇到剩下的DNS詢問時,回應我這邊Server的Hinet IP。也就是讓來自使用Giga ADSL的使用者,總是走我的Giga ADSL進來我的網站。而使用其他連線的使用者,總是透過我的Hinet ADSL進來我的網站。
這應該可透過Bind的修改或設定來作,但目前尚未讀書,google了一陣子亦尚未看到有人這麼做。持續研究中…
一陣子沒碰linux administration ,為了裝mysql,這才注意到urpmi的好用。
與其自己不斷的確認安裝A rpm,其dependency是什麼B, C, D…rpms,不如就下這麼一個指令
#urpmi MySQL
To satisfy dependencies, the following packages are going to be installed:
MySQL-5.0.37-2mdv2007.1.i586
MySQL-client-5.0.37-2mdv2007.1.i586
MySQL-common-5.0.37-2mdv2007.1.i586
libmysql15-5.0.37-2mdv2007.1.i586
perl-DBD-mysql-4.003-1mdv2007.1.i586
perl-DBI-1.54-1mdv2007.1.i586
perl-HTML-Parser-3.56-1mdv2007.1.i586
perl-HTML-Tagset-3.10-2mdv2007.1.noarch
perl-URI-1.35-4mdv2007.1.noarch
perl-libwww-perl-5.805-3mdv2007.1.noarch
Proceed with the installation of the 10 packages? (46 MB) (Y/n)
安裝起來超順利。所謂,工欲善其事,必先利其器。
因為Mandriva CD中就有cvs的rpm,做起來頗為單純。
1.cvs用xinetd帶起來,須確認xinetd有安裝
rpm -Uvh xinetd-2.3.14-5mdv2007.1.i586.rpm
chkconfig xinetd on
service xinetd start
2.安裝cvs
rpm -ivh cvs-1.12.13-6mdv2007.1.i586.rpm
chkconfig cvs on
3.新增cvs這個使用者
useradd cvs -m
4.修改/etc/xinet.d/cvs
將 user = root 改成user = cvs
5.建立 cvs repository
mkdir /cvs
chown -R cvs.cvs /cvs
su – cvs
cvs -d /cvs init
6.帶起cvs服務
exit or su – (變成 root)
service cvs start
這樣就好了。
因為伺服器不是放在機房,最好能監控一下CPU溫度。在我的Mandriva 2007 Spring安裝環境下,就有lm-sensors的rpm。
安裝:(你的情況或許不同)
rpm -ivh lm_sensors-2.10.2-1mdv2007.1.i586.rpm liblm_sensors3-2.10.2-1mdv2007.1.i586.rpm librrdtool2-1.2.18-1mdv2007.1.i586.rpm libart_lgpl2-2.3.19-2mdv2007.1.i586.rpm
執行:
1. 偵測driver
sensors-detect
(一路按Enter)
2.看到”I will now generate the commands needed to load the required modules……”,按下Enter後把#—-cut here—-之間的內容寫到/etc/modprobe.conf。
3.監測!
sensors
監測結果:
[root@localhost main]# sensors
it8712-isa-0290
Adapter: ISA adapter
VCore 1: +1.58 V (min = +0.00 V, max = +4.08 V)
VCore 2: +1.50 V (min = +0.00 V, max = +4.08 V)
+3.3V: +3.36 V (min = +0.00 V, max = +4.08 V)
+5V: +5.03 V (min = +0.00 V, max = +6.85 V)
+12V: +11.78 V (min = +0.00 V, max = +16.32 V)
-12V: -5.27 V (min = -27.36 V, max = +3.93 V)
-5V: -3.32 V (min = -13.64 V, max = +4.03 V)
Stdby: +3.79 V (min = +0.00 V, max = +6.85 V)
VBat: +4.08 V
fan1: 2960 RPM (min = 0 RPM, div = 
fan2: 0 RPM (min = 0 RPM, div = 
fan3: 0 RPM (min = 0 RPM, div = 
M/B Temp: +25°C (low = +127°C, high = +127°C) sensor = thermistor
CPU Temp: +25°C (low = +127°C, high = +127°C) sensor = thermistor
Temp3: +49°C (low = +127°C, high = +127°C) sensor = diode
使用家裡的ADSL架站,就是把家當作機房。如果服務還算重要,那麼就應該仿照專業機房的想法來check伺服器的擺放與運作環境。
雖然是陽春"機房",應該還是要稍微考慮以下幾件事情:
1.電源的穩定度,是否添購UPS,插頭是否會被踢掉。
2.溫度,避免陽光照射處,或其他熱源邊,可能可添購散熱設備。
3.灰塵,盡量避免太多灰塵處,如窗戶邊。
4.網路,連線路徑盡量短些,並應避免網路線被誤扯。
5.頻寬,隨著網站成長,可考慮加大ADSL或光纖速度。若因預算或備援考量,可考慮採購in-bound多WAN口的寬頻 load balancer,可有效分散網路頻寬的負擔。
6.備份與復原,應適當設定備份排程工作,並定期演練。
7.Production 前應測試執行硬體相關環境。
8.Production Server應隨時建立測試軟體環境,網路安全,更新updates。
9.網站上線前,應進行壓力測試,了解目前環境可承載幾個user同時上線。
10.開發環境應設立Code Version Control系統或機制,例如CVS,或單純的file Server。
先談測試硬體環境:
組好一台linux的機器後,在使用之前,應測試硬體,最好的方式是使用燒機程式,我這邊使用的是CTCS(Cerberus Test Control System),原先由VALinux發展。
1.取得CTCS軟體
wget http://downloads.sourceforge.net/va-ctcs/ctcs-1.3.1-pre1.tgz?modtime=1123239632&big_mirror=0
2.安裝
tar xvzf ctcs-1.3.1-pre1.tgz
cd ctcs-1.3.1pre1/
make
3.執行
./newburn