首頁  >  文章  >  後端開發  >  nginx+keepalived 高可用負載平衡

nginx+keepalived 高可用負載平衡

WBOY
WBOY原創
2016-08-08 09:27:521098瀏覽

話就不多說了,nginx安裝與配置,還有負載平衡呢,可以看我寫的另一篇文章《nginx負載平衡實戰》,還有關於負載平衡呢,大家可以看一下我寫的另外兩篇文章,一個是《lvs+keepalived負載平衡》,另一個是《haproxy+keepalived負載平衡》,三種負載平衡的差別呢,可以看一下我轉載的一篇文章《軟體級負載平衡器(LVS /HAProxy/Nginx)的特性簡介與比較》,以下直接進入設定步驟:

1.系統環境

[plain] view plaincopy

  1. 系統版本:CentOS release 5.9 (Final) x86 32位元      
  2. keepalived版本:    1.2.4  
  3.   
  4. 主keepalived: 192.168.207.130  
  5.   
  6. 從keepalived:192.168.207.131  
  7. VIP:192.168.207.140   
  8. WEB_1:192.168.207.129980個連接埠 :192.168.207.130 8080埠   
  9. WEB_3:192.168.207.131 8080連接埠  .168.207.130和192.168.207.131上操作
  10. [plain] view plaincopy
  11. useradd nginx  
  12. vi /usr/local/nginx/conf/nginx.H
  13. [plain] view plaincopy
    1. #運行用戶      
    2. user nginx nginx;     worker_processes 2;      
    3. #全域錯誤日誌及PID檔案       
    4. error_log logs/error. log notice;      
    5. pid logs/nginx.pid;      
    6.      
    7.     use epoll;      
    8.     nginx支援的總連線數等於worker_processes * worker_connections    
    9. }
  14. #設定http伺服器,利用它的反向代理功能提供負載平衡支援      
  15. http {     
  16.     include mime.types;  #這是說nginx支援哪些多媒體類型,可以到conf/mime.types查看支援哪些多媒體    
  17.     default_type application/octet-stream;       
  18.     
  19.     log_format main '$remote_addr - $remote_user [$time_local] '     
  20.     '"$request"  '"$http_referer" "$http_user_agent" '     
  21.     '"$gzip_ratio"' ;      
  22.     
  23.     log_format download_     '"$request" $status $bytes_sent '     
  24.    
  25.     '"$http_range" "$sent_http_content_range"';      
  26. 🎠  client_header_buffer_size 1k;      
  27.     large_client_header_buffers 4 4k    
  28.     #gzip on;      
  29.     #gzip_min_length 1100 8k;      
  30.     #gzip_types text/plain;      
  31.     #postpone_output 1460;      
  32.     #設定access log      
  33.     access_log log er_timeout 3m;      
  34.     client_body_timeout 3m;      
  35.     sendfile on;      
  36.     tcp_nopush on;      
  37.     tcp_nodelay       
  38.     #  
  39.         #weigth參數表示權值,權值越高   server 192.168.207.130:8080 weight=5;      
  40.         server 192.168.207.131:8080 weight=5;    
  41.  server { #這個是設定web服務的,監聽8080埠    
  42.         listen        server_name    192.168.207.131; #這個根據系統ip變化  
  43.         index     index.html index.htm;    www/html;    
  44.         #error_page     500 502 503 5041   500 502 503 504150     # location = /50x.html {    
  45.         #    root        
  46.         }     
  47.          
  48.         listen 80;      
  49.         server_name 192.168.207.140;                 #charset gb2312;      
  50.         #設定本虛擬主機的存取日誌   three.web.access.log main;      
  51.         #如果存取 /img/*, /js/*, /css/* 資源,則直接取本地文件,不透過squid   squid的快取效果較好      
  52.         #location ~ ^/(img|js|css)/{    /data3/Html;      
  53.         #   expires 24h;  
  54.             #對 "/" 啟用負載均衡      
  55.         location / {      
  56.             proxy_pass http://mysvr;  #以這種格式來使用後端的web服務器    
  57.             proxy_redirect off;      
  58.             proxy_set_header Host $host;       _addr;      
  59.             proxy_set_header ,          client_max_body_size 10m;      
  60.          
  61.             proxy_connect_timeout 90;      
  62.             proxy_read_timeout 90;      
  63.     
  64.             proxy_buffers 4 32k;     buffers_size 64k;      
  65.             proxy_temp_file_write_size 64k     proxy_temp_file_write_size 64k    proxy_temp_file_write_size         }      
  66.         #設定查看       location /NginxStatus {      
  67.                     access_log on;      
  68.             auth_basic "NginxStatus";      🠎      #設定存取密碼,htpasswd -bc filename username password    
  69.        
  70. }     
  71. 3 .自訂keepalived設定檔
  72. [plain] view plaincopy
  73. vi /etc/keepalived/keepalived.conf  
  74. 內容 plaincopy
    1. global_defs {  
    2.    notification_email {  
    3.         root@localhost.localdomain  
    4.    }  
    5.    notification_email_from notify@keepalived.com  
    6.    smtp_server 127.0.0.1  
    7.    smtp_connect_timeout 30  
    8.    router_id LVS_DEVEL  
    9. }  
    10.                 script "/etc/keepalived /check_nginx.sh            interval 2                        ##監控時間  
    11.                 weight 2                                ###目前搞不清楚  
    12. }  
    13. vrrp_instance VI_1 {  
    14.         state MASTER                            ### 設置為 主  
    15.         interface eth0                             ###監控網卡  
    16.         virtual_router_id 51                    ### 這個兩台服務器必須一樣  
    17.         priority 101                                 ### 權重值 MASTRE 一定要高於 BAUCKUP  
    18.         authentication {  
    19.                      auth_type PASS  
    20. auth_pass 1111  
    21.         }  
    22.               chk_http_port                     ## 
    23.         virtual_ipaddress {  
    24.                              ###    VIP 位址  
    25.         }  
    26. }  
    27. lain
    28. 4.寫自訂腳本
    29. lain
    30. . plaincopy
      1. vi /etc/keepalived/check_nginx.sh  

      內容如下:

      view

      內容如下:
      1. viewview內容 plaincopy
      2. !/bin/bash  
      3. A=`ps -C ng有 nginx進程 把值賦給變數A  
      4. if [ $A -eq 0 ];then                         
      5.         /usr/local/nginx/sbin/nginx  
      6.      if [ `ps -C nginx - -no-header |wc -l` -eq 0 ];then  
      7.                           ## 則結束 keepalived 過程  
      8.       
      9. 這裡是檢查nginx是否啟動好,如果沒有啟動,先啟動nginx,隔了3秒後還沒有啟動好,則將keepalived進程也關閉,這樣從keepalived就能接手過去了,提供高可用性,在這裡呢, keepalived服務是提供高可用性,而nginx是提供後端web伺服器的負載平衡。

      這裡還要給腳本加上執行權限,如下
      [plain] view plaincopy

      chmod +x /etc/keepalived/check_nginx.sh  
      1. 帶的apache昨晚web伺服器的,比較省事,這樣呢,我只要啟動好主從keepalived就ok了,因為它會利用check_nginx.sh腳本來自動啟動nginx。
      2. 都啟動好了。
      訪問http://192.168.207.140就可以輪訓訪問後端的三台web伺服器內容啦這裡我們把主keepalived服務給關掉,來測試高可用性
      然後會在從keepalived伺服器上的/var/log/ messages看到這樣的日誌



      [plain] view plaincopy



      Apr 19 17:42:44 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STAT 45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE  

      Apr 19 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.  
      1. Apr 1999:411999:4028 ) Sending gratuitous ARPs on eth0 for 192.168.207.140  
      2. Apr 19 17:42:45 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.140 added   Netlink reflector reports IP 192.168.207.140 added  
      3. Apr 19 17:42:45 localhost avahi-daemon[4204]: Registering new address record for 192.168.207.140 on eth0.  

      4. 繼續訪問http://192.168.207.140,依舊可以訪問後端的三台web伺服器
        然後再把原主keepalived打開,可以觀察到原從日誌view plaincopy

        1. Apr 19 17:42:50 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous 表明8885621 Apr 19 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert  
        2. Apr 19 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE VRRP_Instance(VI_1) Entering BACKUP STATE VRRP_Instance(VI_1) Entering BACKUP STATE calhost Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.  
        3. Apr 19 17:44:06 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.140 removed   Netlink reflector reports IP 192.168.207.140 removed  
        4. Apr 19 17:44:06 localhost avahi-daemon[4204]: Withdrawing address record for 192.168.207.140 on eth0.  
        5. 從結果中恢復了原來的主說明。
        6. 生產環境中,後端的機器也可能會掛掉,但是呢,這就不用你操心啦,nginx會自動把session分配到好的後端web伺服器上的啦
        ok,到這裡全部結束了,實踐親測,祝君成功
        From: http://blog.csdn.net/zmj_88888888/article/details/8825471
        以上就介紹了nginx+keepalived 高可用負載平衡,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn