Haproxy概念
Haproxy提供高可用性肖爵、負載均衡以及基于TCP和HTTP應用的代理,支持虛擬主機臀脏,它是免費劝堪、快速并且可靠的一種解決方案。Haproxy特別適用于那些負載特大的web站點揉稚,這些站點通常又需要會保持或七層處理秒啦。Haproxy運行在當前的硬件上,完全可以支持數(shù)以萬計的并發(fā)連接搀玖。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構(gòu)中余境,同時可以保護你的web服務器不被暴露到網(wǎng)絡上。
HAProxy實現(xiàn)了一種事件驅(qū)動, 單一進程模型巷怜,此模型支持非常大的并發(fā)連接數(shù)葛超。多進程或多線程模型受內(nèi)存限制 、系統(tǒng)調(diào)度器限制以及無處不在的鎖限制延塑,很少能處理數(shù)千并發(fā)連接绣张。事件驅(qū)動模型因為在有更好的資源和時間管理的用戶空間(User-Space) 實現(xiàn)所有這些任務,所以沒有這些問題关带。此模型的弊端是侥涵,在多核系統(tǒng)上,這些程序通常擴展性較差宋雏。這就是為什么他們必須進行優(yōu)化以 使每個CPU時間片(Cycle)做更多的工作芜飘。
安裝配置
- 下載
wget http://www.haproxy.org/download/1.9/src/haproxy-1.9.0.tar.gz
- 解壓
tar -zxvf haproxy-1.9.0.tar.gz
mv haproxy-1.9.0.tar.gz haproxy
cd haproxy
- 安裝
[root@localhost haproxy]# uname -a
Linux localhost 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
#TARGET:系統(tǒng)內(nèi)核版本, ARCH:系統(tǒng)架構(gòu)磨总,PREFIX:安裝目錄
make TARGET=linux3100 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
- 配置:
vim /usr/local/haproxy/haproxy.cfg
global
maxconn 4096 #默認最大連接數(shù)
daemon #以后臺形式運行harpoxy
#chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid #haproxy 進程PID文件
#debug
#quiet
nbproc 2 #設置進程數(shù)量
defaults
log global
mode http #默認的模式mode { tcp|http|health }嗦明,tcp是4層,http是7層蚪燕,health只會返回OK
option httplog #日志類別,采用httplog
option dontlognull #不記錄健康檢查日志信息
log 127.0.0.1 local0 #[日志輸出配置娶牌,所有日志都記錄在本機奔浅,通過local0輸出]
retries 3 #3次連接失敗就認為是服務器不可用,也可以通過后面設置
option redispatch #當serverId對應的服務器掛掉后诗良,強制定向到其他健康的服務器汹桦,以后將不支持
maxconn 2000
#contimeout 5000
#clitimeout 50000
#srvtimeout 50000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen admin_stats bind 0.0.0.0:8888 #管理頁面端口
mode http
stats uri /dbs
stats realm Global\ statistics
stats auth admin:admin #登錄帳號密碼
listen proxy-mysql bind 0.0.0.0:23306
mode tcp
#roundrobin #輪詢方式
#source #類似于nginx的ip_hash
#leastconn #最小連接數(shù)
#static-rr,表示根據(jù)權重
#balance leastconn #輪訓機制
option tcplog
option mysql-check user haproxy #在mysql中創(chuàng)建無任何權限用戶haproxy鉴裹,且無密碼
server MySQL1 47.52.231.211:3306 check weight 1 maxconn 2000
server MySQL2 47.52.160.124:3306 check weight 1 maxconn 2000 backup #備用機舞骆,主機不檔不啟用
option tcpka # 是否允許向server和client發(fā)送keepalive
#cookie 1表示serverid為1,check inter 1500 是檢測心跳頻率
#rise 2是2次正確認為服務器可用径荔,fall 3是3次失敗認為服務器不可用督禽,weight代表權重
運行
[root@localhost haproxy]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
至此haproxy便安裝啟動完成了可以通過訪問http://localhost:23306/ 來查看haproxy自帶統(tǒng)計頁面數(shù)據(jù)信息。
負載均衡算法
- roundrobin猖凛,表示簡單的輪詢赂蠢,每個服務器根據(jù)權重輪流使用,在服務器的處理時間平均分配的情況下這是最流暢和公平的算法辨泳。該算法是動態(tài)的虱岂,對于實例啟動慢的服務器權重會在運行中調(diào)整。
- static-rr菠红,表示根據(jù)權重第岖,建議關注;每個服務器根據(jù)權重輪流使用试溯,類似roundrobin蔑滓,但它是靜態(tài)的,意味著運行時修改權限是無效的遇绞。另外键袱,它對服務器的數(shù)量沒有限制。
- leastconn摹闽,表示最少連接者先處理蹄咖,建議關注;leastconn建議用于長會話服務付鹿,例如LDAP澜汤、SQL、TSE等舵匾,而不適合短會話協(xié)議俊抵。如HTTP.該算法是動態(tài)的,對于實例啟動慢的服務器權重會在運行中調(diào)整坐梯。
- source徽诲,表示根據(jù)請求源IP,建議關注;對請求源IP地址進行哈希谎替,用可用服務器的權重總數(shù)除以哈希值轩拨,根據(jù)結(jié)果進行分配。
通過腳本來啟動與關閉haproxy
- 編寫haproxy腳本
vim /etc/rc.d/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 10 90
#description:haproxy
BASE_DIR="/usr/local/haproxy"
ARGV="$@"
start()
{
echo "START HAPoxy SERVERS"
$BASE_DIR/sbin/haproxy -f $BASE_DIR/haproxy.cfg
}
stop()
{
echo "STOP HAPoxy Listen"
kill -TTOU $(cat $BASE_DIR/logs/haproxy.pid)
echo "STOP HAPoxy process"
kill -USR1 $(cat $BASE_DIR/logs/haproxy.pid)
}
case $ARGV in
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo "hactl.sh [start|restart|stop]"
esac
exit $ERROR
- 啟動與停止haproxy
[root@localhost haproxy]# service haproxy stop
STOP HAPoxy Listen
STOP HAPoxy process
[root@localhost haproxy]# ps -ef |grep haproxy |grep -v grep
[root@localhost haproxy]# service haproxy start
START HAPoxy SERVERS
參考
http://www.cnblogs.com/tae44/p/4717334.html
https://blog.csdn.net/nimasike/article/details/48048341
https://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html
https://www.cnblogs.com/Richardzhu/p/3344676.html