實現(xiàn)keepalived+lamp+varnish+Nginx反代部署wordpress

環(huán)境:

注意:各節(jié)點的時間需要同步(ntpdate ntp1.aliyun.com),關(guān)閉firewalld(systemctl stop firewalld.service,systemctl disable firewalld.service),設(shè)置selinux為permissive(setenforce 0 或 vim /etc/selinux/config);同時確保DR1和DR2節(jié)點的網(wǎng)卡支持MULTICAST(多播)通信。通過命令ifconfig可以查看到是否開啟了MULTICAST:

客戶端主機(jī):centos7.2,ip為10.10.10.133

nginx代理服務(wù)器:centos7.2,ip地址為10.10.10.134和10.10.10.135

varnish服務(wù)器:centos7.2,varnish版本為4.05,ip地址為10.10.10.136

后端lampRS服務(wù)器:centos7.2,兩臺的ip地址分別為10.10.10.137和10.10.10.138,nmp都用yum安裝

nfs服務(wù)器:centos7.2,ip地址為10.10.10.139,安裝wordpress

此處先實現(xiàn)varnish+nginx+lamp+wordpress

步驟: 1.在nginx代理服務(wù)器上安裝nginx,然后修改配置文件(10.10.10.134)

[root@localhost conf.d]# yum -y install nginx
[root@localhost conf.d]# vim /etc/nginx/nginx.conf
在http上下文中添加如下內(nèi)容:
       upstream web {
               server 10.10.10.137;  #兩臺RS服務(wù)器
               server 10.10.10.138;
}
[root@localhost conf.d]# vim /etc/nginx/conf.d/var.conf    #新建這個配置文件,添加如下內(nèi)容
server {
       listen 80;
       server_name www.zhuifeng.com;
       location / {
               proxy_pass http://web;    #此處實現(xiàn)nginx反代2臺rs服務(wù)器,需在RS配置完成后生效
       }
}
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl start nginx.service

rs配置完成后再訪問10.10.10.134
2.設(shè)置nfs服務(wù)器(10.10.10.139)
下載wordpress源碼包并解壓,此處用的wordpress-4.7.4-zh_CN.tar.gz版本

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# vim /etc/exports
添加如下內(nèi)容
/usr/share/wordpress/ 10.10.10.137(rw,no_root_squash) 10.10.10.138(rw,no_root_squash) #no_root_squash表示不壓縮權(quán)限,在本地使用時權(quán)限仍然為root,不寫這一條可能導(dǎo)致本地不能創(chuàng)建文件。
[root@localhost ~]# systemctl start rpcbind.service
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# exportfs -v    #檢測共享成功
[root@localhost ~]# exportfs -v
/usr/share/wordpress
        10.10.10.137(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,no_root_squash,no_all_squash)
/usr/share/wordpress
        10.10.10.138(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,no_root_squash,no_all_squash)

3.兩臺后端lamp服務(wù)器上執(zhí)行如下操作:(10.10.10.137和10.10.10.138)

(1)配置php和httpd

[root@localhost ~]# yum -y install httpd php mariadb php-mysql
[root@localhost ~]# vim /var/www/html/index.php
<?php
phpinfo();
?>
[root@localhost ~]# systemctl start httpd.service

用瀏覽器訪問http://10.10.10.137/index.php,出現(xiàn)php頁面證明php和httpd安裝成功
此處將httpd.conf配置文件做修改并加入自己的配置

