Copyright ? 2015 深圳市鑫惠廣網絡科技有限公司 粵ICP備2023111395號
1.名詞解釋
以下引用自百度百科
CDN的全稱是Content Delivery Network,即內容分發網絡。其基本思路是盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。
2.工作原理
CDN的基本原理是廣泛采用各種緩存服務器,將這些緩存服務器分布到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求。
1.名詞解釋
Varnish是一款高性能的開源HTTP加速器
2.工作原理
用戶通過瀏覽器訪問http服務器,但是需要先經過http加速器varnish服務器,如果用戶訪問的內容在varnish的cache中,則直接從varnish服務器返回該訪問內容,但是如果不在varnish的cache中,就先從后端的http服務器中取出用戶需要訪問的內容,并保存在varnish的cache中,以便下次的訪問。
3.varnish服務器的搭建以及配置
實驗環境:rhel6.5
server1: 172.25.70.1
server2: 172.25.70.2
server3: 172.25.70.3
foundation70.ilt.example.com 172.25.254.70
其中server1作為varnish服務器,server2和server3作為后端的http服務器,
foundation70.ilt.example.com作為測試主機
1)安裝和配置
varnish-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# yuminstallvarnish-3.0.5-1.el6.x86_64.rpm-y1
如果出現下面的報錯
只需要安裝該依賴包即可
[root@server1 ~]# yuminstallvarnish-libs-3.0.5-1.el6.x86_64.rpm-y12
注意版本的一致
安裝完成后,查看/etc/passwd文件可以發現多了一個varnish用戶
varnish:x:498:499:Varnish Cache:/var/lib/varnish:/sbin/nologin1
2)varnish服務器的配置
配置一個后端服務器
[root@server1 ~]# vim /etc/varnish/default.vcl 1
backend web1 { .host = "172.25.70.2"; .port = "80"; }1234
添加查看緩存命中情況的語句塊
subvcl_deliver{ if(obj.hits > 0) { set resp.http.X-Cache = "HIT from westos cache"; } else{ set resp.http.X-Cache = "MISS from westos cache"; } return(deliver); }123456789
該語句塊的作用是如果對象命中,則返回HIT from westos cache,如果對象不命中,則返回MISS from westos cache
配置 varnish 服務端口
[root@server1 ~]# vim /etc/sysconfig/varnish1
VARNISH_LISTEN_PORT=801
開啟varnish服務
[root@server1 ~]# /etc/init.d/varnish start12
3)為server2安裝apache服務器,并編輯一個默認發布頁面
[root@server2 ~]# yum install httpd -y[root@server2 ~]# vim /var/www/html/index.html<h1>backend web1</h1> [root@server2 ~]# /etc/init.d/httpd start1234
4)測試
a.在測試機的瀏覽器上訪問varnish服務器的ip
可以看到訪問varnish服務器的ip訪問的是varnish配置文件中指定的后端http主機的默認發布文件
b.測試緩存命中情況
第一次訪問不命中
[root@server2~]#curl-I172.25.70.1HTTP/1.1200OKServer:Apache/2.2.15(RedHat)Last-Modified:Sun,11Feb201804:18:24GMTETag:"40141-16-564e80d6fcbca"Content-Type:text/html;charset=UTF-8Content-Length:22Accept-Ranges:bytesDate:Sun,11Feb201804:19:15GMTX-Varnish:359822168Age:0Via:1.1varnishConnection:keep-aliveX-Cache:MISSfromwestoscache1234567891011121314
第二次訪問命中
[root@server2~]#curl-I172.25.70.1HTTP/1.1200OKServer:Apache/2.2.15(RedHat)Last-Modified:Sun,11Feb201804:18:24GMTETag:"40141-16-564e80d6fcbca"Content-Type:text/html;charset=UTF-8Content-Length:22Accept-Ranges:bytesDate:Sun,11Feb201804:21:12GMTX-Varnish:359822169359822168Age:117Via:1.1varnishConnection:keep-aliveX-Cache:HITfromwestoscache123456789101112131415
5)通過 varnishadm 手動清除緩存
varnishadmban.url .*$ 清除所有varnishadmban.url /index.html 清除 index.html 頁面緩存varnishadmban.url /admin/$ 清除 admin 目錄緩存123
6)對多個臺后端服務器的配置
[root@server1 ~]# vim /etc/varnish/default.vcl1
定義多個不同域名站點的后端服務器
backend web1 { .host = "172.25.70.2"; .port = "80"; } backend web2 { .host = "172.25.70.3"; .port = "80"; }12345678
當訪問 www.server2.org 域名是從 web1 上取數據,訪問 www.server3.org 域名時代 web2 取數據,
訪問其他頁面報錯。
subvcl_recv{ if(req.http.host ~ "^(www.)?server2.org") { set req.http.host = "www.server2.org"; set req.backend = web1; } elsif(req.http.host ~ "^www.server3.org") { set req.backend = web2; } else{error 404; } }1234567891011
重啟服務
[root@server1 ~]# /etc/init.d/varnish restart1
7)給測試主機添加域名解析
vim/etc/hosts172.25.70.1server1www.server2.orgwww.server3.org12
8)為server3安裝apache服務器,并編輯一個默認發布頁面
[root@server3 ~]# yum install httpd -y[root@server3 ~]# vim /var/www/html/index.html<h1>backend web2</h1> [root@server3 ~]# /etc/init.d/httpd start1234
9)在測試主機上
[root@foundation70 0120]# curl www.server2.org<h1>backend web1</h1> You have newmail in/var/spool/mail/kiosk [root@foundation70 0120]# curl www.server3.org<h1>backend web2</h1>12345
在瀏覽器上訪問不是在上述配置文件中(/etc/varnish/default.vcl)中指定的域名則會報錯
出現上述情況表示測試成功
10)健康檢查以及負載均衡
#定義健康檢查probe healthcheck { .url = "/index.html"; # 哪個 url 需要 varnish 請求.interval = 5s; #檢查的間隔時間.timeout = 1s; #等待多長時間探針超時.window = 5; #維持 5 個 sliding window 的結果.threshold = 3; #至少有三次 window 是成功的,就宣告 bachend 健康} backend web1 { .host = "172.25.70.2"; .port = "80"; .probe = healthcheck; } backend web2 { .host = "172.25.70.3"; .port = "80"; .probe = healthcheck; } #將多個后端聚合成一個名為lb的組,輪叫模式director lb round-robin { {.backend = web1;} {.backend = web2;} } subvcl_recv{ if(req.http.host ~ "^(www.)?server2.org") { set req.http.host = "www.server2.org"; set req.backend = lb; return(pass); #為了測試方便,不進行緩存。} elsif(req.http.host ~ "^www.server3.org") { set req.backend = web2; } else{ error 404; } } 12345678910111213141516171819202122232425262728293031323334353637
重啟
[root@server1 varnish]# /etc/init.d/varnish restart1
在測試機上訪問域名 www.server2.org
[root@foundation70 0120]# curl www.server2.org<h1>backend web1</h1> [root@foundation70 0120]# curl www.server2.org<h1>backend web2</h1>1234
輪叫模式生效,多個后端在lb組的支配下進行輪循
為了使效果更加明顯,在server3上進行虛擬主機的配置,使得在輪循的作用下,訪問www.server2.org域名的時候,會對server2上的默認發布文件進行訪問,而對server3上servername為www.server2.org的域名所對應的默認發布文件進行輪循訪問,那么在訪問域名為www.server3.org的域名時,就是對server3上的servername為www.server3.org的域名所對應的默認發布文件進行訪問
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf 1
NameVirtualHost*:80 <VirtualHost *:80>DocumentRoot/var/www/html/ ServerNamewww.server3.org </VirtualHost><VirtualHost *:80>DocumentRoot/www/ ServerNamewww.server2.org </VirtualHost>1234567891011
為虛擬主機域名為www.server2.org的默認發布目錄添加默認訪問文件
[root@server3 ~]# mkdir /www[root@server3 ~]# vim /www/index.html<h1>backend web1-server3</h1> [root@server3 ~]# /etc/init.d/httpd restart #重啟生效1234
測試
[root@foundation70 0120]# curl www.server2.org<h1>backend web1</h1> You have newmail in/var/spool/mail/kiosk [root@foundation70 0120]# curl www.server2.org<h1>backend web1-server3</h1> [root@foundation70 0120]# curl www.server3.org<h1>backend web2</h1> 123456789
測試結果正確!!!
Copyright ? 2015 深圳市鑫惠廣網絡科技有限公司 粵ICP備2023111395號