一:實驗環境
主nginx負載均衡器:10.192.203.201 (通過keepalived配置了VIP:10.192.203.106供外使用)
副nginx負載均衡器:10.192.203.102(通過keepalived配置了VIP:10.192.203.106供外使用)
後端代理的web服務器:
10.192.203.201:81
10.192.203.102:81
--由於是在自己虛擬機裏實驗的,所以這裏一共使用了兩臺服務器。Nginx服務器最好能和web服務器分離。
二:實驗步驟
2.1 安裝web服務器
略
2.2 安裝Nginx
在兩臺服務器上分別安裝nginx,實驗步驟參考:
http://blog.csdn.net/yabingshi_tech/article/details/47416787
2.3 配置nginx
#代理兩臺web服務器
修改兩臺nginx服務器配置文件:
vi /usr/local/nginx/conf/nginx.conf
修改前:
修改後(添加ustream……,修改server裏的location /部分):
注意:proxy_pass http://webservers的webservers需要和upstream 後的內容保持一致。
重新加載配置文件(可以不用重啓nginx):
/usr/local/nginx/sbin/nginx -s reload
#測試效果
這裏以10.192.203.201爲例。
先修改兩臺web服務器默認調用的文件index.html
[root@web1 ~]# echo"<h1>web1.test.com</h1>" > /var/www/html/index.html
[root@web2 ~]# echo"<h1>web2.test.com</h1>" > /var/www/html/index.html
多次刷新,可以看到有時調用的是web1,有時調用的是web2,說明做到了負載均衡。
也可以通過查看apache 訪問日誌,來查看nginx當時將請求發送到了哪臺web服務器。
2.4 ngnix實現動靜態分離
動態的由apache處理,靜態的由Nginx處理。
vi /usr/local/nginx/conf/nginx.conf
在server{}裏添加:
- location ~\.(php)?$ {
- proxy_set_header X-Real-IP$remote_addr;
- proxy_pass http://webservers;
- }
- location ~.*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|js|css)${
- root /usr/local/nginx/dandan;
- }
如圖:
/*
如果後端代理的是tomcat或者jboss的話,將location ~ \.(PHP)?$ {
proxy_set_header X-Real-IP$remote_addr;
proxy_pass http://webservers;
}
改爲: location ~ \.(jsp|do)$ {
proxy_pass http://webservers;
proxy_set_header X-Real-IP $remote_addr;
}即可。
如圖:
*/
在/usr/local/nginx/下新建一個dandan目錄,並在該目錄下新建一個a.html文件,添加內容:this is from nginx dir
測試靜態頁面:
測試動態頁面
/*
確保web服務器上已經安裝PHP
# sudo yum install php
# sudo /etc/init.d/httpd restart
*/
echo"<?php phpinfo(); ?>" > /var/www/html/info.php
驗證php是否是通過apache處理的:
關閉apache再測試訪問php頁面,看到訪問不到php,但是能訪問到靜態頁面
[root@PChtml]# service httpd stop
Stoppinghttpd: [ OK ]
2.5 nginx結合keepalive
nginx結合keepalive可以實現nginx的高可用。
2.5.1 安裝keepalive
- yum install -y popt-devel
- cd /usr/local/src
- tar zxvf keepalived-1.2.2.tar.gz
- cd keepalived-1.2.2
- ./configure --prefix=/
- make
- make install
2.5.2 新建檢查nginx腳本
- vi /root/check_nginx.sh
- if [ "$(ps -ef | grep "nginx:master process"| grep -v grep )" == "" ]
- then
- /etc/init.d/keepalived stop
- else
- echo "nginx is running"
- fi
chmod +x /root/check_nginx.sh
加入到作業計劃
crontab -e
*/1 * * * * /root/check_nginx.sh >>/root/check_nginx.log
2.5.3 修改配置文件
--修改兩臺keepalived服務器配置文件
vi /etc/keepalived/keepalived.conf
- #ConfigurationFile for keepalived
- global_defs {
- notification_email { ######定義接受郵件的郵箱
- [email protected]
- }
- notification_email_from [email protected] ######定義發送郵件的郵箱
- smtp_server mail.tuge.com
- smtp_connect_timeout 10
- }
- vrrp_script check_nginx { ######定義監控nginx的腳本
- script "/root/check_nginx.sh"
- interval 2 ######監控時間間隔
- weight 2 ######負載參數
- }
- vrrp_instance vrrptest { ######定義vrrptest實例
- state BACKUP ######服務器狀態
- interface eth0 ######使用的接口
- virtual_router_id 51 ######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換
- priority 150 ######服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER
- advert_int 1 ######服務器之間的存活檢查時間
- authentication {
- auth_type PASS ######認證類型
- auth_pass ufsoft ######認證密碼,一組lvs 服務器的認證密碼必須一致
- }
- track_script { ######執行監控nginx進程的腳本
- check_nginx
- }
- virtual_ipaddress { ######虛擬IP地址
- 10.192.203.106
- }
- }
#注意,需要修改下從的priority的值 ,改成比主的小。
2.5.4 vi /etc/sysconfig/iptables
#注意,在兩臺機器上都要修改。添加:
-A INPUT -d 10.192.203.106/32 -j ACCEPT
-A INPUT -d 224.0.0.18 -j ACCEPT
#第二行意思是添加VRRP通訊支持
修改完後,重啓防火牆
service iptables restart
2.5.5 啓動keepalived
在兩臺服務器上分別啓動:
service keepalived start
分別執行ip addr命令,可以在最先啓動的機器上看到虛擬IP.如:
- [root@PCkeepalived]# ip addr
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue state UNKNOWN
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
- link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
- inet 10.192.203.201/24 brd 10.192.203.255 scope global eth0
- inet 10.192.203.106/32 scope global eth0
- inet6 fe80::a00:27ff:fe04:516/64 scope link
- valid_lft forever preferred_lft forever
- 3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
- link/ether 08:00:27:3a:ec:3c brd ff:ff:ff:ff:ff:ff
- inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
- inet6 fe80::a00:27ff:fe3a:ec3c/64 scope link
- valid_lft forever preferred_lft forever
2.5.6 驗證
關掉主的nginx,看到vip漂移到了從,且仍然能通過虛擬IP均衡地訪問web服務器。
- [root@PC keepalived]# ip addr
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue state UNKNOWN
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
- link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
- inet 10.192.203.102/24 brd 10.192.203.255 scope global eth0
- inet 10.192.203.106/32 scope global eth0
- inet6 fe80::a00:27ff:fe04:516/64 scope link
- valid_lft forever preferred_lft forever
同理nginx也可以代理tomcat,jboss等。
本篇文章參考:http://www.360doc.com/content/13/1114/12/7694408_329125489.shtml,http://ju.outofmemory.cn/entry/52165