Nginx的反向代理與負載均衡

来源:http://www.cnblogs.com/clsn/archive/2017/12/17/8051514.html
-Advertisement-
Play Games

1.1 集群是什麼 簡單地說,集群就是指一組(若幹個)相互獨立的電腦,利用高速通信網路組成的一個較大的電腦服務系統,每個集群節點(即集群中的每台電腦)都是運行各自服務的獨立服器。這些伺服器之間可以彼此通信,協同向用戶提供應用程式、系統資源和數據,並以單一系統的模式加以管理。當用戶客戶機請求集群 ...


1.1 集群是什麼

  簡單地說,集群就是指一組(若幹個)相互獨立的電腦,利用高速通信網路組成的一個較大的電腦服務系統,每個集群節點(即集群中的每台電腦)都是運行各自服務的獨立服器。這些伺服器之間可以彼此通信,協同向用戶提供應用程式、系統資源和數據,並以單一系統的模式加以管理。當用戶客戶機請求集群系統時,集群給用戶的感覺就是一個單一獨立的伺服器,而實際上用戶請求的是一組集群伺服器。

  打開谷歌、百度的頁面,看起來好簡單,也許你覺得用幾分鐘就可以製作出相似的網頁,而實際上,這個頁面的背後是由成千上萬台伺服器集群協同工作的結果。而這麼多的伺服器維護和管理,以及相互協調工作也許就是讀者你未來的工作職責了。

  若要用一句話描述集群,即一堆伺服器合作做同一件事,這些機器可能需要整個技術團隊架構、設計和統一協調管理,這些機器可以分佈在一個機房,也可以分佈在全國全球各個地區的多個機房。

1.2 為什麼要有集群

  高性能、價格有效性、可伸縮性、高可用性

  透明性、可管理性、可編輯性

1.2.1 集群種類

  負載均衡集群 LB 解決調度問題

  高可用集群  HA 解決單點故障問題(keeplived

  高性能計算集群         HP 、網路計算集群 GC

1.2.2 硬體設備

  F5 設備   A10

1.2.3 軟體

  nginx (7層  1.9版本之後支持4層)、LVS (4層)、HAproxy (4層 7層)

1.2.4 負載均衡概念說明

  對用戶的訪問請求進行調度管理

  對用戶的訪問請求進行壓力分擔

 

1.2.5 反向代理

  接收用戶請求代替用戶向後端訪問

  反向代理與數據轉發的區別

1.2.6 壓力測試的方式

  ab (apache里的命令) 

  通過   yum install httpd-tools   獲得

1.3 nginx反向代理實踐

1.3.1 地址規劃說明

HOSTNAME

IP

說明

lb01

10.0.0.5

Nginx 主負載伺服器

lb02

10.0.0.6

nginx 輔負載伺服器

web01

10.0.0.8

web01伺服器

web02

10.0.0.7

web02伺服器

web03

10.0.0.9

web03伺服器

說明:以上為實際生產架構負載實現規劃內容

ip命令說明

ip address show  查看ip地址
ip route show  查看路由信息

1.3.2 反向代理與數據轉發的區別

 

1.3.3 安裝部署nginx過程(安裝命令集)

yum install -y pcre-devel openssl-devel
mkdir -p /server/tools
cd /server/tools
wget -q http://nginx.org/download/nginx-1.10.3.tar.gz
ls -l nginx-1.10.3.tar.gz
useradd www -s /sbin/nologin -M
tar xf nginx-1.10.3.tar.gz
cd nginx-1.10.3
./configure  --user=nginx --group=nginx --prefix=/application/nginx-1.10.3 --with-http_stub_status_module  --with-http_ssl_module
make
make install
ln -s /application/nginx-1.10.3 /application/ngin

1.3.4 編寫nginx配置文件(統一web伺服器配置)

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    server {
        listen       80;
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
      access_log  logs/access_bbs.log  main;
    }        
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        access_log  logs/access_www.log  main;
    }
}

