1. 程式人生 > >HAProxy詳解(三):基於虛擬主機的HAProxy負載均衡系統配置實例【轉】

HAProxy詳解(三):基於虛擬主機的HAProxy負載均衡系統配置實例【轉】

ise onf sysconf proxy配置 ffffff 規則設置 library 版本信息 論壇

一.基於虛擬主機的HAProxy負載均衡系統配置實例

1.通過HAProxy的ACL規則配置虛擬主機:

下面將通過HAProxy的ACL功能配置一套基於虛擬主機的負載均衡系統。這裏操作系統環境為:CentOS release 6.7,HAProxy版本為haproxy-1.4.24,要實現的功能如圖:

技術分享圖片

本實例有一個電商網站服務器群、一個論壇服務器群、一個博客服務器群和默認服務器群,4個服務器群都由多臺服務器組成,而4個服務器群又組成了一個應用服務器群組,在每個服務器群的前端有一個基於HAProxy的負載均衡調度器,整個應用架構要實現的功能為:當客戶端通過域名www.tb.com或tb.com訪問時,HAProxy將請求提交到電商網站服務器群,進而實現電商網站的負載均衡;當客戶端通過域名bbs.tb.com訪問時就將請求調度到論壇服務器群,實現論壇的負載均衡;當客戶端通過blog.tb.com訪問時則將請求調度到博客服務器群中,實現博客的負載均衡;如果客戶端通過除上面三種方式外的任意方式請求服務時,就將請求調度到缺省服務器群。

1.配置HAProxy

HAProxy的安裝非常簡單,這裏直接進入HAProxy的配置過程,配置文件如下:

global

log 127.0.0.1 local0 info

maxconn 4096

user nobody

group nobody

daemon

nbproc 1

pidfile /usr/local/haproxy/logs/haproxy.pid

defaults

mode http

retries 3

timeout connect 5s

timeout client 30s

timeout server 30s

timeout check 2s

listen admin_stats

bind 0.0.0.0:19088

mode http

log 127.0.0.1 local0 err

stats refresh 30s

stats uri /haproxy-status

stats realm welcome login\ Haproxy

stats auth admin:admin

stats auth yan:123456

stats hide-version

stats admin if TRUE

frontend www

bind *:80

mode http

option httplog

option forwardfor

log global

acl host_www hdr_reg(host) -i ^(www.tb.com|tb.com)

acl host_bbs hdr_dom(host) -i bbs.tb.com

acl host_blog hdr_beg(host) -i blog.

use_backend server_www if host_www

use_backend server_bbs if host_bbs

use_backend server_blog if host_blog

default_backend server_default

backend server_default

mode http

option redispatch

option abortonclose

balance roundrobin

cookie SERVERID

option httpchk GET /check_status.html

server default1 10.0.0.8:8000 cookie default1 weight 6 check inter 2000 rise 2 fall 3

server default2 10.0.0.7:8000 cookie default2 weight 6 check inter 2000 rise 2 fall 3

backend server_www

mode http

option redispatch

option abortonclose

balance source

cookie SERVERID

option httpchk GET /check_status.jsp

server www1 10.0.0.18:80 cookie www1 weight 6 check inter 2000 rise 2 fall 3

server www2 10.0.0.17:80 cookie www2 weight 6 check inter 2000 rise 2 fall 3

server www3 10.0.0.16:80 cookie www3 weight 6 check inter 2000 rise 2 fall 3

backend server_bbs

mode http

option redispatch

option abortonclose

balance source

cookie SERVERID

option httpchk GET /check_status.php

server bbs1 10.0.0.28:8080 cookie bbs1 weight 6 check inter 2000 rise 2 fall 3

server bbs2 10.0.0.27:8080 cookie bbs2 weight 6 check inter 2000 rise 2 fall 3

backend server_blog

mode http

option redispatch

option abortonclose

balance roundrobin

cookie SERVERID

option httpchk GET /check_blog.php

server blog1 10.0.0.38:80 cookie blog1 weight 6 check inter 2000 rise 2 fall 3

server blog2 10.0.0.37:80 cookie blog2 weight 6 check inter 2000 rise 2 fall 3


