入坑系列之HAProxy負載均衡

在大型系統設計中用代理在負載均衡是最常見的一種方式,而相對靠譜的解決方案中Nginx、HAProxy、LVS、F5在各大場中用得比較普遍,各有各的優勢和使用場景,由于本次要使用到TCP,因此Nginx只能在HTTP層負載,因此用HAProxy來負載,為什么不用LVS?因為配置太麻煩。

HAProxy是免費、極速且可靠的用于為TCP和基于HTTP應用程序提供高可用、負載均衡和代理服務的解決方案,尤其適用于高負載且需要持久連接或7層處理機制的web站點。HAProxy還可以將后端的服務器與網絡隔離,起到保護后端服務器的作用。HAProxy的負載均衡能力雖不如LVS,但也是相當不錯,而且由于其工作在7層,可以對http請求報文做深入分析,按照自己的需要將報文轉發至后端不同的服務器(例如動靜分離),這一點工作在4層的LVS無法完成。

環境

CentOS6.X

HAProxy 1.7.3

用root用戶安裝

下載

若在線安裝不用下載,可直接通過yum命令安裝(建議),不過需要聯網。

去官網下載 :http://www.haproxy.org/download/1.7/src/haproxy-1.7.3.tar.gz

下載后放進CentOS中的/usr/local/ ?文件夾中(至于怎么放,你不會 這個鍋我不背,去學學Linux 操作基礎)

關閉SElinux、配置防火墻

vi /etc/selinux/config#SELINUX=enforcing #注釋掉#SELINUXTYPE=targeted #注釋掉SELINUX=disabled#增加:wq!#保存退出setenforce 0#使配置立即生效

vi /etc/sysconfig/iptables#編輯-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT#允許組播地址通信(在做keepalived時用得到)-A RH-Firewall-1-INPUT -p? ? vrrp? ? -j ACCEPT#允許VRRP(虛擬路由器冗余協)通信-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT#允許80端口通過防火墻:wq!#保存退出service iptables restart#重啟防火墻使配置生效

創建HAProxy運行賬戶和組

[root@H32 local]#groupadd haproxy #添加haproxy組[root@H32 local]#useradd -g haproxy haproxy -s /bin/false #創建nginx運行賬戶haproxy并加入到haproxy組,不允許haproxy

安裝

分兩種:

1、在線裝:yum install haproxy (建議)

2、安裝包:

環境中要有gcc,用于編譯,一般安裝環境時都會有,若沒有 運行 :

yum install -y gcc

進入local文件夾中

[root@H32 ~]#cd /usr/local

然后解壓下載好haproxy包到當前文件夾

[root@H32 local]#tar -zxvf haproxy-1.7.3.tar.gz[root@H32 local]#cd haproxy-1.7.3

安裝

[root@H32 haproxy-1.7.3]#make TARGET=linux3100 CPU=x86_64 PREFIX=/usr/local/haproxy-1.7.3 #編譯(源碼才需要)? uname -r #查看系統內核版本號[root@H32 haproxy-1.7.3]#make install PREFIX=/usr/local/haproxy-1.7.3 #安裝 haproxy-1.7.3為解壓后的文件路徑(很重要)

設置HAProxy

mkdir -p /usr/local/haproxy-1.7.3/conf#創建配置文件目錄

mkdir -p /etc/haproxy#創建配置文件目錄

touch /usr/local/haproxy-1.7.3/conf/haproxy.cfg#創建配置文件

ln -s /usr/local/haproxy-1.7.3/conf/haproxy.cfg? /etc/haproxy/haproxy.cfg#添加配置文件軟連接

cp -r /usr/local/haproxy-1.7.3/examples/errorfiles? /usr/local/haproxy-1.7.3/errorfiles#拷貝錯誤頁面

ln -s /usr/local/haproxy-1.7.3/errorfiles? /etc/haproxy/errorfiles#添加軟連接

