今天來簡述一下如何實現wordpress的動靜分離以及讀寫分離
首先來放出大圖。
1.來看圖說話
首先來介紹一下這張圖 最前端的兩臺機器是 負責調度后端主機請求動態資源還是靜態資源 并使用keepalived實現[Haproxy+keepalived]主機的高可用
如果正在工作的Master主機宕機 會通過keepalived的WatchDog進程的兩個子進程 當人兩個子進程分別處理這自己復雜的任務 checker進程負責檢查各個
主機的健康狀態 如:http LVS MASTER主機等的健康狀態 如果checker進程檢查到MASTER服務”不可用”時便會通知另一個進程vrrp進程告訴它刪除通告
并取消VIP并轉換為BACKUP狀態 在這里keepalived主要的是實現Haproxy的高可用 后端主機的狀態檢查完全可以交給Haproxy來做
然后來說一下Haproxy 如果請求的是動態資源就交給[Apeche+PHP]的主機 如果請求的資源是靜態資源就交給[Nginx]主機來處理
例如:我訪問的 http://1.1.1.1/wordpress/index.php 就交給[Apeche+PHP]的主機來處理請求
我訪問的是http://1.1.1.1/index.html或1.jpg的話就交給[Nginx]主機來處理請求
首先來說一下第一種情況我請求的是 http://1.1.1.1/wordpress/index.php 前端的[Haproxy+keepalived]的Master主機會進行調度
例如:調度到后端的[Apeche+PHP] 1主機 會從這臺主機網站根目錄下找到/wordpress/目錄并找到所對應的index.php文件來應答客戶機的請求
如果用戶的請求要訪問數據庫 會通過[Haproxy]主機來進行調度 調度到后端[DB_server]組中的某一臺數據庫主機 當然[DB_server]主機的數據庫都是共享的
請求任意一臺[DB_server]的數據都是一樣的
如果要上傳圖片便會把圖片 上傳到指定的目錄里邊 當然這里的圖片等靜態資源也都是共享到一塊的
再來說一下第二種我訪問的是靜態資源http://1.1.1.1/index.html或1.jpg 前端的[Haproxy+keepalived]的Master主機會進行調度
訪問靜態例如 調度器調度到調度到后端的[Nginx] 1主機 會從網站的跟目錄下邊找到index.html這個資源所對應的文件來應帶客戶請求 客戶訪問靜資源
時 會通多后端調度器[Nginx/Haproxy]來進行調度 調度到其中的某一臺[共享server2]服務器將對應的資源返回給客戶端
2.簡述各主機配置
最前端的兩臺主機要實現高可用的話 需要安裝keepalived實現虛擬IP的調度 配置一個虛擬主機段 并添加一個虛擬IP 一個為主服務器另一個為從服務器兩臺 主機一主一備如果主宕機從可以接手虛擬IP繼續對外一共服務 主機1和主機2的配置差別不大主要是一主一從
這只是配置樣例如何配置還請各位自行定奪
! Configuration File for keepalived
global_defs {
notification_email {
123456@qq.com
}
notification_email_from root@localhost
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id testOnly
vrrp_mcast_group4 224.0.6.200
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass turnLeft
}
virtual_ipaddress {
172.18.6.100
}
}
這兩臺主機上還要配置 Haproxy 實現對動態資源和靜態資源的調度如果訪問的是 .jpg .css .js .png等資源是調度到[Nginx]靜態資源主機
如果訪問的是.php等動態資源調度到[Apache+PHP]動態資源主機上 兩臺主機的配置相同就行了
這不是最終配置只是我寫出來的例子 請根據需要自行修改
frontend main *:80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js .html ##.html方便我進行測試的
use_backend static if url_static
default_backend app
##默認的是后端主機是 backend app 如果匹配到的是 .jpg .gif .png .css .js .html或者/static /images /javascript /stylesheets就到backend static主機
backend static
balance roundrobin
server staticsrv1 172.18.6.113:80 check ##靜態主機1
server staticsrv2 172.18.6.114:80 check ##靜態主機2
server sorryserver 172.18.6.111:8081 backup check ##sorryserver主機
##這個靜態主機我弄了兩個
backend app
option httpchk GET /index.php
balance roundrobin
server appsrv1 172.18.6.112:80 check ##動態主機我主要進行測試就整了一臺
server sorryserver 172.18.6.111:8082 backup check ##sorryserver主機
然后后端的兩臺[Apache+PHP]這就不用我多說了吧 安裝httpd和PHP能解析php的代碼就可以了 這里需要掛載[共享server1]主機的目錄/wordpress的上級 目錄 當然[共享server1]需要共享兩個目錄 一個是動態資源的目錄 一個是存儲的靜態資源目錄(實際環境應該是這樣使用)
但我們做實驗完全可以只共享一個目錄就可以了這里完全沒有必要對/wordpress/進行拆分
這里使用掛載共享目錄還有一個好處 方便代碼的更迭 如果需要更換代碼直接從共享服務器上替換新的代碼就可以了 因為這里是使用共享的資源
后端的[Haproxy]主機 只需要能調度數據庫就可以了
這不是最終配置只是我寫出來的例子 請根據需要自行修改
listen mysqls *:3306
mode tcp
balance leastconn
server mysql_1 172.18.6.112:3306 check
server msyql_2 172.18.6.113:3306 check
最后的[共享DBserver]z只需要安裝mysql并配置可以遠程登錄的用戶即可 主要是用來存儲用戶提交的文字信息
動態資源的主線說完了我們來說一說靜態資源的主線
[Nginx]主機需要安裝nginx 請求的是靜態資源從這里返回
上邊的大圖我給自己挖了個坑 上邊的圖好像更繞了一點 兩臺[Nginx]主機需要開啟反向代理功能 后端的主要還要開啟web服務
這是我重新修改后的圖配置簡單只是把[Haproxy/nginx]主機去掉就行了 [Nginx]主機直接掛在共享的目錄即可(這里需要掛載的是存儲圖片的目錄)
注意:這里的圖片存儲目錄需要與/wordpress/的目錄結構完整對應 還要有/wordpress/的主頁圖片的目錄 最簡單的方法直接把/wordpress/整個目錄掛載上
就可以了 共享目錄最簡單的只要共享/wordpress/目錄的上級目錄就行了 (當然這里實際環境應該只有存儲圖片的目錄和/wordpress/的主頁目錄)
完全沒有必要拆分嘛
3最后說一下請求和動靜資源的流向
首選訪問/wordpress/index.php 通過調度 調度到[Apache+PHP]群中 如果動態資源中有請求數據庫的會通過[Haproxy]調度到[共享DB_server]群中 或用戶 上傳文字類內容是時通過[Haproxy]主機調度器來進行讀寫
請求的.php資源是通過共享目錄掛載的方式來訪問的 如果用戶上傳圖片等內容是 會存儲到指定的目錄 共享服務器都是通過某些服務共享的 所以共享服務 器中的資源都是相同的
如果請求的是 圖片資源或者 .css .jpg等資源會被調度到[Ngingx]群中 [Nginx]主機是掛載共享服務器中的資源的 也會有靜態資源和用戶上傳的圖片資源等
訪問靜態資源會直接通過[Nginx]主機來返回
用戶從瀏覽器訪問會組成完整的響應內容
原創文章,作者:wode,如若轉載,請注明出處:http://www.www58058.com/76251