haproxy 理論
它可以反向代理http/tcp協議,七層和四層的負載均衡解決方案
七層的負載解決方案是因為他們支持高級特性,工作在用戶空間,請求從用戶空間轉換到內核空間是非常浪費硬件資源的。
haproxy有一個monitor接口 可以查看連接狀況。
haproxy是一個單一進進程響應眾多請求的負載均衡,他可以開啟多進程,但是官方不建議開啟多進程。haproxy1.4 還可以根據url進行調度,這樣可以提高緩存命中率。這也是使用haproxy的重要原因之一。
還可以根據acl進行持久連接
環境
角色 主機 IP
haproxy centos6.5 192.168.1.105(橋接)
192.168.3.50(vmnet8) web1 centos6.5 192.168.3.100(vmnet8)
web2 cnntos6.5 192.168.3.101(vmnet8)
web1和web2的網關指向192.168.3.50
一.配置haproxy
[root@localhost ~]# yum -y install haproxy
配置文件
haproxy配置文件有兩部分
(1)全局配置:
global 設置進程屬性的設定
proxies 代理的配置
defaults
frontend(前端)
backend(后端)
listen(整合前端和后端的)
(2)首先我們通過frontend+backend的方法實現haproxy的負載均衡
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
#在文件最后定義后端資源組
backend web
balance roundrobin
server web1 192.168.3.100:80 check
server web2 192.168.3.101:80 check
解釋:web為定義的資源組的名稱
roundrobin:輪詢調度算法
web1和web2都為節點的名稱,可以自定義,這里的名字用於記錄日志使用。
check為健康狀態檢查
#定義前端(相當於nginx中的server)
frontend webserver *:80
default_backend web
解釋:
webserver:為前端的名稱,可以定定義
default_backend:將監聽在80端口的請求轉發給名稱為web的資源組
啟動haproxy
[root@localhost ~]# service haproxy start
正在啟動 haproxy: [確定]
在兩個節點中添加index.html,訪問http://192.168.3.50,看到輪詢效果。
健康狀態檢查。
停止掉其中的任意一個web服務,會發現,故障的節點將不會被調度。
(3)啟動日志記錄
[root@localhost ~]# vim /etc/rsyslog.conf
13 $ModLoad imudp
14 $UDPServerRun 514
17 $ModLoad imtcp
18 $InputTCPServerRun 514
啟用13,14,17,18行
在62添加一行日志位置
62 local2.* /var/log/haproxy.log
這是全局日志,
我們可以在每個frontend中定義單獨的日志文件
格式:
log 127.0.0.1 local3
然后在rsyslog中定義local3及其位置
然后在訪問,就會出現日志
4.通過source(ip_hash)算法,將同一客戶端的請求到同一台server上去。
基於上邊的配置,修改一下算法
backend web
balance source
server web1 192.168.3.100:80 check
server web1 192.168.3.101:80 check
再次訪問頁面時候,會發現只停留在一個server上面
5.還有一種就是基於url路徑轉發。
backend web
balance uri
server web1 192.168.3.100:80 check
server web1 192.168.3.101:80 check
只要訪問的是同一個路徑,會被轉發到同一個server上
二、指定haproxy的工作模式
模式有兩種
http模式
定義應用層數據深入分析,因此支持7層的過濾。處理,轉換等機制
tcp模式
haproxy在客戶端和應用服務器之間建立一個全雙工的連接,不會對應用層協議 做任何檢查。ssl mysql 等都應該使用此模式。
指定模式使用mode參數
三、啟用狀態監控
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
backend web
balance uri
stats enable
server web1 192.168.3.100:80 check
server web1 192.168.3.101:80 check
訪問以下地址
http://192.168.3.50/haproxy?stats
(2)啟用認證才能訪問狀態監控界面
backend web
balance uri
stats enable
stats auth admin:admin
server web1 192.168.3.100:80 check
server web1 192.168.3.101:80 check
(3)啟用管理功能
backend web
balance uri
stats enable
stats auth admin:admin
stats admin if TRUE
server web1 192.168.3.100:80 check
server web1 192.168.3.101:80 check
server backup 127.0.0.1:8010 check backup
就是說你通過認證才能使用管理功能
四、設置備用服務器(錯誤頁面服務器)
當所有server宕機,請求會轉發至錯誤錯誤頁面
准備一台單獨的web服務器,或者是haproxy本身,但是端口不能使用80
[root@localhost haproxy]# vim /etc/httpd/conf/httpd.conf
Listen 8010
[root@localhost html]# vim /var/www/html/index.html
<h1>error</h1>
vim haproxy.cfg
backend web
balance uri
stats enable
stats auth admin:admin
server web1 192.168.3.100:80 check
server web1 192.168.3.101:80 check
server backup 127.0.0.1:8010 check backup
然后我們宕掉兩台web,在訪問3.50 會發現頁面會跳轉至error頁面