nginx反向代理

集羣概述

簡        介:html

    集羣就是一組獨立的計算機,經過網絡鏈接組合成一個組合來共同完一個任務。nginx

集羣優勢:web

  • 高性能
  • 可伸縮性
  • 高可用

集羣種類:算法

 

  • 負載均衡集羣     簡稱:LBC或者LB。      ===>>>解決調度問題
  • 高可用集羣         簡稱:HAC。                 ===>>>解決單點故障
  • 高性能計算集羣  簡稱:HPC.                      ===>>>解決複雜運算
  • 網絡計算集羣                                             ===>>>雲計算等

Nginx複雜概念說明:後端

  • 對用戶訪問請求進行調度管理
  • 對用戶的訪問請求進行壓力分擔

Nginx反向代理說明:緩存

  • 反向代理,接收用戶請求代替用戶向後端訪問

 Nginx反向代理所使用的模塊:bash

  • ngx_http_upstream_module
  • ngx_http_proxy_module

upstream模塊配置服務器

參數:網絡

  • upstream                  ===> 定義一個負載均衡池 名稱自定義
  •  server                      ===> 服務器起點標籤 後面跟節點地址
  • weight=3                  ===> 指定輪訓次數,性能好可設置大一些
  • max_fails=3           ===> nginx嘗試鏈接後端主機失敗的次數
  • fail_timeout=10s       ===> 在fail_timeout定義的次數失敗後,距離下次檢查的間隔時間
  • backup                      ===> 備份服務器不提供工做,主服務器宕機提供工做

調度算法session

  • 定義輪詢調度算法   -rr-     默認調度算法
  • 定義權重調度算法   weight=3
  • 定義靜態調度算法    ip_hash   若是沒有session共享能夠臨時用ip_hash算法 
  • 定義daur(動態調度算法)   根據後端服務器響應時間來分配請求,比較智能的調度鍛打,此算法能夠根據頁面大小加載時間智能的進行負載均衡,須要下載upstream_fair模塊
  • 定義最小的鏈接數-least_conn  
####################### proxy
    upstream server_pools {
        server 192.168.10.249:80 weight=3 max_fails=3 fail_timeout=10;
        server 192.168.10.253:80 weight=5 max_fails=3 fail_timeout=10;
        server 192.168.10.252:80 weight=5 max_fails=3 fail_timeout=10 backup;
    }

ip_hash算法(不能有backup標識和weighe標識)

    upstream server_pools {
        ip_hash;
        server 192.168.10.249:80 max_fails=3 fail_timeout=10;
        server 192.168.10.253:80 max_fails=3 fail_tim eout=10;
        server 192.168.10.252:80 max_fails=3 fail_timeout=10;
    }  

動態調度算法

    upstream server_pools {
        server 192.168.10.249:80 max_fails=3 fail_timeout=10;
        server 192.168.10.253:80 max_fails=3 fail_timeout=10;
        server 192.168.10.252:80 max_fails=3 fail_timeout=10;
        fair;
    }

proxy模塊配置

參數詳解:

  • proxy_pass http://server_pools;                                         ===>web.yan.com請求都發送到upstream定義的服務器節點池。
  • proxy_set_header Host $host;                                           ===>在代理向後端服務器發送的http請求頭中加入host字段信息,用於當後端服務器配置有多個虛擬主機時,能夠識別代理的是哪一個虛擬主機
  • proxy_set_header X-Forwarded-For $remote_addr;         ===>在代理向後端服務器發送的http請求頭中加入X-Forwarded-For字段信息,用於後端服務器程序、日誌等接收記錄真實用戶的IP,而不是代理服務器的IP。
  • proxy_connect_timeout 60;                                                ===> 設定反向代理與後端節點服務器鏈接的超時時間,即發起握手等候響應的超時時間。
  • proxy_send_timeout 60;                                                     ===>設定代理後端服務器的數據回傳超時時間
  • proxy_read_timeout 60;                                                     ===>設定Nginx從代理的後端服務器獲取信息的超時時間
  • proxy_buffer_size 4k;                                                         ===>設定緩衝區的大小
  • proxy_buffers 4 32k;                                                           ===>設定緩衝區的數量和大小
  • proxy_busy_buffers_size 64k;                                            ===>設定系統很忙時可使用的proxy_buffers大小
  • proxy_temp_file_write_size 64k;                                        ===>設定proxy緩存臨時文件的大小
  • access_log off;                                                                 ===> 不記錄日誌可選
  • proxy_next_upstream                                                    ===>提升用戶體驗報錯自動切換
    server {
        listen 80;
        server_name web.yan.com;
        location / {
           proxy_pass http://server_pools;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_connect_timeout 60;
           proxy_send_timeout 60;
           proxy_read_timeout 60;
           proxy_buffer_size 4k;
           proxy_buffers 4 32k;
           proxy_busy_buffers_size 64k;
           proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_504;
        }
    }