1.3.5 統一nginx測試環境 (web文件)

mkdir -p /application/nginx/html/{www,bbs}
for name in www bbs; do echo $name `hostname` >/application/nginx/html/$name/xiaoxinxin.html;done
for name in www bbs; do cat /application/nginx/html/$name/xiaoxinxin.html;done

1.3.6 測試

[root@lb01 ~]# curl -H host:bbs.etiantian.org  10.0.0.8/xiaoxinxin.html
bbs web01
[root@lb01 ~]# curl -H host:bbs.etiantian.org  10.0.0.7/xiaoxinxin.html
bbs web02
[root@lb01 ~]# curl -H host:bbs.etiantian.org  10.0.0.9/xiaoxinxin.html
bbs web03
[root@lb01 ~]# curl -H host:www.etiantian.org  10.0.0.8/xiaoxinxin.html
www web01
[root@lb01 ~]# curl -H host:www.etiantian.org  10.0.0.7/xiaoxinxin.html
www web02
[root@lb01 ~]# curl -H host:www.etiantian.org  10.0.0.9/xiaoxinxin.html
www web03

1.3.7 配置負載服務文件

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;                                  
    upstream server_pools {
        server 10.0.0.7:80;
        server 10.0.0.8:80;
        server 10.0.0.9:80;
    } 
    server {
        listen 80;
        server_name bbs.etiantian.org;
        location / {
            proxy_pass http://server_pools;
        }
    }

1.3.8 測試訪問

