如何用bind, geoip, nginx, varnish來建立你自己的高效的cdn網路?
cdn,意思是content distrubtion network,意思是內容分發網路,簡單的說,就是全地域範圍內的負載均衡,全地域的概念可以是全國,也可以是全世界。由統一的dns伺服器進行位址**,選擇離使用者最近的地區伺服器進行負載均衡。本質上是從乙個機房內的負載均衡擴充套件到了全世界範圍內的負載均衡。同時可以將本地化的內容,由當地的伺服器實現。做瀏覽器的地區自動選擇。
比如在中國,被人為劃分成兩大區域,北方是網通,南方是電信。這兩個網路之間互訪是比較慢的。作為大型**,一種解決辦法是將全部伺服器架設在雙線或三線isp處,由isp來提供路由上的選擇。這樣做,線路的成本會比較高。另一種辦法就是將伺服器架設在兩邊,南方一台,北方一台,然後由伺服器自己選擇,如果ip在電信,就**請求到南方的伺服器,如果是網通就**到北方的伺服器。
再擴大範圍,可以將美國來的請求交由美國伺服器處理,這樣也縮短了使用者在路由上的等待時間。這就是內容分發網路。
而作為這個網路上的所有節點,都可以當成虛擬伺服器來看待。至於在各地的伺服器如何做負載均衡,可以由各節點之間完成。
nginx,bind,geoip,varnish
接下來是編譯和安裝bind9和geoip
# tar -xzvf bind-9.2.4.tar.gz
# tar -xzvf geoip-1.4.6.tar.gz
# cd geoip-1.4.6
# ./configure –prefix=/usr/local/geoip
# make
# make install
# cd ..
# patch -p0 < bind-9.2.4-geodns-patch/patch.diff //給bind9打補丁,讓bind9直接支援geoip庫
# cd bind-9.2.4
# cflags=」-i/usr/local/geoip/include」 ldflags=」-l/usr/local/geoip/lib -lgeoip」 ./configure –prefix=/usr/local/bind
# make
# make install
裝好bind後我們來製作named.conf
view 「us」 ;
// provide recursive service to internal clients only.
recursion no;
zone 「cdn.xianglei.com」 ;
zone 「.」 in ;
};view 「latin」 ;
recursion no;
zone 「cdn.xianglei.com」 ;
zone 「.」 in ;
};照此辦理,你也可以匹配到歐洲,非洲等等,然後來開始製作nginx和varnish
注意,以上內容是你要在主節點伺服器上做的,主節點伺服器只負責對dns請求進行**。
約定一下,我們將bind伺服器叫做動態節點伺服器,nginx+varnish叫做邊界伺服器。
以下內容是副節點伺服器需要做的,也就是實際在某個地區放置的伺服器
並配置nginx
以上我們用nginx只對靜態檔案進行快取,將靜態檔案快取在/var/www/cache資料夾下,如果你沒有的話,需要建立這個資料夾。並且nginx監聽的是8080埠,這是因為,我們需要用varnish來監聽80埠進行動態檔案的**。這裡實際上是用nginx做了乙個靜態檔案的反向**和快取的伺服器,而真正讓使用者能夠看到網頁和動態檔案的反向**是varnish,而靜態和動態檔案的分開存放,能將效率提公升不少。
最後我們來配置varnish服務。
# tar -xzvf varnish-2.1.2.tar.gz
# ./configure –prefix=/usr/local/varnish
# make
# make install
然後是varnish的選項
backend default
sub vcl_recv
}sub vcl_fetch
}其他的配置內容可參看varnish的配置文章。
總結:這樣做的好處在於:
1.從根源上解決了dns在輪詢上的不確定性,能夠做到在dns上的快速響應。也避免了過去用nginx+geoip時的負載高的問題。畢竟dns的計算要比nginx小多了。
2.降低大**的伺服器負載壓力和運營成本,畢竟f5bigip和雙線路的**和服務費都太高了。
3.易擴充套件性強,如某地區負載壓力大,只需在該地區增加邊界伺服器組的web server即可完成,無需考慮跳轉問題。
其他優點我再想想。
CDN採用的關鍵技術
cdn的實現,對技術上的要求是很高的,它所採用的關鍵技術包括 負載均衡技術 動態內容路由 快取記憶體機制 動態內容分發與複製 網路安全機制等。動態內容路由 當使用者訪問加入cdn服務的 時,網域名稱解析請求將最終由重定向dns負責處理。它通過一組預先定義好的策略 如內容型別 地理區域 網路負載狀況等...
CDN原理及關鍵技術
什麼是cdn?由於使用者訪問源站業務有效能瓶頸,通過cdn技術把源站的內容快取到多個節點。使用者向源站網域名稱發起請求時,請求會被排程至最接近使用者的服務節點,直接由服務節點直接快速響應,有效降低使用者訪問延遲,提公升可用性。解決網路頻寬小 使用者訪問量大 網點分布不均等原因造成的使用者訪問問題。了...
CDN關鍵技術之負載均衡
內容來自 目前,基於負載均衡的演算法主要有三種 輪循 round robin 最小連線數 least connections first 和快速響應優先 faster response precedence 輪循演算法,就是將來自網路的請求依次分配給集群中的節點進行處理。最小連線數演算法,就是為集群...