環(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ù)字,所以很煩)。