[root@localhost html]# vim /etc/httpd/conf/httpd.conf
IncludeOptional conf.d/*.conf #去除此項前面的#號,允許導(dǎo)入自建配置
[root@localhost html]# vim /etc/httpd/conf.d/wordpress.conf 
<VirtualHost 10.10.10.137:80>
        DocumentRoot "/var/www/html/wordpress"
        <Directory "/var/www/html/wordpress">
                Options none
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/ilinux_access_log" combined
        <Location /server-status>
                SetHandler server-status
        </Location>
</VirtualHost>

(2)掛載nfs文件系統(tǒng),并配置mysql

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# mkdir /var/www/html/wordpress/
[root@localhost ~]# mount 10.10.10.139:/usr/share/wordpress /var/www/html/wordpress/
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql_secure_installation     #運行mysql初始化程序,給root設(shè)置個密碼,然后刪除多余的用戶和庫
[root@localhost ~]# mysql -u root -p    #輸入密碼后進(jìn)入mysql
mysql> create database wordpress;    #創(chuàng)建專用庫
mysql> grant all on wordpress.* to worduser@'172.16.%.%' identified by '123';    #創(chuàng)建并授權(quán)用戶
mysql>quit
[root@localhost ~]# httpd -t  #檢查httpd是否有錯
[root@localhost ~]# systemctl restart httpd.service

(3)完成后訪問10.10.10.137,出現(xiàn)wordpress設(shè)置頁面,將在數(shù)據(jù)庫中創(chuàng)建的庫名和用戶名密碼輸入,ip地址填寫為當(dāng)前l(fā)amp服務(wù)器的ip。然后下一步,這里會提示我們創(chuàng)建配置文件,我們在wordpress目錄下創(chuàng)建這個文件,然后將內(nèi)容粘貼進(jìn)去:

[root@localhost wordpress]# cd /var/www/html/wordpress/
[root@localhost wordpress]# vim wp-config.php
將網(wǎng)頁中提示的文件內(nèi)容粘貼進(jìn)去就行,這里就不在顯示文件內(nèi)容了

然后輸入標(biāo)題,輸入網(wǎng)站用戶名和密碼,就進(jìn)入到wordpress中了

RS2服務(wù)器(10.10.10.138)重復(fù)上述步驟,此處就并不贅述了
mysql服務(wù)器地址在wp-config.php里指向任意一臺RS服務(wù)器

4.在nginx之后增加varnish服務(wù)器

修改/etc/nginx/conf.d/var.conf,將lication修改為varnish服務(wù)器ip地址。

 location / {
                proxy_pass http://10.10.10.136;
        }

然后到varnish服務(wù)器上安裝varnish:

[root@localhost ~]# yum -y install varnish
[root@localhost ~]# cd /etc/varnish/
將varnish監(jiān)聽的地址更改為80端口:
[root@localhost varnish]# vim varnish.params
VARNISH_LISTEN_PORT=80     #將這里的6081更改為80端口
[root@localhost varnish]# vim default.vcl
將文件內(nèi)容修改為以下內(nèi)容:
import directors;
backend web1 {
    .host="10.10.10.137";
    .port="80";
}

backend web2 {
    .host="10.10.10.138";
    .port="80";
}

sub vcl_init {
        new server = directors.round_robin();
        server.add_backend(web1);
        server.add_backend(web2);
}
sub vcl_recv {
    if (req.method == "PURGE") {
        return(purge);
    }
    if (req.url ~ "(?i)\.jsp$") {
    set req.backend_hint = server.backend();
    }
     if (req.http.Authorization || req.method == "POST") {
    return (pass);
    }
    if (req.http.Cookie ~ "wordpress_logged_in_") {
    return (pass);
    }

}
sub vcl_pipe {
        return (pipe);
}

sub vcl_pass {
        return (fetch);
}

sub vcl_backend_response {
 if (bereq.url ~ "\.(css|js|png|gif|jp(e?)g|swf|ico|txt|eot|svg|woff)") {
    unset beresp.http.cookie;
    set beresp.http.cache-control = "public, max-age=2700000";
  }
}

sub vcl_deliver {
}

然后啟動varnish,用在客戶端瀏覽器訪問www.zhuifeng.com,訪問到wordpress頁面,證明實驗成功。
ab -c 10 -n 1000 http://www.zhuifeng.com/wp-login.php 進(jìn)行壓測
----------------------------************************************************************************-------------------------------
現(xiàn)在在之前varnish+nginx+lamp+wordpress的基礎(chǔ)上增加keepalived,實現(xiàn)集群的高可用
nginx2同nginx1配置,如果不成功,如果你是用scp文件的話,我觸發(fā)了下傳來文件的異動,生效了。
第二次做的時候,同樣出現(xiàn)nginx反代正常,加上upstream負(fù)載均衡就不出圖片.結(jié)果最后排除了所有可能性,把數(shù)據(jù)庫wordpress刪了重建。然后負(fù)載均衡就一切正常了

scp /etc/nginx/nginx.conf 10.10.10.135:/etc/nginx/
scp /etc/nginx/conf.d/var.conf 10.10.10.135:/etc/nginx/conf.d/

現(xiàn)在在2臺DR主機(jī)(nginx主機(jī))上分別添加keepalived服務(wù)
注意:keepalived由于是通過網(wǎng)卡路由組播技術(shù)實現(xiàn)高可用的,一般情況下DR主機(jī)需要2套網(wǎng)卡,一套公網(wǎng)連接互聯(lián)網(wǎng),一套私網(wǎng)連接內(nèi)網(wǎng)主機(jī)。此處為了方便,沒有做雙網(wǎng)卡,用10.10.10.160做虛擬ip.

[root@localhost conf.d]# yum install -y keepalived
[root@localhost conf.d]# vim /etc/nginx/conf.d/var.conf
proxy_pass http://web; #修改此處反代服務(wù)器地址為web組
[root@localhost conf.d]# vim /etc/nginx/nginx.conf
upstream web {
        #server 10.10.10.137;
        #server 10.10.10.138;
        server 10.10.10.136; #此處增加varnish服務(wù)器地址
    }
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

在nginx2主機(jī)上做同樣配置
配置keepalived.service

[root@localhost conf.d]# vim /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id n1
   vrrp_skip_check_adv_addr
   vrrp_mcast_group 224.0.100.19
}

vrrp_script chk_nginx {
   script "killall -0 nginx && exit 0 || exit 1"
   interval 1
   weight -10
   fall 3
   rise 3
}


vrrp_instance VI_1 {
    state MASTER        #DR2上此處填state BACKUP
    interface ens33  #你的外網(wǎng)網(wǎng)卡名
    virtual_router_id 1 #主備id必須一致
    priority 100  #權(quán)重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass ga@f25$b
    }
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        10.10.10.160 dev ens33 label ens33:0
    }
}
[root@localhost conf.d]# systemctl start keepalived.service

sorry,can't find page!頁面偷懶我沒有寫
在DR2中做類似配置
ip a l 查看ens33是否啟用了10.10.10.160
tcpdump -i ens33 -nn tcp port 80 抓包查看
客戶端寫入/etc/hosts
10.10.10.160 www.zhuifeng.com
訪問http://www.zhuifeng.com
有時候瀏覽器訪問就是訪問不上,你用curl www.zhuifeng.com就訪問上,再清空瀏覽器緩存,瀏覽器也能訪問上了

博主為做這個實驗加了8G內(nèi)存條,依然有點跑不動的樣子,VM虛擬機(jī)總是未響應(yīng),心驚肉跳的,等Docker版上線應(yīng)該會好多了吧(其實怪我啦,虛擬機(jī)全裝的桌面版,就是為了切屏方便。用X shell6的話,vim編輯器小鍵盤總是打不上數(shù)字,所以很煩)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容