nginx負載均衡如何保證會話一致性

2021-10-24 17:52:47 字數 2341 閱讀 6570

nginx的負載均衡是依賴於upstream與反向**實現的。nginx預設採用輪訓選舉backend,如果是採用的session會話機制那麼就會出現會話不一致的問題。

upstream 語法

upstream name 

# 引數說明

domain|unix_socket: 網域名稱|unix套位元組

parameters:

weight:設定伺服器權重,預設為1

max_conns:限制到**伺服器的同時活動連線的最大數量 預設值為零,表示沒有限制

fail_timeout:預設10s,在10s內嘗試連線max_fails次後失敗則該節點不可用

max_fails:失敗次數 預設1

backup:將伺服器標記為備份伺服器。當主伺服器不可用時,將傳遞請求。

down:將伺服器標記為永久不可用。

route: 設定路由名稱。

# hash配置 1.7.2版本以上才支援

upstream name

# ip_hash

upstream backend

# 一致性hash 需要借助nginx安裝擴充套件ngx_http_consistent_hash

# 具體編譯過程見lnmp安裝

upstream backend

(1)使用客戶端儲存方式:cookie、jwt來做登入狀態驗證

(2)使用公共session儲存服務:redis或者memcached儲存session

(3)使用nginx-sticky-module 來保持會話

nginx1.5.7版本之後新增了sticky選項來保證會話的一致性。啟用會話關聯,將來自同一客戶端的請求在一組伺服器中傳遞給同一伺服器。 有三種方法:

# 語法:

;

當使用cookie方法時,有關指定伺服器的資訊將在nginx生成的http cookie中傳遞

upstream backend
第乙個引數設定要設定或檢查的cookie的名稱。 cookie值是ip位址和埠的md5雜湊或unix域套接字路徑的十六進製制表示。 但是,如果指定了server中指定了route引數,則cookie值將是route引數的值:

upstream backend 

#在上面的配置中,cookie中的srv_id將被設定為 a 或者 b

當使用route方式,**伺服器在收到第乙個請求時為客戶端分配路由。 此客戶端的所有後續請求將在cookie或uri中攜帶route資訊。 將此資訊與伺服器指令的「route」引數進行比較,以確定應**請求的伺服器。 如果沒有指定「route」引數,路由名稱將是ip位址和埠的md5雜湊或unix域套接字路徑的十六進製制表示。 如果指定的伺服器無法處理請求,則通過配置的平衡方法選擇新的伺服器

map $cookie_jsessionid

$route_cookie

map $request_uri

$route_uri

upstream backend

upstream backend
上游伺服器通過在響應中設定cookie「 examplecookie」來建立會話。帶有此cookie的其他請求將傳遞到同一伺服器。如果伺服器無法處理請求,則選擇新伺服器,就像尚未繫結客戶端一樣。

引數create和lookup指定分別指示如何建立新會話和搜尋現有會話的變數。可以多次指定兩個引數,在這種情況下,將使用第乙個非空變數。

會話儲存在共享記憶體區域中,其名稱和大小由zone引數配置。乙個1 mb的區域可以在64位平台上儲存大約4000個會話。在超時引數指定的時間內未訪問的會話將從區域中刪除。預設情況下,超時設定為10分鐘。

nginx負載均衡保持session會話一致

負載均衡時,為了保證同一使用者session會被分配到同一臺伺服器上,可以使用以下方法 1.使用cookie 將使用者的session存入cookie裡,當使用者分配到不同的伺服器時,先判斷伺服器是否存在該使用者的session,如果沒有就先把cookie裡面的sessoin存入該伺服器,實現ses...

Nginx負載均衡session會話保持方法

負載均衡時,為了保證同一使用者session會被分配到同一臺伺服器上,可以使用以下方法 1.使用cookie 將使用者的session存入cookie裡,當使用者分配到不同的伺服器時,先判斷伺服器是否存在該使用者的session,如果沒有就先把cookie裡面的sessoin存入該伺服器,實現ses...

nginx 負載均衡 Nginx負載均衡策略

nginx提供的負載均衡策略有2種 內建策略和擴充套件策略。內建策略為輪詢 預設 加權輪詢,ip hash,第三方。upstream mysvr1 輪詢 每個請求按照時間順序逐一的分配到每乙個後台伺服器上。如果某台伺服器宕機了,將會自動的剔除宕機的服務。nginx預設就是輪詢其權重都預設為1,伺服器...