使用ip_hash時,若是有衆多用戶使用相同的公網地址去訪問同一個服務時,因爲這些用戶所使用的公網IP都爲同一個,HAproxy就會把他們調度到同一後端的服務器,由此可能形成後天的單臺服務器的壓力過大,所以須要其餘的方法來進行調度。
HAProxy能夠實現插入一層cookie,當用戶第一次訪問會查看是否有cookie,若是沒有就在響應報文中插入以程cookie返回給客戶端,當用戶再次訪問就會根據cookie來調度請求。lvs和nginx沒法實現html
爲當前server指定cookie值,實現基於cookie的會話黏性linux
cookie NAME [rewrite|insert|prefix] [indirect] [nocache] [postonly] [preserve] [httponly] [secure] [domain <domain>] [maxidle<idle>] [maxlife<life>] NAME: cookie名稱,用於持久鏈接 rewrite: 重寫。若是以前有cookie就會覆蓋了重寫,或插入到前綴上 insert: 插入 prefix: 前綴 nocache: 當client和haproxy之間有緩存存在時,不緩存cookie
修改配置文件,添加cooke選項nginx
listen web bind 172.20.27.20:80 mode http cookie SERVER-COOKIE insert indirect nocache #插入cookie選項 option forwardfor server web1 192.168.27.21:80 cookie web1 check inter 3000 fall 3 rise 5 #在後端服務器中拆入cookie的值 server web2 192.168.27.22:80 cookie web2 check inter 3000 fall 3 rise 5
使用curl來查看報文頭部web
[root@localhost ~]# curl -I www.mylinuxops.com HTTP/1.1 200 OK Server: nginx/1.17.0 Date: Tue, 04 Jun 2019 11:41:23 GMT Content-Type: text/html Content-Length: 8 Last-Modified: Tue, 04 Jun 2019 11:29:30 GMT ETag: "5cf6561a-8" Accept-Ranges: bytes Set-Cookie: SERVER-COOKIE=web2; path=/ #此爲插入的cookie信息 Cache-control: private
因爲curl命令沒法記錄cookie,接下來使用瀏覽器來訪問
後端