關於HAProxy配置文件中每個選項的含義,這裏重點看一下frontend部分中關於ACL配置部分的內容,這個是實現虛擬主機的核心配置部分。另外,這個配置文件定義了server_www、server_bbs、server_blog、server_default 4個backend,分別對應上面的4個服務器群,對於server_www群和server_bbs群,采用了基於請求源IP的負載均衡算法,其他兩個群均采用基於權重進行輪叫調度的算法。這也是根據Web應用的特點而定的。每個backend中都定義了httpchk的檢測方式,因此要保證這裏指定的URL頁面是可訪問到的。

為了驗證負載均衡的功能,這裏需要將後端真實服務器做一個訪問標記,這個架構一共加入了9臺後端真實服務器,共分為四組,這裏將server_www的三臺後端服務器默認的Web頁面設置如下:

[root@www1]# echo "This is www1 10.0.0.18" > /var/www/html/index.html

[root@www2]# echo "This is www2 10.0.0.17" > /var/www/html/index.html

[root@www3]# echo "This is www3 10.0.0.16" > /var/www/html/index.html

同理,將server_bbs的兩個後端服務器默認的web頁面設置如下:

[root@bbs1]# echo "This is bbs1 10.0.0.28" > /var/www/html/index.html

[root@bbs2]# echo "This is bbs2 10.0.0.27" > /var/www/html/index.html

接著,將server_blog的兩臺後端服務器默認的web頁面設置如下:

[root@blog1]# echo "This is blog1 10.0.0.38" > /var/www/html/index.html

[root@blog2]# echo "This is blog2 10.0.0.37" > /var/www/html/index.html

最後,將server_default的兩臺後端服務器默認的Web頁面設置如下:

[root@default1]# echo "This is default1 10.0.0.8" > /var/www/html/index.html

[root@default2]# echo "This is default2 10.0.0.7" > /var/www/html/index.html

這樣就為接下來的測試做好了準備。

2.啟動HAProxy

HAProxy安裝完成後,會在安裝根目錄的sbin目錄下生成一個可執行的二進制文件haproxy,對HAProxy的啟動、關閉、重啟等維護操作都是通過這個二進制文件實現的,執行“haproxy -h ”命令即可得到此文件的用法。

haproxy [ -f <配置文件> ] [ -vdVD ] [ -n 最大並發連接總數 ] [ -N 默認的連接數 ]

haproxy常用的參數以及含義如表

-v 顯示當前版本信息,“-vv”顯示已知的創建選項。

-d 表示讓進程運行在debug模式,“-db”表示禁用後臺模式,讓程序在前臺運行

-D 讓程序以daemon模式啟動,此選項ye可以在HAProxy配置文件中設置。

-q 表示安靜模式,程序運行不輸出任何信息。

-c 對HAProxy配置文件進行語法檢查。此參數非常有用。如果配置文件錯誤,會輸出對應的錯誤位置和錯誤信息。

-n 設置最大並發連接總數

-m 限制可用的內存大小,以MB為單位。

-N 設置默認的連接數

-p 設置HAProxy的PID文件路徑

-de 不使用epool模型

-ds 不使用speculative epoll

-dp 不使用poll模型

-sf 程序啟動後向PID文件裏的進程發送FINISH信號,這個參數需要放在命令行的最後。

-st 程序啟動後向PID文件裏的進程發送TERMINATE信號,這個參數放在命令行的最後,經常用於重啟HAProxy進程。

開啟HAProxy,操作如下:

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

關閉HAProxy,執行命令:

killall -9 haproxy