動靜分離

服務器規劃:

/upload     10.0.0.8:80       html/www/upload         upload服務器
/static       10.0.0.7:80       html/www/static            static靜態服務器
/                10.0.0.9:80      html/www 默認

建立upstream負載信息:

    upstream upload_pools {
      server 192.168.10.56:80;
    }
    upstream static_pools {
      server 192.168.10.57:80;
    }
    upstream default_pools {
      server 192.168.10.58:80;
    }

 調用upstream信息

    server {
        listen 80;
        server_name www.yan.com;
    location /static/ { 
        proxy_pass http://static_pools;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

        location /upload/ { 
            proxy_pass http://upload_pools;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

     location / { 
            proxy_pass http://default_pools;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
         access_log  logs/access_www.log  main;
    }
}

手機用戶電腦用戶訪問不一樣網站實例配置:

    upstream upload_pools {
      server 10.0.0.8:80;
    }

    upstream static_pools {
      server 10.0.0.7:80;
    }

    upstream default_pools {
      server 10.0.0.9:80;
    }

    server {
        listen 80;
        server_name www.yan.com;
        location / {
         if ($http_user_agent ~* "Iphome")
          {
            proxy_pass http://static_pools;
          }
         if ($http_user_agent ~* "Android")
          {
            proxy_pass http://upload_pools;
          }
        proxy_pass http://default_pools;
               }
         access_log  logs/access_www.log  main;
    }
}

 keepalived加Nginx高可用集羣

Nginx配置

配置listen 192.168.10.244:80; (域名解析到VIP)內核須要開啓容許綁定非本地的IP

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
##/etc/sysctl.conf 加上
sysctl -p 

配置文件

    upstream server_pools {
        server 192.168.10.56;
        server 192.168.10.57;
        server 192.168.10.58;
    }
    server {
        listen 192.168.10.244:80;
        server_name www.yan.com;
        location / {
            proxy_pass http://server_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
        access_log  logs/access_www.log  main;
    }
        server {
        listen 192.168.10.245:80;
        server_name blog.yan.com;
        location / {
            proxy_pass http://server_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
        access_log  logs/access_blog.log  main;
        
    }

keepalived配置

    keepalived腦裂說明:

     因爲某種緣由,致使兩臺高可用服務器對在指定的時間內,沒法檢測到對方心跳信息,各自取得資源服務權,而此時的兩臺高可用服務器都在正常運行,會致使同一個IP或者服務器在兩端同時存在而發生衝突,嚴重佔用同一個VIP使用戶寫入數據丟失。

     心跳線老化,

     高可用集羣同一個交換機故障

    防火牆規則

    網卡等信息配置不正確等

    解決辦法,監控備用服務器需IP信息,若是有則,主服務器出現問題。

#!/bin/bash

if [ `ip a s ens33|grep 192.168.10.244|wc -l` -ne 0 ]
then
    echo "keepalived is error!!!"
else
    echo "keepalived is ok!!!"
fi

  NGinx宕機實現,keepalived主備切換(配置文件標紅處就是執行腳本切換操做)

 #!/bin/bash
 #name: check_web.sh
 #desc: check nginx and kill keepalived 
 if [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt 2  ];then
      /etc/init.d/keepalived stop 
 fi
chmod +x /server/scripts/check_web.sh 

配置文件

#lb01
global_defs {
   router_id LVS_01        #惟一標示
}

  vrrp_script check_web {
    script "/server/scripts/check_web.sh"           #執行的腳本路徑
    interval 2                                      #兩秒檢查一次             
    weight 2                                        #觸發腳本優先級減去定義的weight下降優先級改成備服務
  }

vrrp_instance VI_1 {      #
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass admin
    }
    virtual_ipaddress {
     192.168.10.244/24 dev ens33 label ens33:1
    }
     track_script { #執行腳本
      check_web
     } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id
52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.10.245/24 dev ens33 label ens33:2 }

 

}

#lb02 
global_defs {
   router_id LVS_02
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass admin
    }
    virtual_ipaddress {
     192.168.10.244/24 dev ens33 label ens33:1
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 150 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass root
    }   
    virtual_ipaddress {
     192.168.10.245/24 dev ens33 label ens33:2
    }   

}
相關文章
相關標籤/搜索