在實際的生産使用過程中,一個基本的能夠應對日均百萬PV的網絡,一般會具有以下幾種結構。
這其中每種結構擔負了不同的角色。 代理伺服器,負責進行請求排程,實作了負載均衡。 KeepAlived配置代理伺服器實作了高可用。 緩存伺服器,實作了資源的緩存,提高了請求的命中率,加快了通路速度。 動靜分離,減輕後端伺服器壓力,提高資源通路速度。 資料庫主從複制,讀寫分離,降低了資料庫的壓力 運維監控系統,實時監控系統運作狀态。 自動化運維控制系統,批量管理大量伺服器。 版本控制系統,在應用的疊代過程中有着至關重要的作用。
下面,我們來模拟實作一個簡單的網絡叢集結構。下面是這個結構的網絡拓撲圖。
實驗環境介紹
序号
擔任角色
主機名
位址
功能描述
A
網際網路用戶端
windows
172.18.2.22
充當網際網路使用者進行網絡通路
B
代理伺服器
haproxy
VIP 172.18.3.77;DIP 192.168.22.77
對網絡請求進行排程,實作均衡負載
C
緩存伺服器
varnish 1
192.168.22.33
針對網絡請求進行緩存,同時對後端伺服器進行動靜分離,并提供均衡負載
D
varnish 2
192.168.22.44
E
靜态web伺服器
staticweb1
192.168.22.100
提供靜态的網絡服務,例如html,js,css之類
F
staticweb2
192.168.22.101
提供靜态的網絡服務,例如html,js,css之類
G
動态web伺服器
dynamicweb1
192.168.22.200
提供動态的網絡服務,例如PHP,jsp等
H
dynamicweb2
192.168.22.201
I
資料庫伺服器
database
192.168.22.128
提供資料庫服務,供應用程式進行讀寫操作
實驗過程中,首先關閉SELinux和防火牆政策
在主機A上安裝HAProxy,并對其進行配置。
将HAProxy配置好以後,重新開機一下服務。然後在浏覽器中輸入 <code>http://172.18.3.77:9099/hastats</code>,就可以檢視到HAProxy的排程管理界面。 此時,如果Varnish伺服器已經配置成功了的話,就會顯示出如下界面。
此時,在配置好HAProxy伺服器之後,就可以對varnish緩存伺服器進行配置了。主要修改的檔案為下面兩個。Varnish1 與Varnish2的配置檔案一緻,将IP修改為自己對應的IP就可以了。 <code>/etc/varnish/default.vcl</code>,varnish 的預設配置檔案 <code>/etc/varnish/varnish.params</code>,varnish 的一些預設參數。
其中<code>/etc/varnish/default.vcl</code>的配置内容,如下。
對varnish的參數檔案進行修改。這樣便于讓代理伺服器知道應該将請求排程給誰。
在上面的配置完成之後,在varnishadm控制台界面調用<code>backend.list</code>指令就能夠檢視,後端伺服器的健康狀态了。
因為我們的後端伺服器還沒有進行配置,是以四個伺服器都是處于當機狀态。
使用yum來安裝Httpd軟體包就可以。安裝之後,啟動服務,確定80端口已經打開。此時再在Varnish伺服器上調用<code>backend.list</code>指令就可以檢視到已經又兩個伺服器處于Healthy狀态了。
在資料庫伺服器上,安裝資料庫服務,同時建立給WordPress應用程式使用的資料庫表和使用者。
安裝 httpd php php-mysql
安裝wordpress,将wordpress 解壓到http預設路徑下,并修改WordPress的資料庫配置檔案。
修改目錄權限
建立varnish健康性檢查頁面
在浏覽器位址欄輸入 <code>http://172.18.3.77/wordpress/index.php</code>,此時站點通路成功。
1、架構優點 HAProxy為緩存伺服器提供了負載均衡,使用了uri排程算法,保證了同樣路徑的請求能夠被排程到同樣的主機上,提高了緩存的命中率。 HAProxy提供了web管理界面,能夠更直覺的進行排程管理和管控 Varnish的緩存機制,以及動靜分離等技術,提高了web伺服器的負載能力,進而使系統能夠應對高并發量的請求 資料庫的主從複制,也是企業實際生産應用中使用較多的生産政策,這樣能夠實作網絡請求的頻繁讀寫,對降低了資料庫伺服器的壓力。
2、尚且不足 使用者上傳的靜态資源如何存儲到靜态伺服器中,檔案的分布式存儲與資料同步是這個結構需要解決的一個重要問題 HAproxy做負載均衡,沒有備援能力,容易出現單點故障,最好配合KeepAlived實作高可用。 如果使用者在通路過程中,建立了Session會話,會話行為應該如何保持