平滑重啟,執行命令:

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid`

有時候為了管理和維護方便,也可以把HAProxy的啟動與關閉寫成一個獨立的腳本,腳本內容如下:

#!/bin/bash

#config:/usr/local/haproxy/conf/haproxy.cfg

#pidfile:/usr/local/haproxy/logs/haproxy.pid

#Source function library

. /etc/rc.d/init.d/functions

#Source networking configuration

. /etc/sysconfig/network

#Check that networking is up

[ "$NETWORKING" = "no" ] && exit 0

config="/usr/local/haproxy/conf/haproxy.cfg"

exec="/usr/local/haproxy/sbin/haproxy"

prog=$(basename $exec)

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/haproxy

check() {

$exec -c -V -f $config

}

start() {

$exec -c -V -f $config

if [ $? -ne 0 ];then

echo "Erros in configuration file, check with $prog check."

return 1

fi

echo -n $"Starting $prog:"

#start it up here, usually something like "daemon $exec"

daemon $exec -D -f $config -p /usr/local/haproxy/logs/$prog.pid

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n "Stopping $prog:"

# stop it here, often "killproc $prog"

killproc $prog

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

$exec -c -q -f $config

if [ $? -ne 0 ];then

echo "Errors in configuration file, check with $prog check."

return 1

fi

stop

start

}

reload() {

$exec -c -q -f $config

if [ $? -ne 0 ];then

echo "Errors in configuration file, check with $prog check."

return 1

fi

echo -n $"Reloading $prog:"

$exec -D -f $config -p /usr/local/haproxy/logs/$prog.pid -sf $(cat /usr/local/haproxy/logs/$prog.pid)

retval=$?

echo

return $retval

}

force_reload() {

restart

}

fdr_status() {

status $prog

}

case $1 in

start|stop|restart|reload)

$1

;;

force_reload)

force_reload

;;

checkconfig)

check

;;

status)

fdr_status

;;

condrestart|try-restart)

[ ! -f $lockfile ] || restart

;;

*)

echo $"Usage: $0 {start|stop|status|checkconfig|restart|try-restart|reload|force_reload}"

exit 2

esac

將此腳本命名為haproxy。放在系統的/etc/init.d/目錄下。
2.測試HAProxy實現虛擬主機和負載均衡功能:

首先通過不同IP的客戶端以www.tb.com或者tb.com域名訪問網站,如果訪問網站,如果HAProxy運行正常,並且ACL規則設置正確,server_www的三臺後端服務器默認的web頁面信息將會依次出現,這說明HAProxy對電商網站實現了負載均衡,同時,不會出現其他後端服務器的默認Web頁面信息。說明ACL規則生效,實現虛擬主機功能。

同理,當通過不同IP的客戶端以bbs.tb.com訪問網站時,server_bbs的兩臺後端服務器默認的web頁面信息將輪換出現。這表示實現了論壇的負載均衡功能,同時,不會出現其他後端服務器的默認web頁面信息,說明ACL規則生效,實現虛擬主機功能。

用同樣的方法可以驗證blog.tb.com是否實現了虛擬主機功能以及負載均衡功能。最後,當通過HAProxy服務器的IP或者其他方式訪問時,訪問請求將被調度到server_default指定的兩臺後端真實服務器上。

3.測試HAProxy的故障轉移功能:

測試HAProxy的故障轉移功能也非常簡單,這裏假定將server_www組的一臺後端服務器10.0.0.17的httpd服務停止,那麽當通過www.tb.com或者tb.com域名訪問網站時,這個失效的節點將不會被訪問到,因為當httpd服務被停止後,HAProxy通過httpchk方式將立刻檢測到此節點無法返回數據,從而屏蔽此節點對外提供服務的功能,這樣就實現了故障轉移功能。

4.使用HAProxy的web監控平臺:

雖然HAProxy實現了服務的故障轉移功能,但是在主機或者服務出現故障的時候,並不能發出通知告知運維人員,這對於及時性要求高的業務系統來說,是非常不便的。不過,HAProxy似乎也考慮到了這一點,在新的版本中HAProxy推出了一個基於Web的監控平臺,通過這個平臺可以查看此集群系統所有後端服務器的運行狀態,在後端服務或服務出現故障時,監控頁面會通過不同的顏色來展示故障信息,這在很大程度上解決了後端服務器故障報警的問題,運維人員可通過監控這個頁面來第一時間發現節點故障,進而修復故障。如圖:

技術分享圖片

在這個監控頁面中,詳細記錄了HAParoxy中配置的frontend、backend等信息。在backend中有各臺後端真實服務器的運行狀態,正常情況下,所有後端服務器都以淺綠色展示,當某臺服務器出現故障時,將以深橙色顯示。

在這個監控頁面中,還可以執行關閉自動刷新、隱藏故障狀態的節點、手動刷新、導出數據為csv文件等各種操作。在新版的HAProxy中,又增加了對backend後端節點的管理功能,例如,可以在web頁面下執行disable、enable、soft stop、soft start 等後端節點來管理操作。

HAProxy詳解(三)-閆利朋的博客-51CTO博客
http://blog.51cto.com/6284444/2140563

HAProxy詳解(三):基於虛擬主機的HAProxy負載均衡系統配置實例【轉】