HAproxy七層負載均衡
實驗環境:192.168.1.27 haproxy
192.168.1.3 WEB1
192.168.1.4 WEB2
1. haproxy下載安裝
#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.19.tar.gz
#tar zxvf haproxy-1.4.19.tar.gz
# cd haproxy-1.4.19
# make TARGET=linux26
# make install
2. 配置
Vi /etc/haproxy.cfg
global
log 127.0.0.1 local0 info #日誌[err warning info debug]
maxconn 4096 #單個程序的最大連線數
user haproxy
group haproxy
daemon #守護程序執行
#nbproc 2 #作為守護程序執行時,建立多少個程序
defaults
log global
mode http
option dontlognull #不記錄空連線
option log-health-checks #記錄健康檢測日誌
retries 3 #連線失敗後的重連次數
option redispatch #在連線失敗或斷開情況下,允許當前會話被重新分發
maxconn 2000 #最大連線數
timeout connect 5000ms
timeout client 30000ms
timeout server 30000ms
listen stats 192.168.1.27:8888 #haproxy統計頁面
stats refresh 30s
stats hide-version
mode http
transparent
stats uri / haproxy
stats realm Haproxy \ statistic
listen web 0.0.0.0:80
mode http #http七層負載模式
balance roundrobin #伺服器分配演算法
option tcpka
option httpchk GET /123.php #用於檢查服務是否正常的頁面
cookie SERVERID insert indirect #允許插入serverid到cookie中serverid後面可自定義
server web1 192.168.1.3:80 weight 1 check inter 5s rise 2 fall 2 cookie A
server web2 192.168.1.4:80 weight 1 check inter 5s rise 2 fall 2 cookie B
#後臺伺服器
#weight 伺服器權重
#check port 檢測埠
#inter 設定連續的兩次健康檢測間的時間
#rise 指定多少次連線成功的健康檢測後,可認定該服務可用
#fall 指定多少次失敗的健康檢測後,可認定該服務故障
3. haproxy七層負載功能測試
以下是網上找的一個session檢測頁面
<?php
session_start();
$_SESSION['time'] =date("Y:m:d:H:s",time());
echo "time"."<font color=red>".$_SESSION['time']."</font>"."<br>";
echo "ip adress"."<font color=red>".$_SERVER['SERVER_ADDR']."</font>"."<br>";
echo "local adress"."<font color=red>".$_SERVER['SERVER_NAME']."</font>"."<br>";
echo "SESSIONNAME"."<font color=red>".session_name()."</font>"."<br>";
echo "SESSIONID"."<font color=red>".session_id()."</font>"."<br>";
?>
在192.168.1.3和192.168.1.4的web目錄中各上傳一個該PHP頁面後訪問:
可以看到三次訪問結果,訪問的真實伺服器IP都是192.168.1.4 ,SESSIONID都是dm22o79o2r28guir5loap95ba1。 可以說明haproxy已成功通過cookie儲存了SessionID,使得同一客戶端每次訪問都是同一個Session。
haproxy通過頁面檢測伺服器和統計1. 狀態檢視
在/etc/haproxy.cfg配置檔案中的option httpchk GET /phpmyadmin/index.php這一行即為通過某一頁面來檢測伺服器是否正常。還可以開啟http://192.168.1.27:8888/統計面可以看到當前連線數、最大連線數、傳送/接收位元組、伺服器狀態等資訊。
2. 測試伺服器故障檢測功能
更改檢測頁面名稱,模擬頁面無法訪問
統計頁面WEB1的Status顯示為DOWN,並呈紅色預警
更改檢測頁面回原名
統計頁面顯示WEB1的Status顯示為UP