CDN簡介:
CDN的全稱——Content Delivery Network,即內容分發網絡。
基本思路:是儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。
經過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統可以實時地根據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近的服務節點上。
其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。php
一.Varnish簡述html
Varnish是一款高性能、開源的反向代理服務器和緩存服務器。Varnish使用內存緩存文件來減小響應時間和網絡帶寬消耗。這個項目是由挪威的一家報紙Verdens Gang的網絡分支起始的,其架構設計和開發總監Poul-Henning Kamp是FreeBSD核心的開發人員之一,最初項目的管理與基礎設施及額外開發由挪威一家Linux諮詢公司Linpro提供。
說到varnish,squid就不得不說起。squid算得上是古老的緩存服務器。因爲varnish先進的設計理念,性能要比squid高上許多,varnish還能夠經過端口進行管理,使用正則語句作到清除指定緩存的功能,這些squid都作不到。可是varnish在高併發的狀況下,資源消耗較高,並且varnish服務進程一旦崩潰,重啓,內存中的緩存數據將所有丟失
前端
二.varnish的特色web
一、基於內存進行緩存,重啓後數據將消失。shell
二、利用虛擬內存方式,I\O性能好。vim
三、支持設置0~60秒的精確緩存時間。後端
四、VCL配置管理比較靈活。瀏覽器
五、具備強大的管理功能,例如top、stat、admin、list 等。緩存
六、狀態機設計巧妙、結構清晰。服務器
七、利用二叉堆管理緩存文件,可達到積極刪除目的。
三.varnish處理緩存的過程
(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 或 Pipe,或者進入 Lookup(本地查詢)。
(2)Lookup 狀態,進入此狀態後,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,不然進 入 miss 狀態。
(3)Pass 狀態,在此狀態下,會進入後端請求,即進入 fetch 狀態。
(4)Fetch 狀態,在 Fetch 狀態下,對請求進行後端的獲取,發送請求,得到數據,並進行本地 的存儲。
(5)Deliver 狀態, 將獲取到的數據發送給客戶端,而後完成本次請求。
四.varnish的單個後端的服務器的配置
實驗所需環境:三臺配置好網絡的虛擬機,分別設置主機名爲server一、server二、server三、server4
server1 :varnish的服務器
server二、3:後端的服務器
server4:客戶端,測試端
1.安裝服務
在server1中打開官網,下載rpm包進行安裝
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
注意:安裝完成後,在系統的/etc/passwd中會生成varnish用戶,對varnish的訪問控制實質上是對varnish用戶的控制實現的。後面會須要對varnish的須要的資源進行配置文件的修改,由於varnish這個應用軟件是用varnish這個普通用戶的身份進行的,而不是root用戶,所以操做系統不可能給應用那麼大的權限。因此須要更改配置文件。
2.配置varnish的服務(varnish的配置文件的修改)
(1)查看varnish的配置文件
其中,varnish的配置文件,第一個是varnish的log日誌文件,第二個是給varnish的分配資源的文件,第三個是varnish的默認的配置文件。
(2)編輯varnish服務器配置文件,文件的參數須要根據實際的系統內核及系統還有相關硬件設定
vim /etc/sysconfig/varnish
8 NFILES=131072 ##最多能打開的文件數,varnish會自動調整該值,是爲了防止高併發致使的服務器宕機
12 MEMLOCK=82000 ##最多能使用的內存空間,varnish會自動調整該值
15 NPROCS="unlimited" ##單個用戶所能運行的最大線程數
66 VARNISH_LISTEN_PORT=80 ##修改端口
注意:上面的配置文件的內容,和下面修改文件的權限相互對應。
vim /etc/security/limits.conf ##修改文件的權限的配置文件
(3)配置一個後端的服務器。
vim /etc/sysconfig/varnish ##varnish的配置文件,配置 varnish 服務端口
VARNISH_LISTEN_PORT=80 ##varnish監聽端口
vim /etc/varnish/default.vcl ##配置一個後端服務器,緩存配置
backend default {
.host = "172.25.5.2"; ##host指定要緩存的後端服務器地址
.port = "80";
}
3.從新的啓動服務
/etc/init.d/varnish restart ##重啓varnish應用
4.測試
在server2中配置好http服務,並編寫一個網頁文件index.html,內容任意
在真機中打開瀏覽器輸入server1的IP地址,能夠看到server2中的發佈頁面內容
五.多個後端服務器及實現負載均衡(varnish—CND加速的實現)
1.varnish的多個後端服務器的配置文件的修改
這裏設置了兩個後端的服務器,一個是web1,一個是web2.
vim /etc/varnish/default.vcl
backend web1 { ##後端第一個服務器名web1
.host = "172.25.5.2"; #將server2 www.westos.org做爲第一個服務器主機
.port = "80";
}
backend web2 { # 後端第二個服務器名web2
.host = "172.25.5.3"; #將server3 bbs.westos.org做爲第二個服務器主機
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { ##當訪問 www.westos.org 或 westos.org 域名時從 web1 上取數據;
set req.http.host = "www.westos.org";
set req.backend = web1;
}elsif (req.http.host ~ "^bbs.westos.org") { ##訪問 bbs.westos.org 域名時到 web2 取數據;
set req.backend = web2;
} else {
error 404 "westos cache"; #訪問其餘,頁面報錯。
}
}
/etc/init.d/varnish restart ##重啓varnish服務
2.server二、server3這兩個後端服務器配置http內容
vim /var/www/html/index.html
<h1>server2/3-westos.com<h1>
/etc/init.d/http start
3.在server4上配置DNS解析
vim /etc/hosts
172.25.5.1 www.westos.com bbs.westos.com
4.在客戶端上進行測試:
在客戶端的shell界面內,輸入 curl www.westos.com/bbs.westos.com
5.負載均衡的配置:
server1(varnish服務器)上:
vim /etc/varnish/default.vcl
注意: set req.backend = lb; ##調用平衡輪叫 lb 的函數 return (pass); ##爲了測試方便,不進行緩存
6.重啓服務
7.清除緩存
varnishadm ban.url .*$ ##清除全部
varnishadm ban.url /index.html ##清除 index.html 頁面緩存
varnishadm ban.url /admin/$ 清除 admin 目錄緩存
8.在客戶端進行測試,訪問www.westos.org時,會出現每訪問一次,會變跳
六.驗證 varnish 具備緩存的做用
1.編輯配置文件
vim /etc/varnish/default.vcl
將配置文件中,上面的爲了查看輪詢效果而添加的語句註釋掉。
## return (pass); ##本語句的意思是,varnish不進行緩存操做。註釋掉之後,varnish就會將訪問過的頁面進行緩存。
再在配置文件中添加如下的操做,目的是看到後面輸出的語句。
## HIT from westos cache 表示訪問的頁面是從varnish的緩存中返回的信息
## MISS from westos cache 表示緩存的頁面沒有相應的varnish的緩存
2.重啓 varnish 服務
3.將原有的緩存清除,防止影響實驗的結果
4.測試,查看 varnish 是否具備緩存的做用
第一次訪問相應的頁面,返回的結果是:varnish中沒有緩存的信息
第二次訪問相同的頁面的時候,由於第一次訪問過了,並且配置文件中將 return(pass)語句註釋掉,所以varnish會有相應的緩存記錄
實驗證實:varnish具備緩存的功能。
七.一臺主機多個解析
1.在server3的httpd的默認發佈目錄中創建兩個虛擬主機
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80 ##註釋打開
##在最後編輯:
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
2.建立目錄/www 和/bbs,並編輯相應的前端文件
mkdir /www
mkdir /bbs
cd /www
vim index.html
<h1>www.westos.com--server3<h1>
cd /bbs
vim index.html
<h1>bbs.westos.com--server3<h1>
3.重啓httpd服務
/etc/init.d/httpd restart
4.測試
(1)在測試以前,記得給客戶端添加解析
vim /etc/hosts
172.25.5.3 www.westos.com bbs.westos.com
(2)測試:
curl www.westos.com
<h1>www.westos.com--server3<h1>
curl bbs.westos.com
<h1>bbs.westos.com--server3<h1>
八.CDN推送管理平臺 (web界面批量清除緩存)
CDN推送: 當後端服務器中的DNS有更新時,在varnish的緩存中應該及時同步後端服務中的內容
1.在server1上
安裝httpd,並編輯httpd配置文件
將136行的端口號修改8080(由於咱們的varnish服務已經佔用了80端口,避免衝突)
下載php(顯示頁面)
下載unzip(解壓安裝包)
vim /etc/httpd/conf/httpd.conf
Listen 8080
/etc/init.d/httpd restart
2.將banzip安裝包從物理機發送到server1,並在server1解壓到/var/www/html(指定目錄解壓 -d)
3.編輯config.php
4.將 /var/www/html/bansys 中的全部東西移到 /var/www/html 中
移動的緣由是:若是不移動的話,發佈頁面是在 /var/www/html/bansys ,在網頁上訪問的時候,就須要輸入 172.25.5.1:8080/bansys
5.記得要作DNS解析,/etc/hosts 中的文件修改
6.打開瀏覽器,瀏覽器中輸入172.25.5.1:8080,出現CDN推送管理頁面
7.編寫 varnish 的默認文件
vim /etc/varnish/default.vcl
##設置訪問控制,即白名單,容許本機和172.25.64網段和推送
acl westos{ "127.0.0.1"; ##容許本機訪問 "172.25.5.0"/24; ##容許172.25.5網段的全部主機訪問 }
8.測試
第一次miss,則沒有緩存到
第二次hit,緩存成功(後面一直是hit)
9.CDN推送 (寫入推送頁面,點擊確認提交)
10.再次測試,則爲miss(表示緩存已經清除成功,不然仍是hit)