上篇文章講到了負載均衡的相關理論知識,這篇文章我打算講講實踐方法以及實踐中遇到的問題linux
方案:haproxy http層負載均衡web
安裝一個haproxy服務,兩個web服務redis
haproxy:192.168.1.227:80算法
web1 http://192.168.1.226:8081/loginvim
web2 http://192.168.1.246:8888/login後端
web服務自行準備,文章中就不說了瀏覽器
負載均衡算法爲輪詢調度服務器
會話保持實現方式爲cookie識別,插入cookiecookie
優勢:session
1 配置簡單
2 提供會話保持功能
3 性能不錯
安裝
tar -zxvf haproxy-1.49.tar.gz
cd haproxy-1.4.9
make TARGET=linux26 PREFIX=/haproxy
make install PREFIX=/haproxy 建立日誌目錄 mkdir /home/haproxy/logs/ 建立配置文件目錄 mkdir /etc/haproxy/
PREFIX=/haproxy : 安裝目錄前綴
啓動程序將安裝在 /haproxy/sbin/haproxy
配置
vim /etc/haproxy/haproxy.cfg
global log 127.0.0.1 local3 #log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #chroot /usr/local/haproxy #chroot /home/haproxy uid 502 gid 502 daemon nbproc 1 pidfile /home/haproxy/logs/haproxy.pid #debug #quiet defaults log global mode http option httplog option dontlognull option forwardfor option redispatch log 127.0.0.1 local3 retries 3 maxconn 32000 balance roundrobin stats uri /haproxy-stats contimeout 5000 clitimeout 50000 srvtimeout 50000 listen web_proxy *:80 appsession JSESSIONID len 52 timeout 3h #插入cookie的方式 cookie SRV insert indirect nocache #模式有http tcp health mode http stats enable stats hide-version #查看狀態 stats uri /haproxy-stats stats refresh 10s monitor-uri /haproxy_test #負載均衡方案:輪調 balance roundrobin option httpclose #後端能夠獲取客戶端的真實ip option forwardfor #健康檢查 option httpchk HEAD /login HTTP/1.0 #option httpchk GET /ping.jsp #後端真實服務 server webA 192.168.1.226:8081 cookie A check server webB 192.168.1.246:8888 cookie B check
這裏注意配置檢查地址
option httpchk HEAD /login HTTP/1.0
啓動
/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
查看進程
ps -ef|grep haproxy
關閉進程
kill –9 pid
查看監控頁面
http://192.168.1.227/haproxy-stats
以下圖:注意狀態一欄顯示200,若是不是則表示web服務器未啓動,或者健康檢查連接不可訪問
測試
而後打開不一樣的瀏覽器,模擬用戶訪問
會看到
證實請求被分發到不一樣的web服務器了
查看cookie
cookie被加入了SRV=A
會話保持的流程
1.客戶端首次請求,通過haproxy到web服務端時,web服務端set-cookie並響應到haproxy
2.haproxy在cookie後插入SRV=A,並響應客戶端
3.客戶端第二次請求,通過haproxy時,haproxy將srv後綴去掉,而後請求服務端
總結
該方案解決的問題
1.負載均衡,並解決web服務的單點故障
2.會話保持
存在的缺點
1.web服務器的session保存存在單點故障,即其中一臺web服務器宕機以後,存儲在上面的session也會丟失
2.負載均衡服務器存在單點故障