LVS持久化與超時時間問題分析

2022-02-03 22:09:40 字數 2233 閱讀 5189

可以看到,我把web伺服器分成了兩組,一組為web01,web02,掛在了openresty01下,另外一組:web03,web04,web05掛在了openresty02下;最後搭建完成,演示時,我分別使用了curl和瀏覽器,在curl演示時很正常,請求能輪流分到每個web容器,但在瀏覽器中演示時,重新整理時顯示輪流某一組web,而不是在所所有web應用輪流,我當時以為是瀏覽器快取導致,所以新開了個頁籤;

我們來看一下:

這兩天又深入學習了lvs的持久化;我之前在keepalived中配置了持久化時間(persistence_timeout)為0,再加上負載均衡策略(lb_algo)配置成rr,就能夠輪流rs,其實不然,除了這些之外,還有連線空閒的超時時間;

2. 乙個連線建立後處於空閒狀態的超時時間

- tcp連線的空閒超時時間

- lvs收到客戶端fin訊息的超時時間

- udp的超時時間

設定超時時間通過 ipvsadm --set tcp tcpfin udp 命令;檢視連線狀態使用ipvsadm -lnc命令檢視

經過觀察分析,curl命令請求時,每次請求都從不同的埠發請求,所以每次lvs都當做乙個新的客戶端來處理,而且curl請求完後,就關閉了tcp連線;而瀏覽器則不然,每次重新整理很可能還是以同乙個埠發出請求,而且tcp連線也會保持,所以lvs就會認為是同乙個客戶端,每次重新整理就會指向同一rs,即openresty,openresty再將請求輪流分到下一層的web應用;

我們來看一下瀏覽器重新整理的情況:

重新整理後看一下lvs伺服器上連線狀態:

可見經過多次重新整理(七八次),tcp連線共有三個,兩個處於連線中狀態,乙個處於fin_wait狀態;

再來看一下curl命令執**況:

再看一下lvs伺服器上連線狀態

可見連線都處於fin_wait狀態

將tcp/tcpfin/udp超時時間都設定為1s

[root@lvs02 /]# ipvsadm --set 1 1 1
再看來瀏覽器重新整理情況:

可以看見,請求比較均勻的分到了web應用。

再到lvs伺服器檢視連線狀態時,顯示為空,因為1s時間比較短,很快就超時了;

修改keepalived配置檔案,lb_kind配置成nat,再在其下新增一行nat_mask

255.255.255.0,rs伺服器上不用再繫結vip位址、抑制arp廣播;需要配置乙個預設閘道器

route add default gateway 192.168.254.100
找到一篇文章解決方法,使用openvpn方式,我沒有實踐過,可作大家參考。

完美解決 macos 下不能 ping docker 容器的問題

後來我是在虛擬機器中安裝的docker,mac中能ping通過虛擬機器,虛擬機器能ping通docker,但mac不能ping通過docker,如何解決?

在mac中新增一條靜態路由,將docker容器的ip都轉到虛擬機器ip

sudo route -n add -net 192.168.254.0/24 192.168.253.129

也可以: sudo route -n add -net 192.168.254.0 -netmask 255.255.255.0 192.168.253.129,效果一樣

參考:

sentinel與nacos持久化

在流量控制那篇文章中,我們在sentinel中配置好a服務對應的限流策略後,如果a服務重啟就會導致sentinel中配置好的策略丟失,所以需要持久化操作。流量控制可以有三種方法配置 一種是在sentinel控制台進行配置 服務重啟則配置的策略丟失 一種是在 中進行編寫控制,還有就是從nacos中讀取...

Python序列化與持久化

資料持久化可以將資料儲存到檔案中,資料庫中。儲存到檔案中可以是普通txt檔案,csv檔案等,資料庫可以是sql資料庫mongodb資料庫等 變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在python中叫pickling 變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpicklin...

可持久化陣列與可持久化並查集

可持久化陣列 維護這樣的乙個長度為 n 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操作2,即為生成乙個完全一樣的版本,不作任何改動 就會生成乙個新的版本。版本編號即為當前操作的編號 從1開始編號,版本0表示初始狀態陣列...