HAProxy+Varnish動(dòng)靜分離部署WordPress

介紹使用HAProxy+varnish實(shí)現(xiàn)WordPress的動(dòng)靜分離;
實(shí)驗(yàn)要求:
(1) 動(dòng)靜分離部署wordpress白筹,動(dòng)靜都要能實(shí)現(xiàn)負(fù)載均衡智末,要注意會(huì)話(huà)的問(wèn)題;
(2) 在haproxy和后端主機(jī)之間添加varnish進(jìn)行緩存徒河;
(3) haproxy的設(shè)定要求:
(a) stats page系馆,要求僅能通過(guò)本地訪(fǎng)問(wèn)使用管理接口;
(b) 動(dòng)靜分離虚青;
(c) 分別考慮不同的服務(wù)器組的調(diào)度算法它呀;

簡(jiǎn)單拓?fù)鋱D:

如需實(shí)現(xiàn)高可用,亦可在HAproxy代理服務(wù)器上實(shí)現(xiàn)keeplived高可用棒厘,使用兩臺(tái)varnish緩存纵穿。

實(shí)驗(yàn)環(huán)境:

使用centos7.3
HAproxy ip:192.168.18.97
varnish ip 192.168.18.98
static server ip :192.168.18.99
Dynamic server ip :192.168.18.100
mysql+nfs ip :192.168.18.103
一.部署web靜態(tài)端服務(wù):

yum -y install httpd
echo " web Server PAGE" > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd

測(cè)試是否正常工作

curl http://192.168.18.99
 web Server PAGE

二、部署動(dòng)態(tài)端服務(wù)

 yum install httpd php php-mysql php-mbstring php-mcrypt
vim /var/www/html/index.php     
Dynamic Server         
<?php 
    phpinfo();
?>

測(cè)試是否正常運(yùn)行:

三奢人、配置NFS+mysql

[root@centos7 ~]#yum  -y install nfs -server  nfs-utils mariadb-server
[root@centos7 ~]#systemctl start  nfs-server.service
[root@centos7 ~]#systemctl start  mariadb.service
[root@centos7 ~]#mysql_secure_installation  //進(jìn)行mysql安全設(shè)置
[root@centos7 ~]#mysql -uroot -p123456 //以mysql的root身份登入谓媒。
MariaDB [(none)]> create database blogdb; //創(chuàng)建WordPress數(shù)據(jù)庫(kù)
MariaDB [(none)]> grant all on blogdb.* to wpuser@'192.168.18.%' identified by '123456';  
//創(chuàng)建WordPress用戶(hù)和密碼 
下載WordPress并解壓到、/app/blog下
[root@centos7 ~]#useradd -u 48  -r -s /sbin/nologin apache
[root@centos7 ~]#chown -R apache.apache /app/blog/
[root@centos7 ~]#cp /app/blog/wp-config-sample.php  /app/blog/wp-config.php
[root@centos7 ~]#vim wp-config.php //直接對(duì)配置文件修改何乎,
/** WordPress數(shù)據(jù)庫(kù)的名稱(chēng) */
define('DB_NAME', 'blogdb');
/** MySQL數(shù)據(jù)庫(kù)用戶(hù)名 */
define('DB_USER', 'wpuser');
/** MySQL數(shù)據(jù)庫(kù)密碼 */
define('DB_PASSWORD', '123456');
/** MySQL主機(jī) */
define('DB_HOST', '192.168.18.103');
[root@centos7 ~]#vim /etc/exports  //編輯nfs配置文件
/app/blog 192.168.18.0/24(rw,all_squash,anonuid=48,anongid=48)

掛載:

在static server和Dynamic server做掛載句惯。
[root@centos7 ~]#vim /etc/fstab //寫(xiě)進(jìn)配置文件≈Ь龋可以以后開(kāi)機(jī)自動(dòng)掛載抢野。
192.168.18.103:/app/blog        /var/www/html/blog       nfs     defaults  0 0 //在最后添加這條記錄
[root@centos7 ~]#mkdir /var/www/html/blog -pv //沒(méi)有此目錄創(chuàng)建此目錄。
[root@centos7 ~]#mount -a //對(duì)/etc/fstab 新增內(nèi)容掛載

測(cè)試:

三各墨、配置安裝 HAProxy

yum -y install haproxy
vim /etc/haproxy.cfg
frontend  main
        # 監(jiān)聽(tīng)在80端口
    bind        *:80
    # 增加自定義頭部
    rspadd          X-Via:\ HAProxy-1
    # 刪除頭部
    rspidel         Server.*
    # ACL規(guī)則
    acl static      path_end -i .html .css .js
    acl static      path_end -i .jpg .jpeg .gif .png
    acl static      path_beg -i /images /static
    # 如果滿(mǎn)足定義的static ACL規(guī)則指孤,則調(diào)度至此后端
    use_backend     websrvs if static
    # 默認(rèn)后端
    default_backend appsrvs
listen status
        # 管理頁(yè)面監(jiān)聽(tīng)端口
    bind *:9009
    # ACL規(guī)則
    acl auth_admin  src 192.168.18.1
    # 開(kāi)啟狀態(tài)頁(yè)
    stats           enable
    # 狀態(tài)頁(yè)URI
    stats uri       /myhaproxy?status
    # 狀態(tài)頁(yè)提示信息
    stats realm     HAProxy\ Admin\ Area
    # 認(rèn)證用戶(hù):密碼
    stats auth      admin:admin
    # 如果滿(mǎn)足 auth_admin條件則允許訪(fǎng)問(wèn)狀態(tài)頁(yè)
    stats admin     if auth_admin
