Web 負載均衡解決方案——HAproxy+keepalived實作高可用負載均衡
HAProxy概念:
HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理,支援虛拟主機, 它是免費、快速并且可靠的一種解決方案。HAProxy特别适用于那些負載特大的web站點, 這些站點通常又需要會話保持或七層處理。HAProxy運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整 合進您目前的架構中, 同時可以保護你的web伺服器不被暴露到網絡上。
一, 拓撲
浮動IP eth0:1 192.168.10.31/23
|
+++++++++++++ +++++++++++++
+ HAproxy master + + HAproxy backup +
+++++++++++++ +++++++++++++
DIP eth0 192.168.10.30/23 DIP eth0 192.168.10.28/23
|______________________________|
______________|_______________
| |
| |
++++++++++++ ++++++++++++ ++++++++++++ ++++++++++++
+ WEB B + + WEB B + + WEB C + + WEB D +
eth0 192.168.10.2/23 eth0 192.168.10.3/23 eth0 192.168.10.4/23 eth0 192.168.10.5/23
二,配置
(一) 搭建環境
作業系統:CentOS release 6.3 x86-64核心:2.6.27.21-0.1-xen
cpu:Intel(R) Xeon(R) CPU E5620 @ 2.40GHz (雙核)
記憶體:4G
軟體版本:keepalived-1.2.1 ; haproxy-1.4.20
軟體庫環境:安裝開發工具和開發庫
[root@localhost ~]#yum -y groupinstall "Development libraries" "Development tools"
[root@localhost ~]#yum -y install gcc openssl-devel pcre-devel zlib-devel
(二) 安裝keepalived
[root@localhost ~]# tar -xvf keepalived-1.2.7.tar.gz
[root@localhost ~]# cd keepalived-1.2.7
[root@localhost keepalived-1.2.7]#./configure --prefix=/
Keepalived configuration
------------------------
Keepalived version : 1.2.7
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
SNMP support : No
Use Debug flags : No
顯示如上為編譯成功
[root@localhost keepalived-1.2.7]#make && make install
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id nginx1
}
vrrp_script chk_haproxy {
script "/etc/keepalived/chk_haproxy.sh"
interval 5
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
track_script {
chk_haproxy
virtual_ipaddress {
192.168.10.31/23
[root@localhost ~]# chkconfig keepalived on
[root@localhost ~]# chkconfig --list keepalived
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off
輔keepalived配置與主相同但在keepalived配置檔案中修改:
state BACKUP
priority 50
(三) 編寫haproxy的監控腳本,當haproxy無法啟動時關閉keepalived将服務切換到輔伺服器
[root@localhost ~]# vi /etc/keepalived/chk_haproxy.sh
#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ]
then /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
sleep 3
if [ `ps -C haproxy --no-header | wc -l ` -eq 0 ]
then /etc/init.d/keepalived stop
fi
fi
(四)安裝haproxy
[root@localhost ~]# tar -xvf haproxy-1.4.20.tar.gz
[root@localhost haproxy-1.4.20]# make TARGET=linux26 PREFIX=/usr/local/haproxy install
[root@localhost haproxy-1.4.20]# cd /usr/local/haproxy/
[root@localhost haproxy]# mkdir conf logs
[root@localhost haproxy]# cd conf/
[root@localhost conf]# vim haproxy.cfg
global
log 127.0.0.1 local3 info 需要在/etc/syslog.conf裡添加local3.* /var/log/haproxy.log
maxconn 4096
uid nobody
gid nobody
daemon
nbproc 4
defaults
log global
mode http
maxconn 2048 #最大連接配接數
retries 3 #3 次連接配接失敗就認為伺服器不可用
option httpclose #每次請求完畢後主動關閉http通道
option forwardfor #如果後端伺服器需要獲得用戶端真實ip需要配置的參數,可以從Http Header中獲得用戶端ip
option abortonclose #當伺服器負載很高的時候,自動結束掉目前隊列處理比較久的連接配接
option redispatch #serverId對應的伺服器挂掉後,強制定向到其他健康的伺服器
stats refresh 30 #統計頁面重新整理間隔
stats uri /haproxy #監控後端伺服器的頁面
stats auth admin:zgrtqgjxglzx #登陸監控頁面的使用者名和密碼
contimeout 5000 #連接配接逾時
clitimeout 50000 #用戶端逾時
srvtimeout 50000 #伺服器逾時
listen http-in
bind 0.0.0.0:80
mode http #http 表示七層
log global
option httplog
balance roundrobin #預設的負載均衡的方式,輪詢方式
balance leastconn
option httpchk GET /login.jsp #心跳檢測的檔案 此處不是項目裡真實的檔案
#option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server jsp-A 192.168.10.2:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5 #cookie 1 辨別 serverid 為 1
server jsp-B 192.168.10.3:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5 #check inter 2000 檢測心跳頻率
server jsp-C 192.168.10.4:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 #rise 2 2 次正确認為伺服器可用
server jsp-D 192.168.10.5:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5 #fall 5 5 次失敗認為伺服器不可用
最後将/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg 加入/etc/rc.loal 設定開機啟動
(五)啟動haproxy
[root@localhost conf]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
三、測試
在用戶端通路 HAproxy 測試
[root@localhost ~]# elinks –dump http:// 192.168.122.254
在客戶機通路HAproxy健康檢查頁面
<a href="http://s3.51cto.com/wyfs02/M02/12/2E/wKiom1L8UrDDwibKAARieA1aSWo951.jpg" target="_blank"></a>
本文轉自Devin 51CTO部落格,原文連結:http://blog.51cto.com/devingeng/1358701