mkdir -p /usr/local/haproxy-1.7.3/log#創建日志文件目錄

touch /usr/local/haproxy-1.7.3/log/haproxy.log#創建日志文件

ln -s /usr/local/haproxy-1.7.3/log/haproxy.log? /var/log/haproxy.log#添加軟連接

cp /usr/local/haproxy-1.7.3/examples/haproxy.init? /etc/rc.d/init.d/haproxy#拷貝開機啟動文件

chmod +x /etc/rc.d/init.d/haproxy#添加腳本執行權限

chkconfig haproxy on#設置開機啟動

ln -s /usr/local/haproxy-1.7.3/sbin/haproxy? /usr/sbin#添加軟連接

注意上面的文件夾,若與上面的文件夾路徑一致,可以直接復制運行。

配置haproxy.cfg參數

vi? /usr/local/haproxy-1.7.3/conf/haproxy.cfg#編輯

這里是最關鍵的設置,在此有兩個相同的服務由兩臺服務器提供:192.168.30.33,192.168.30.34

#---------------------------------------------------------------------#Global settings#---------------------------------------------------------------------globallog127.0.0.1 local2###[err warning info debug]chroot/usr/local/haproxy-1.7.3pidfile/var/run/haproxy.pid###haproxy的pid存放路徑,啟動進程的用戶必須有權限訪問此文件maxconn? 4000###最大連接數,默認4000user? haproxy

group? haproxy

daemon###創建1個進程進入deamon模式運行。此參數要求將運行模式設置為"daemon"#---------------------------------------------------------------------#common defaults that all the 'listen' and 'backend' sections will#use if not designated in their block#---------------------------------------------------------------------defaults

mode? http###默認的模式,tcp是4層,http是7層,health只會返回OK若是混合模式則 mode 不需要設置logglobal###采用全局定義的日志option? dontlognull###不記錄健康檢查的日志信息option? httpclose###每次請求完畢后主動關閉http通道option? httplog###日志類別http日志格式混合模式 此處還需要加上 tcplog#option? forwardfor###如果后端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ipoption? redispatch###serverId對應的服務器掛掉后,強制定向到其他健康的服務器timeout connect 10s#default 10 second timeout if a backend is not foundtimeout client 10s###客戶端連接超時timeout server 10s###服務器連接超時maxconn? ? 60000###最大連接數retries? ? 3###3次連接失敗就認為服務不可用,也可以通過后面設置########統計頁面配置########listen admin_stats#監聽端口bind 0.0.0.0:8089#啟用狀態監控stats enable

mode http

logglobal#統計頁面URLstats uri /stats#統計頁面密碼框上提示文本stats realm Haproxy\ Statistics#統計頁面用戶名和密碼設置stats auth admin:admin#隱藏統計頁面上HAProxy的版本信息#stats hide-version#當通過認證才可管理stats adminifTRUE#統計頁面自動刷新時間stats refresh 30s########WEB配置#################listen web1080

bind0.0.0.0:1080mode http

option httplog

logglobalmaxconn3000balance leastconnserver web33192.168.80.33:8007? weight 1 rise 2 fall 3server web34 192.168.80.34:8007 weight 1 rise 2 fall 3#---------------------------------------------------------------------#main frontend which proxys to the backends 這里不需要動靜分離,所以全部注釋掉#---------------------------------------------------------------------#frontend? main *:5000#acl url_static? ? ? path_beg? ? ? -i /static /images /javascript /stylesheets#acl url_static? ? ? path_end? ? ? -i .jpg .gif .png .css .js#use_backend static? ? ? ? ? if url_static#default_backend? ? ? ? ? ? app#---------------------------------------------------------------------#static backend for serving up images, stylesheets and such#---------------------------------------------------------------------#backend static#balance? ? roundrobin#server? ? ? static 127.0.0.1:4331 check#---------------------------------------------------------------------#round robin balancing between the various backends#---------------------------------------------------------------------#backend app#balance? ? roundrobin#server? app1 127.0.0.1:5001 check#server? app2 127.0.0.1:5002 check#server? app3 127.0.0.1:5003 check#server? app4 127.0.0.1:5004 check#---------------------------------------------------------------------#round robin balancing between the various backends#---------------------------------------------------------------------#errorloc? 503? http://www.osyunwei.com/404.htmlerrorfile 403 /etc/haproxy/errorfiles/403.http

