nginx+keepalive實現高可用負載均衡

一:實驗環境

主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{}裏添加:

[plain] view plain copy
  1. location ~\.(php)?$ {  
  2.         proxy_set_header X-Real-IP$remote_addr;  
  3.         proxy_pass http://webservers;  
  4.         }  
  5.    
  6.         location ~.*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|js|css)${  
  7.         root /usr/local/nginx/dandan;  
  8.         }  

如圖:

/*

如果後端代理的是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

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. yum install -y popt-devel  
  2. cd /usr/local/src  
  3. tar zxvf keepalived-1.2.2.tar.gz  
  4. cd keepalived-1.2.2  
  5. ./configure --prefix=/  
  6. make  
  7. make install  


2.5.2 新建檢查nginx腳本

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. vi /root/check_nginx.sh  
  2. if [ "$(ps -ef | grep "nginx:master process"| grep -v grep )" == "" ]  
  3.  then  
  4.     /etc/init.d/keepalived stop  
  5.  else  
  6.     echo "nginx is running"  
  7. 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

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. #ConfigurationFile for keepalived  
  2. global_defs {  
  3. notification_email {                        ######定義接受郵件的郵箱  
  4.  [email protected]  
  5.        }  
  6.  notification_email_from [email protected]    ######定義發送郵件的郵箱  
  7.  smtp_server mail.tuge.com  
  8.  smtp_connect_timeout 10  
  9. }  
  10. vrrp_script check_nginx {                   ######定義監控nginx的腳本  
  11.     script "/root/check_nginx.sh"  
  12.     interval 2                            ######監控時間間隔  
  13.     weight 2                              ######負載參數  
  14.     }  
  15. vrrp_instance vrrptest {                 ######定義vrrptest實例  
  16.        state BACKUP              ######服務器狀態  
  17.  interface eth0                     ######使用的接口  
  18.        virtual_router_id 51               ######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換  
  19.        priority 150                       ######服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER  
  20.        advert_int 1                        ######服務器之間的存活檢查時間  
  21. authentication {  
  22.        auth_type PASS                     ######認證類型  
  23.        auth_pass ufsoft       ######認證密碼,一組lvs 服務器的認證密碼必須一致  
  24. }  
  25. track_script {                              ######執行監控nginx進程的腳本  
  26.     check_nginx  
  27.     }  
  28. virtual_ipaddress {                         ######虛擬IP地址  
  29.         10.192.203.106  
  30. }  
  31. }  

#注意,需要修改下從的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.如:

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1.  [root@PCkeepalived]# ip addr  
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue state UNKNOWN  
  3.    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
  4.    inet 127.0.0.1/8 scope host lo  
  5.    inet6 ::1/128 scope host  
  6.       valid_lft forever preferred_lft forever  
  7. 2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000  
  8.    link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff  
  9.    inet 10.192.203.201/24 brd 10.192.203.255 scope global eth0  
  10.    inet 10.192.203.106/32 scope global eth0  
  11.    inet6 fe80::a00:27ff:fe04:516/64 scope link  
  12.       valid_lft forever preferred_lft forever  
  13. 3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000  
  14.    link/ether 08:00:27:3a:ec:3c brd ff:ff:ff:ff:ff:ff  
  15.    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1  
  16.    inet6 fe80::a00:27ff:fe3a:ec3c/64 scope link  
  17.       valid_lft forever preferred_lft forever  
  18.    

2.5.6 驗證

關掉主的nginx,看到vip漂移到了從,且仍然能通過虛擬IP均衡地訪問web服務器。

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. [root@PC keepalived]# ip addr  
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue state UNKNOWN  
  3.    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
  4.    inet 127.0.0.1/8 scope host lo  
  5.    inet6 ::1/128 scope host  
  6.       valid_lft forever preferred_lft forever  
  7. 2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000  
  8.    link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff  
  9.    inet 10.192.203.102/24 brd 10.192.203.255 scope global eth0  
  10.    inet 10.192.203.106/32 scope global eth0  
  11.    inet6 fe80::a00:27ff:fe04:516/64 scope link  
  12.       valid_lft forever preferred_lft forever  

同理nginx也可以代理tomcat,jboss等。

本篇文章參考:http://www.360doc.com/content/13/1114/12/7694408_329125489.shtmlhttp://ju.outofmemory.cn/entry/52165

發佈了111 篇原創文章 · 獲贊 62 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章