backend websrvs
        # 添加頭部,日志中可以使用
    option      forwardfor header X-Client
    # 負(fù)載均衡調(diào)度算法為 URI
    balance     uri
    # 后端服務(wù)器贬堵,健康檢查恃轩、權(quán)重、自定義cookie
    server      web1    192.168.18.98:80 check  cookie web1
    # 一致性HASH
    hash-type   consistent
backend appsrvs
    option      forwardfor header X-Client
    balance     uri
    #balance     roundrobin
    server      app1    192.168.18.99:80 cookie app1 check
    hash-type   consistent                            

四黎做、配置varnish

yum -y install varnish
cp /etc/varnish/varnish.params{,.bak}
vim /etc/varnish/varnish.params
vcl 4.0;
import directors;   # 導(dǎo)入負(fù)載均衡模塊
# Default backend definition. Set this to point to your content server.
probe healthchk {    # 配置健康狀態(tài)檢查
        .url = "/.healthchk.html";   # 檢查狀態(tài)檢查的URL
        .timeout = 2s; # 超時(shí)時(shí)間
        .interval = 2s;# 每2秒檢查一次
        .window = 8; # 一共檢查的次數(shù)
        .threshold = 5; # 如果大于4次則為健康
}

backend appsrv1 {   # 配置后端主機(jī)
    .host = "192.168.18.100";
    .port = "80";
    .probe = healthchk;
}
backend websrv1 {     # 配置后端主機(jī)
    .host = "192.168.18.99";
    .port = "80";
    .probe = healthchk;
}


acl purgers {   # 定義裁剪的ACL
        "127.0.0.0"/8;
        "192.168.18.131"/32;
}
acl baner {
         "127.0.0.1"/8;
}

sub vcl_init {   # 初始化負(fù)載均衡
        new websrvs  = directors.round_robin();
        websrvs.add_backend(websrv1);
}


sub vcl_recv {   # 定義接收段
    # 如果請(qǐng)求的URL中包括以下信息叉跛,則調(diào)度至我們的后端主機(jī)
   if (req.url ~ "(?i)\.(jpg|jpeg|png|gif|svg|txt|html|css|js)$") {
        set req.backend_hint = websrvs.backend();
        }else {
        set req.backend_hint = appsrv1;
   }     
    ## 如果請(qǐng)求方法是PURGE,也就是裁剪緩存
      if (req.method == "PURGE") {
# 如果客戶(hù)端IP不在我們之前定義的ACL for purges中蒸殿,提示如下信息
        if (!client.ip ~ purgers) {
                return(synth(405,"Purging not allowed for " + client.ip));
        }
        return(purge); # 反之筷厘,執(zhí)行裁剪緩存
        }
 if (req.method == "BAN") {
        if (!client.ip ~ baner) {
                return(synth(405,"baning  not allowed for " + client.ip));
        }
        ban("req.http.host == " + req.http.host + " && req.url == " + req.url);
        return (synth(200,"Ban added"));
        }


    if (req.method == "PURGE") {
        return(purge);
    }
 # 自定義頭部
   if (req.restarts == 0) {   
        if (req.http.X-Fowarded-For) {
           set req.http.X-Forwarded-For = req.http.X-Forwarded-For + "," + client.ip;
        } else {
           set req.http.X-Forwarded-For = client.ip;
        }
   }
# 如果相應(yīng)的狀態(tài)碼不是200或者404,則不緩存
 if ( beresp.status != 200 && beresp.status != 404 ) {
        set beresp.uncacheable = true;
        set beresp.ttl = 120s;
        return (deliver);
    }
# 設(shè)置默認(rèn)ttl緩存為 1小時(shí)
    set beresp.ttl = 1h;
}

sub vcl_purge {   # 定義裁剪緩存的提示信息
        return (synth(200,"Purged."));
}
sub vcl_deliver {
# 如果命中了則返回自定義頭部宏所,未命中則返回另一個(gè)自定義頭部
    if (obj.hits > 0) {
        set resp.http.X-Cache = " Hit via " + server.ip;
    } else {
        set resp.http.X-Cache = " Miss  via " + server.ip;
    }
}

到這里就配置完成了:
測(cè)試:



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酥艳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子楣铁,更是在濱河造成了極大的恐慌玖雁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盖腕,死亡現(xiàn)場(chǎng)離奇詭異赫冬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)溃列,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)劲厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人听隐,你說(shuō)我怎么就攤上這事补鼻。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵风范,是天一觀的道長(zhǎng)咨跌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)硼婿,這世上最難降的妖魔是什么锌半? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮寇漫,結(jié)果婚禮上刊殉,老公的妹妹穿的比我還像新娘。我一直安慰自己州胳,他們只是感情好记焊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著栓撞,像睡著了一般遍膜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腐缤,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天捌归,我揣著相機(jī)與錄音,去河邊找鬼岭粤。 笑死惜索,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剃浇。 我是一名探鬼主播巾兆,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虎囚!你這毒婦竟也來(lái)了角塑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淘讥,失蹤者是張志新(化名)和其女友劉穎圃伶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒲列,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窒朋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝗岖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侥猩。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抵赢,靈堂內(nèi)的尸體忽然破棺而出欺劳,到底是詐尸還是另有隱情唧取,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布划提,位于F島的核電站枫弟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腔剂。R本人自食惡果不足惜媒区,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一驼仪、第九天 我趴在偏房一處隱蔽的房頂上張望掸犬。 院中可真熱鬧,春花似錦绪爸、人聲如沸湾碎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)介褥。三九已至,卻和暖如春递惋,著一層夾襖步出監(jiān)牢的瞬間柔滔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工萍虽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睛廊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓杉编,卻偏偏與公主長(zhǎng)得像超全,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邓馒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容