防偽碼:不必向我解釋色彩,我的眼里自有一片湛藍(lán)
第七章 使用Haproxy搭建Web集群
前言:Haproxy是目前比較流行的一種集群調(diào)度工具,同類集群調(diào)度工具很多,如LVS和Nginx。相比較而言,LVS性能最好,但是搭建相對(duì)復(fù)雜,Nginx的upstream模塊支持集群功能,但是對(duì)集群節(jié)點(diǎn)的檢查功能不強(qiáng),性能沒有Haproxy好,其官網(wǎng)是http://haproxy.1wt.eu/。本章我們將使用Haproxy搭建一套Web集群,并增加一臺(tái)Haproxy做雙機(jī)熱備,達(dá)到高可用的效果。
一、前置知識(shí)點(diǎn):
1、HTTP請(qǐng)求
請(qǐng)求方式(GET方式和POST方式)
返回狀態(tài)碼:
正常的狀態(tài)碼為2××、3××
異常的狀態(tài)碼為4××、5××
2、負(fù)載均衡常用調(diào)度算法:
RR(Round Robin):輪詢調(diào)度
LC(Least Connections):最小連接數(shù)
SH(Source Hashing):基于來源訪問調(diào)度
3、常見的web集群調(diào)度器
軟件:LVS、Haproxy、Nginx
硬件:F5、梭子魚、綠盟等
二、綜合實(shí)驗(yàn):使用Haproxy搭建web集群
1、實(shí)驗(yàn)拓?fù)鋱D:
2、案例環(huán)境表:
3、 實(shí)驗(yàn)步驟
1) 編譯安裝haproxy
首先安裝兩個(gè)支持包
2) haproxy服務(wù)器的配置
首先建立haproxy的配置文件
拷貝配置文件的樣本復(fù)制到/etc/haproxy目錄下
修改haproxy.cfg配置文件(分為三部分,global為全局,defaults為默認(rèn),listen為應(yīng)用組件)
詳解配置參數(shù):
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log /dev/log local0 info //日志記錄,local0為日志設(shè)備,默認(rèn)存放到系統(tǒng)日志
log /dev/log local1 notice //notice為日志級(jí)別,通常有24個(gè)級(jí)別
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99 //用戶uid
gid 99 //用戶gid
pidfile /var/run/haproxy.pid //pid文件的路徑以及文件名
daemon //后臺(tái)運(yùn)行
#debug
#quiet
defaults
log global //定義日志為global配置中的日志定義
mode http //模式為http協(xié)議
option httplog //采用http日志格式記錄日志
option dontlognull
retries 3 //檢查節(jié)點(diǎn)服務(wù)器的失敗次數(shù),連續(xù)達(dá)到三次則認(rèn)為節(jié)點(diǎn)不可用
maxconn 2000 //最大連接次數(shù)
contimeout 5000 //連接超時(shí)時(shí)間
clitimeout 50000 //客戶端超時(shí)時(shí)間
srvtimeout 50000 //服務(wù)器超時(shí)時(shí)間
listen webcluster 0.0.0.0:80
option httpchk GET /index.html //檢查服務(wù)器的index.html文件
balance roundrobin //負(fù)載均衡調(diào)度算法為輪詢
server inst1 192.168.1.30:80 check inter 2000 fall 3 //定義節(jié)點(diǎn)地址和端口,健康檢查三次
server inst2 192.168.1.40:80 check inter 2000 fall 3
3)創(chuàng)建自啟動(dòng)腳本
4) 安裝nginx(以第一臺(tái)nginx為例)
剩下的節(jié)點(diǎn)配置一樣,為了測(cè)試時(shí)看出效果,建議將測(cè)試頁(yè)的內(nèi)容不要保持一致
第一臺(tái)如圖所示:
第二臺(tái)如圖所示:
5) 開啟haproxy服務(wù)(防火墻開啟tcp80端口)
6) 測(cè)試web群集
首先測(cè)試負(fù)載均衡,在客戶端上打開http://192.168.1.10
下面再測(cè)試一下高可用,我們把第一臺(tái)服務(wù)器的網(wǎng)卡斷掉,模擬服務(wù)器出現(xiàn)故障,如果網(wǎng)頁(yè)依然可以訪問,說明群集的高可用沒有問題。
7) 配置haproxy日志
Haproxy的日志默認(rèn)是保存到系統(tǒng)的syslog中,查看起來不方便,所以我們?cè)谏a(chǎn)環(huán)境中可以將日志單獨(dú)存儲(chǔ)到不同的文件中,配置如下
首先修改配置文件,主要改下面的部分(這兩行的作用是將info和notice的日志分別記錄到不同的文件中)
然后修改rsyslog配置,將haproxy相關(guān)的配置獨(dú)立定義到haproxy.conf,并放到/etc/rsyslog.d下,rsyslog啟動(dòng)時(shí)會(huì)自動(dòng)加載此目錄下所有的配置文件。
加入以下內(nèi)容
然后重新啟動(dòng)rsyslog服務(wù)
測(cè)試日志信息:
在客戶機(jī)訪問網(wǎng)站之后,可以使用tail -f /var/log/haproxy/haproxy-info.log即時(shí)查看日志
8)生產(chǎn)環(huán)境中需要對(duì)Haproxy進(jìn)行參數(shù)優(yōu)化,以滿足實(shí)際生產(chǎn)的要求
參數(shù) | 參數(shù)說明 | 優(yōu)化建議 |
maxconn | 最大連接數(shù) | 推薦使用10240 |
daemon | 守護(hù)進(jìn)程模式 | Haproxy可以使用非進(jìn)程守護(hù)模式啟動(dòng),生產(chǎn)環(huán)境建議使用守護(hù)進(jìn)程模式啟動(dòng) |
nbproc | 負(fù)載均衡的并發(fā)進(jìn)程數(shù) | 建議與服務(wù)器CPU核數(shù)相等或成為其2倍 |
retries | 重試次數(shù) | 發(fā)量大,設(shè)置為2或3次;服務(wù)器節(jié)點(diǎn)不多,可以設(shè)置為5或6次 |
option http-server-close | 主動(dòng)關(guān)閉http請(qǐng)求選項(xiàng) | 建議在生產(chǎn)環(huán)境中使用此選項(xiàng),避免由于timeout時(shí)間設(shè)置過長(zhǎng)導(dǎo)致http連接堆積 |
timeout http-keep-alive | 長(zhǎng)連接超時(shí)時(shí)間 | 可以設(shè)置為10s |
timeout http-request | http請(qǐng)求超時(shí)時(shí)間 | 建議設(shè)置5-10s,增加http連接釋放速度 |
timeout client | 客戶端超時(shí)時(shí)間 | 如果訪問量大,節(jié)點(diǎn)相應(yīng)慢,可以將此時(shí)間設(shè)置短一些,意見設(shè)置為1min左右即可 |
9)為了實(shí)現(xiàn)haproxy的高可用,我們可以配置keepalived。
思路:在以上實(shí)驗(yàn)原有的基礎(chǔ)上增加一臺(tái)Haproxy服務(wù)器,兩臺(tái)調(diào)度服務(wù)器做雙機(jī)熱備,
配置好了之后斷掉第一臺(tái)Haproxy網(wǎng)站依然可以訪問對(duì)了。
為兩臺(tái)Haproxy配置虛擬IP地址作為訪問地址:
訪問:
斷開一臺(tái),發(fā)現(xiàn)仍然可以訪問
使用ip addr show dev eth0命令,發(fā)現(xiàn)從Haproxy調(diào)度器已成為主調(diào)度器
謝謝觀看,真心的希望能幫到您。
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: