一、cdn的簡介
1.什麼是cdn
CDN的全稱是Content Delivery Network,即內容分發網絡。CDN是構建在現有網絡基礎之上的智能虛擬網絡,依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要有內容存儲和分發技術。
2.cdn的工作原理
CDN的基本原理是廣泛採用各種緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求。
二、實驗開始前的準備工作
1.製作一個虛擬機母盤
因爲實驗中會用到多臺虛擬機,所以爲了方便我們先製造一個虛擬機的母盤,以後的虛擬機都是用這個虛擬機創建的快照。
##關於虛擬機的創建此處不再贅述,若有不懂的朋友可以看我之前關與虛擬機管理的博客。這裏只說明虛擬機母盤上應該做的一些設定。
##本機安裝的母盤使用的鏡像爲rhel-server-7.5-x86_64-dvd.iso,所以之後的操作包括yum源的使用都是7.5
(1)關閉防火牆,設置selinxe爲disable,關閉NetworkManger
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManger
systemctl disable NetworkManger
vi /etc/sysconfig/selinux ##把selinux設置爲disable,安裝的系統爲最小安裝包,所以現在只有vi,沒有vim命令
(2)ip設定,設定成真機的私有網段即可,本機的主機ip爲172.25.254.21,所以虛擬機設爲172.25.21.0/24這個網段中的ip
vi /etc/sysconfig/network-scripts/ifcfg-ens3 ##編輯網絡配置文件
BOOTPROTO=static
DEVICE=eth0
ONBOOT=yes
IPADDR=172.25.21.1
PREFIX=24
GATEWAY=172.25.21.250 ##真機的第二個私有網段IP地址
DNS1=114.114.114.114 ##後面一些實驗會用到網絡
systemctl restart network
(3)搭建一個yum源,安裝一些常用的軟件或命令(注意:rhel7.5的yum源一般有5000多個安裝包,7.3只有4700多個,不要把yum源弄錯)
vi /etc/yum.repos.d/rhel.repo ##編輯yum源配置文件
[rhel7.5]
name=rhel7.5
baseurl=http://172.25.21.250/rhel7.5 ##本機使用的是真機共享的7.5鏡像來搭建yum源,關於網絡yum源的搭建可看之前的博客
gpgcheck=0
yum install -y vim lftp net-tools bash-* ##安裝常用命令
(4)設定開機引導文件
vim /boot/grub2/grub.cfg
(5)配置本地解析文件
vim /etc/hosts
2.虛擬機的封裝
(1)關閉虛擬機,清理母盤的緩存,創建虛擬機快照,刪掉虛擬機的打開快捷方式,並把快照添加進virt-manager開始使用
yum install libguestfs-tools-c.x86_64 -y ##如果沒有清除緩存的指令就先安裝這個軟件包
virt-sysprep -d westos ##清除緩存,後面加上母盤的名稱即可
qemu-img create -f qcow2 -b westos.qcow2 node1 ##先創建3個虛擬機的快照
qemu-img create -f qcow2 -b westos.qcow2 node2
qemu-img create -f qcow2 -b westos.qcow2 node3
##注意:如果不刪除應該避免打開母盤虛擬機,因爲本身設定的是20g,所以每次運行的都會越來越大,
##注意2:如果刪除後還想恢復母盤,就以添加快照的方式將母盤添加進來,快照的添加在虛擬機的管理那篇文章有詳細說明
三、varnish的使用
1.客戶端一般訪問數據的流程爲:
client -> dns -> cdn -> server -> cdn -> cache -> client
在本次實驗中,以server1當作cdn服務器,server2和server3當作apache服務器,再通過主機進行訪問測試。
2.varnish的安裝和配置文件的查看(安裝包可以在官網上下載)
根據安裝依賴性,共需要三個軟件包,本機使用的是varnish-4.0.5-1.el7.x86_64.rpm,varnish-libs-4.0.5-1.el7.x86_64.rpm和
jemalloc-3.6.0-1.el7.x86_64.rpm,將三個軟件安裝包放在同一個目錄下,本機放在/mnt/下
yum install * -y ##在三個軟件安裝包的目錄下直接安裝軟件
rpm -qc varnish-4.0.5-1.el7.x86_64 ##可以查看配置文件的具體位置
id varnish ##可以查看到自動生成了一個varnish用戶
vim /usr/lib/systemd/system/varnish.service ##可以查看varnish可以打開的最大文件個數和內存等其他信息
3.varnish的配置
(1)配置文件的修改
vim /etc/security/limits.conf ##按照格式添加varnish的文件最大打開個數和內存大小
systemctl start varnish ##開啓服務
vim /etc/varnish/varnish.params ##修改默認配置文件的監聽端口爲80
systemctl restart varnish
netstat -anltupe | grep varnish ##查看varnish使用的端口
(2)varnish創建的用戶運行與root用戶的關係
ps aux ##可以查看到兩個關於varnish的進程,一個是root用戶,一個是varnish用戶的
root用戶只控制varnish用戶,而各種事情的處理都是由varnish用戶的服務來處理的
cat /proc/12999/status ##查看root用戶關於varnish的進程詳細信息,它只控制varnish用戶的進程
cat /proc/13001/status ##查看varnish用戶進程的詳細信息,它負責來處理各種東西
4.varnish的反向代理
(1)一臺服務器的反向代理:
#修改varnish服務器的配置文件:
vim /etc/varnish/default.vcl ##修改默認配置文件
systemctl restart varnish
##vcl_deliver 通常來說,對於一個http請求流程,vcl_deliver都是最後一個處理動作。它把數據返回給客戶端
#客戶端測試:
curl是一種命令行工具,作用是發出網絡請求,然後得到和提取數據,顯示在"標準輸出"(stdout)上面。
curl 172.25.21.1 ##查看172.25.21.1的默認發佈文件
curl -I 172.25.21.1 ##查看指定ip的頭信息
#在varnish主機上:
手動清理緩存
varnishadm ban req.url "~" / ##清理根目錄下的所有緩存
varnishadm ban req.url "~" /index.html ##清理指定默認發佈文件的緩存
(2)兩臺服務器的反向代理
varnish服務器的配置:
vim default.vcl ##修改配置文件
systemctl restart varnish
vcl_recv是客戶端請求報文被解析後第一個被執行的subroutine,在該subroutine我們可以添加vcl代碼完成諸多功能,如:
1.緩存未命中的話去後端哪臺主機請求資源 2.控制緩存策略,如僅僅針對某些url做緩存 3.完成url重寫 等功能。
客戶端測試:
vim /etc/hosts ##先做好本地解析
172.25.21.1 server1 www.yy.com abc.yy.com
curl www.yy.com
curl abc.yy.com
curl 172.25.21.1 ##按照配置文件vcl_recv中的寫法,這個應該報錯爲405
(3)兩臺服務器反向代理的輪詢設定
varnish服務器的設定:
vim default.vcl ##修改配置文件
systemctl restart varnish
添加的方法和添加的例子可以通過man vcl或者通過官方文檔來查看
導入的模塊和例子可以在man vmod_directors裏查看幫助
主機測試:
curl www.yy.com ##訪問同一個域名可以查看到默認發佈文件的變化,輪詢方式爲1個文件響應一次
(4)一臺apache服務器中的多臺虛擬主機的反向代理負載均衡(域名相同的那個虛擬主機還會和另一臺apache服務器以輪詢的方式被訪問,這是因爲它的ip還被設定在varnish服務器當中)
server3的apache虛擬主機設定:
vim /etc/httpd/conf.d/vhost.conf ##編寫虛擬主機配置文件
<VirtualHost *:80>
DocumentRoot /www ##默認發佈目錄
ServerName www.yy.com ##域名
</VirtualHost>
<Directory "/www">
Require all granted ##安全設定允許
</Directory>
<VirtualHost *:80>
DocumentRoot /abc
ServerName abc.yy.com
</VirtualHost>
<Directory "/abc">
Require all granted
</Directory>
主機測試:
crul www.yy.com
crul abc.yy.com ##域名不同只能通過域名來訪問
四、varnish的圖形化管理
1.安裝圖形化管理工具
本機使用的是安裝包爲 bansys.zip
yum install httpd php unzip -y ##安裝解壓工具和apache服務以及php
unzip bansys.zip -d /var/www/html/
cd /var/www/html/bansys/
mv * ../ ##將bansys目錄下的所有文件移動到默認發佈目錄下(/var/www/html/下)
cd ..
vim config.php ##編輯圖形化管理配置文件
vim /etc/httpd/conf/httpd.conf ##編輯apache配置文件,將默認的80端口改爲8080,因爲80端口用來做反向代理接受數據使用
systemctl restart httpd ##重啓apache服務
在真機上輸入網址並加上端口進行測試:
2.圖形化管理的設定:
varnish服務器的設定:
vim /etc/varnish/default.vcl ##編輯varnish配置文件(無特殊說明都爲添加內容)
systemctl restart varnish
#return(pass); 不清理緩存
#return(purge); 清空緩存
在主機上測試:
當只清空默認發佈文件緩存時,其他目錄下的緩存不受影響