[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html
bbs web03
[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html
bbs web02
[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html
bbs web01

1.4 nginx中常用模塊說明

ngx_http_status_module
ngx_http_ssl_module
ngx_http_log_module
ngx_http_upstream_module
ngx_http_proxy_module

1.4.1 模塊調度演算法

      ①. 定義輪詢調度演算法-rr-預設調度演算法

      ②. 定義權重調度演算法-wrr

      ③. 定義靜態調度演算法-ip_hash

      ④. 定義最小的連接數-least_conn

1.4.2 nginx反向代理相關兩個模塊

    upstream 模塊 類似與一個池塘,將nginx節點放置到池塘中

    proxy模塊  用池塘裡面的nginx節點,利用pr oxy進行調用

1.4.3 upstream模塊核心參數簡介

    weight 權重

    max_fails 拋得次數

    fail_timeout 失敗的超時時間

    backup  備份

1.4.4 weight 參數實踐 (權重)

  upstream 模塊只能在http區塊里

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream server_pools{
         server 10.0.0.7:80 weight=1;
         server 10.0.0.8:80 weight=2;
    }
    server{
       listen 80;
       server_name bbs.etiantian.org;
       location / {
          proxy_pass http://server_pools;
       }
    }
}

測試

[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web02 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web02 www

1.4.5 其他的參數說明

  max_fails    失敗的嘗試次數

  fail_timeout 失敗後的再次嘗試時間

  backup 備份節點:所有的節點都掛掉後數據才會請求web01

server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=10 ;
server 10.0.0.8:80 weight=2 max_fails=3 fail_timeout=10 backup;

測試,將web02停掉

[root@test tools]# curl 10.0.0.5
web02 www
[root@test tools]# curl 10.0.0.5
web02 www

停掉web02後

[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5

1.4.6 訪問抓包

用戶請求報文

 

負載均衡請求報文

 

說明:

    hosts 主機頭不同,未配置proxy_set_header Host $host 參數,在負載均衡訪問的時候會不帶hosts信息。

1.4.7 upsrteam參數詳細說明

upstream模塊內參數

參數說明

server 10.0.10.8:80

負載均衡後面的RS配置,可以是IP或功能變數名稱,如果埠不寫,預設是80埠。

高併發場景下, IP可換成功能變數名稱,通過 DNS做負載均衡。

weigth=1

代表伺服器的權重,預設值是1。權重數字越大表示接受的請求比例越大。

max_fails=3

Nginx嘗試連接後端主機失敗的次數,這個值是配合 proxy_next_upstreamfastcgi_next_upstreammemcached_next_upstream 這三個參數來使用的。當nginx接收後端伺服器返回這三個參數定義的狀態碼時,會將這個請求轉發給正常工作的後端伺服器,例如404502503 Max_fails的預設值是1 ;

企業場景下建議2-3次。如京東1次,藍汛10次,根據業務需求去配置

fail_timeout=10s

max_fails定義的失敗次數後,距離下次檢查的間隔時間,預設是10s ;如果max_fails5 ,它就檢測5次,如果5次都是502,那麼,它就會根據fail_timeout的值,等待10s再去檢查,還是只檢查一次,如果持續502,在不重新載入 Nginx配置的情況下,每隔10s都只檢查一次。常規業務2~3秒比較合理,比如京東3秒,藍汛3秒,可根據業務需求去配置。

backup

熱備配置(RS節點的高可用),當前面激活的RS都失敗後會自動啟用熱備RS這標誌看這個伺服器作為備份伺服器,若主伺服器全部宕機了,就會向它轉發請求。

註意:當負載調度演算法為ip_hash時,後端伺服器在負載均衡調度中的狀態不能是weightbackup

down

這標志著伺服器永遠不可用,這個參數可配合ip_hash使用;類似與註釋。

  weight :調節伺服器的請求分配權重。1.4.8 上述命令的說明如下:

    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 根據自己項目需求編寫,僅供參考 個人建議:使用Excel模板進行導出操作。儘量避免自己生成Excel(既繁瑣又容易出BUG)。大多情況下導出Excel都是固定格式,使用模板導出會方便很多。 ...
  • 原文出自 "Rui Figueiredo" 的博文 "《External Login Providers in ASP.NET Core》" (本文很長) 摘要:本文主要介紹了使用外部登陸提供程式登陸的流程,以及身份認證的流程。 為了能夠使用google、facebook、twitter、微博等外部 ...
  • .net鏈接oracle資料庫時,當鏈接字元串中pooling=true時,視圖結構變更時程式報錯問題,還請高手指教 現象: 鏈接字元串: 註意:這裡pooling=true; 測試視圖: 執行的SQL語句為: select * from vi_tbtest; 填充DataTable代碼為: 第一次 ...
  • 今天把剛剛學習的到memcached寫在博客里,以免以後自己遺忘。 1.首先下載Memcached資料庫服務文件,這是我下載好的這個memcached文件。 2.接下來就啟動這個exe。通常我需要講這個memacached.exe 註冊成一個服務,也可以雙擊執行這個exe,但是通過雙擊打開的命令視窗 ...
  • 如圖,樓主的pro久未升級,版本號已經很低。某天一時興起,想體驗最新版本的OS X。就很開心的進行軟體更新: 依據iOS上的APP、系統升級經驗,這是一個非常自然、毫無難度的過程,哪知道,今天一直卡在如下提示: 問題在於:目前最新版本的OS X已經到10.13,蘋果也沒有提供10.11的下載,這該如 ...
  • 今天按照網上和書上的要求,將目前的kubernetes網路換成flannel。其實配置起來還是很簡單的,但是一旦出現了問題,將很難解決。 配置方法我這邊不給出了。因為網上這樣的教程一大把,在說下去也無意義。但是錯誤還是遇見了幾個。 我的環境:centos7(master+2個node )+ etcd ...
  • 第1章 keepalived服務說明 1.1 keepalived是什麼? Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務( ...
  • 測試系統:centos7 修改連接埠 修改配置文件 去掉port 22的註釋,添加新的埠配置 自定義埠選擇建議在萬位的埠(如:10000 65535之間) 不要直接刪除port 22,以免遺忘新SSH埠或者埠不能訪問,我們還能繼續訪問SSH,保存並退出 重啟SSH配置 重新連接VPS並刪 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...