errorfile500 /etc/haproxy/errorfiles/500.http

errorfile502 /etc/haproxy/errorfiles/502.http

errorfile503 /etc/haproxy/errorfiles/503.http

errorfile504 /etc/haproxy/errorfiles/504.http

統一綁定的對外接口為1080, 監控頁面端口為8089。

啟動

:wq!#保存退出

service haproxy start#啟動

#設置開機啟動

chkconfig haproxy on

設置HAProxy日志

vi? /etc/syslog.conf#編輯,在最下邊增加#

haproxy.log

local0.*? /var/log/haproxy.log

local1.*? /var/log/haproxy.log

local2.*? /var/log/haproxy.log

local3.*? /var/log/haproxy.log

:wq!#保存退出

vi? /etc/sysconfig/rsyslog#編輯修改

SYSLOGD_OPTIONS="-r -m 0"#接收遠程服務器日志

:wq!#保存退出

service rsyslog restart#重啟syslog

監控頁面

打開監控頁面,用戶名密碼為admin,出現下面的頁面就說明配置成功:

http://192.168.30.32:8089/stats

service haproxy stop#關閉service haproxy restart#重啟

擴展問題:

此處只做了簡單的IP請求負載,還可以做TCP層的負載,但里面的設置需要根據自己的實際情況不停的壓力測試進行調置。

此后還要做Keepalived + HAProxy 多機熱備的負載實用方案。

還可做mysql的讀寫負載、動靜態資源分離等等

ACL規則介紹

ACL控制哪些開放,往哪里轉,哪些屏蔽 ,具體的內容網上也有介紹,此處只做拋磚引玉。

實例:實現動靜分離功能

首先定義兩個backend,分別以動態和靜態進行分組

backend jingtai

balance roundrobin

server web1 10.0.10.82:80 check weight 1maxconn 2000

backend dongtai

balance roundrobin

server web2 10.0.10.83:80 check weight 1maxconn 3000

配置frontend

frontend web_server

bind *:80

default_backend webservers

acl badguy src 10.0.10.1

acl denyfile path /1.html

#http-request deny if badguy denyfile

acl static path_end .html

use_backend jingtai if static

default_backend dongtai

定義acl名稱為static ,如果訪問匹配是.html的文件,那么直接跳轉至jingtai 這個backend

如果訪問的不匹配.html 那么直接跳轉至默認backend dongtai組

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容

  • 參考文檔: 1.haproxy:http://www.haproxy.org/ 本文涉及haproxy的安裝,并做...
    Netonline閱讀 2,437評論 1 51
  • 互聯網架構基礎知識 一、網站常見架構 負載層 頁面緩存層 web層 數據層 二、運維法則 緩存為王 盡量在前端(緩...
    魏鎮坪閱讀 4,839評論 0 9
  • 目錄: HAProxy是什么 HAProxy的核心能力和關鍵特性 HAProxy的安裝和運行 使用HAProxy搭...
    kelgon閱讀 79,963評論 9 159
  • 因為昨天晚上我們睡得都很晚,所以今天早上我們一起睡了一個大懶覺,十點才起床。 女兒和同學約好下...
    靜等花開之心路閱讀 421評論 10 13
  • 小乙哥,大名燕青,江湖俗稱:浪子燕青,小乙哥。隨主人盧俊義入梁山,封天巧星,位列36天罡第36位,曾以百步穿楊的的...
    莊生的蝶夢閱讀 898評論 1 4