摘要:負載均衡嚴格來說,僅僅是作為反向代理的使用的,但是因為這個反向代理功能表現的效果是負載均衡機器的效果,因此負載均衡是特殊的反向代理。
反向代理
反向代理指的是以代理服務器接收用戶的的訪問請求,代理用戶向內部服務器重新發起請求,最后把內部服務器的響應信息返回給用戶。這樣,代理服務器對外就表現為一臺服務器,而訪問內部服務器的客戶端用的就是代理服務器,而不是真實網站訪問用戶。
為什么使用反向代理可以起到保護網站安全的作用,因為任何來自Internet的請求都必須先經過代理服務器。
通過緩存靜態資源,加速Web請求。
實現負載均衡
反向代理例子環境說明
假如有AB兩個服務器。A服務器提供web資源,并且只給內網訪問。B服務器有兩塊網卡,一塊與A服務器在一個內網,以塊是外網。此時,用戶C想直接訪問A服務器是行不通的。這時就可以通過B服務器代理用戶C的請求去訪問A服務器了。
hostname | 網卡 | IP | 說明 |
---|---|---|---|
moli-04 | ens33 | 192.168.30.6 | 內網IP,代理服務器 |
moli-04 | ens37 | 192.168.93.129 | 外網IP,代理服務器 |
moli-05 | ens33 | 192.168.30.7 | 內網服務器 |
兩臺機器都安裝nginx
moli-05服務器訪問是wordpress博客,域名blog.syushin.org
虛擬機實驗環境,就都關閉防火墻了
配置虛擬主機
moli-04機器上編輯虛擬主機配置文件,內容如下:
[root@moli-04 extra]$ cat blog.syushin.org.conf server{ listen 80; server_name blog.syushin.org; location / { proxy_pass http://192.168.30.7; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
更改hosts文件
windows上修改hosts文件,添加配置
192.168.93.129 blog.syushin.org
瀏覽器測試
訪問地址是192.168.93.129,出現的界面的05機器的頁面,配置成功。
對用戶的訪問請求進行調度管理
對用戶的訪問請求進行壓力分擔
負載均衡集群在運行時,一般是通過一個或者多個前端負載均衡器將客戶訪問請求發到后端的一組服務器上。
Nginx負載均衡嚴格來說,Nginx僅僅是作為Nginx Proxy反向代理的使用的,但是因為這個反向代理功能表現的效果是負載均衡機器的效果,因此nginx負載均衡是特殊的反向代理。
實現Nginx負載均衡的主要組件:
Nginx模塊 | 說明 |
---|---|
ngx_http_proxy_module | proxy代理模塊,用于把請求發送給服務器節點或upstream服務器池 |
ngx_http_upstream_module | 負載均衡模塊,可以實現網站的負載均衡功能及節點的健康檢查 |
ngx_http_upstream_module模塊支持的代理方式有proxy_pass,fastcgi_pass等,主要使用proxy_pass。
upstream模塊允許nginx定義一組或多組節點服務器組,使用時通過proxy_pass代理把網站的請求發送到定義好的對應的節點組中。
示例:創建節點服務器池
upstream blog { server 192.168.30.5:80 weight=5; server 192.168.30.6:81 weight=10; server 192.168.30.7:82 weight=15; }
upstream:創建節點服務器組的關鍵字,必須有;
blog:節點服務器組的名字,必須有,可自定義名字;
server:關鍵字,后面可加IP或者域名或者IP:端口,不指定端口默認80;
weight:權重,數值越大被分配的請求越多。默認為1
設置節點服務器的狀態值除了weight之外,還有:
max_fails:允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
fail_timeout:max_fails次失敗后,暫停的時間。
down:表示當前的節點服務器不參與負載,標志機器永遠不可用,可配合iP_hash使用
backup:其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
使用域名的upstream
upstream blog2{ server www.syushin.com weight=5; server blog.syushin.org down; server blog.syushin.cc backup; }調度算法
rr輪詢(默認調度算法,靜態調度算法)
按客戶端請求順序把客戶端的請求逐一分配到不同的后端節點服務器。
wrr(權重輪詢,靜態調度算法)
在rr輪詢的基礎上加上權重,使用該算法的時候,權重和用戶訪問成正比,權重值越大,被轉發的請求就越多。
比如有30個請求,2臺服務器A(10.0.0.1)和B(10.0.0.2),如果希望A處理10個請求,B處理20個請求,可以這樣定義:
upstream pools{ server 10.0.0.1 weight=1; server 10.0.0.2 weight=2; }
ip_hash(靜態調度算法)
每個請求按客戶端IP的hash結果分配,當新的請求到達,先將客戶端IP通過哈希算法哈希出一個值,在隨后的分配客戶端請求中,客戶IP的哈希值只要相同,就會被分配到同一臺服務器。
upstream blog_pool{ ip_hash; server 192.168.30.5:80; server 192.168.30.6:8090; }
注意:當使用ip_hash時,不能有weight和backup。
least_conn算法
least_conn算法會根據后端服務器的連接數來覺得分配情況,哪臺服務器連接數最少就分發多的請求。
調度算法除了上面所列的(常用)還有很多,就不一一列舉了。
http_proxy_module模塊http_proxy_module可以將請求轉發到另外一臺服務器,在反向代理中,會通過location功能匹配指定的URI,然后把收到符合匹配的URI的請求通過proxy_pass拋給定義好的upstream節點池。
http_proxy模塊參數
參數 | 說明 |
---|---|
proxy_set_header | 設置http請求header項傳給后端服務器節點,例如:可實現讓代理后端的服務器節點獲取訪問客戶端用戶的真實IP地址 |
client_body_buffer_size | 用于指定客戶端請求主體緩沖區大小 |
proxy_connect_timeout | 表示反向代理后端節點服務器連接的超時時間,即發起握手等候響應的超時時間 |
proxy_send_timeout | 表示代理后端服務器的數據回傳時間,即在規定時間內后端服務器必須傳完所有數據,否則nginx將斷開這個連接 |
proxy_read_timeout | 設置nginx從代理的后端服務器獲取信息的時間,表示連接建立成功后,nginx等待后端服務器的響應時間,其實是nginx已經進入后端的排隊之中等候處理的時間 |
proxy_buffer_size | 設置緩沖區大小,默認該緩沖區大小等于指令proxy_buffers設置的大小 |
proxy_buffers | 設置緩沖區的數量和大小,nginx從代理的后端服務器獲取的響應信息,會設置到緩沖區 |
proxy_busy_buffers_size | 用于設置相同很忙時可以使用的proxy_buffers大小,官方推薦的大小為 proxy_buffers * 2 |
proxy_trmp_file_write_size | 指定proxy緩存臨時文件的大小 |
proxy_pass使用
格式:proxy_pass URL;
示例如下:
proxy_pass http://blog.syushin.com/; proxy_pass http://192.168.30.7:8080/uri; proxy_pass http://tmp/www.sock;
URL可以是域名,IP地址也可以是socket文件。
對于proxy_pass的配置有幾點需要注意:
示例1
location /upload/ { proxy_pass http://192.168.30.7; }
示例2
location /upload/ { proxy_pass http://192.168.30.7/; # 注意多了一個斜桿 }
示例3
location /upload/ { proxy_pass http://192.168.30.7/blog/; }
示例4
location /upload/ { proxy_pass http://192.168.30.7/blog; }
假如server_name為blog.syushin.com,當請求http://blog.syushin.com/uploa...,上面示例1-4的請求結果是:
示例1:http://192.168.30.7/upload/index.html 示例2:http://192.168.30.7/index.html 示例3:http://192.168.30.7/blog/index.html 示例4:http://192.168.30.7/blogindex.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40366.html
摘要:今天無聊,把上幾天自己測試的作反向代理負載均衡的步驟記錄下來,以供學習記錄。反向代理,我個人理解是通過一臺反向代理服務器,把客戶端的把有請求按照一定的規則分發給后臺的服務器。 今天無聊,把上幾天自己測試的nginx作反向代理負載均衡的步驟記錄下來,以供學習記錄。反向代理,我個人理解是通過一臺反向代理服務器,把客戶端的把有請求按照一定的規則分發給后臺的服務器。nginx作反向代理服務器的...
閱讀 3036·2021-11-02 14:40
閱讀 849·2019-08-30 15:53
閱讀 1267·2019-08-30 15:53
閱讀 3264·2019-08-30 13:53
閱讀 3308·2019-08-29 12:50
閱讀 1138·2019-08-26 13:49
閱讀 1869·2019-08-26 12:20
閱讀 3666·2019-08-26 11:33