負載均衡之Haproxy搭建Web群集實戰部署
文章目錄
- 一、常見的Web集群調度器
- 二、Haproxy應用分析
- (一)、LVS在企業應用中抗負載能力很強,但存在不足
- (二)、Haproxy是一款可提供高可用性、負載均衡、及基于TCP和HTTP應用的代理的軟體
- (三)、Haproxy調度演算法原理
- 1、Haproxy支持多種調度演算法,最常用的有三種
- 三、實驗環境
- 四、實驗操作步驟
- (一)、haproxy 服務器部署
- 1、關閉防火墻,將安裝Haproxy所需軟體包傳到/opt目錄下
- 2、編譯安裝 Haproxy
- 3、Haproxy服務器配置
- 4、添加haproxy 系統服務
- (二)、節點服務器的部署
- (三)、測驗 Web群集
- 五、日志定義
一、常見的Web集群調度器
目前常見的Web集群調度器分為軟體和硬體
軟體通常使用開源的LVS、Haproxy、Nginx
硬體一般使用比較多的是F5,也有很多人使用國內的一些產品,如梭子魚、綠盟等
二、Haproxy應用分析
(一)、LVS在企業應用中抗負載能力很強,但存在不足
LVS不支持正則處理,不能實作動靜分離
對于大型網站,LVS的實施配置復雜,維護成本相對較高
(二)、Haproxy是一款可提供高可用性、負載均衡、及基于TCP和HTTP應用的代理的軟體
適用于負載大的Web站點
運行在硬體上可支持數以萬計的并發連接的連接請求
(三)、Haproxy調度演算法原理
1、Haproxy支持多種調度演算法,最常用的有三種
1、RR(Round Robin)
RR演算法是最簡單最常用的一種演算法,即輪詢調度
理解舉例
有三個節點A、B、C
第一個用戶訪問會被指派到節點A
第二個用戶訪問會被指派到節點B
第三個用戶訪問會被指派到節點C
第四個用戶訪問繼續指派到節點A,輪詢分配訪問請求實作負載均衡效果
2、LC(Least Connections)
最小連接數演算法,根據后端的節點連接數大小動態分配前端請求
理解舉例
有三個節點A、B、C,各節點的連接數分別為A:4、B:5、C:6
第一個用戶連接請求,會被指派到 A上,連接數變為A:5、B:5、C:6
第二個用戶請求會繼續分配到A上,連接數變為A:6、B:5、C:6;再有新的請求會分配給B,每次將新的請求指派給連接數最小的客戶端
由于實際情況下A、B、C的連接數會動態釋放,很難會出現一樣連接數的情況
此演算法相比較rr演算法有很大改進,是目前用到比較多的一種演算法
3、 SH(Source Hashing)
基于來源訪問調度演算法,用于一些有Session會話記錄在服務器端的場景,可以基于來源的IP、Cookie等做集群調度
理解舉例
有三個節點A、B、C,第一個用戶第一次訪問被指派到了A ,第二個用戶第一次訪問被指派到了B
當第一個用戶第二次訪問時會被繼續指派到A,第二個用戶第二次訪問時依舊會被指派到B,只要負載均衡調度器不重啟,第一個用戶訪問都會被指派到A,第二個用戶訪問都會被指派到B,實作集群的調度
此調度演算法好處是實作會話保持,但某些IP訪問量非常大時會引起負載不均衡,部分節點訪問量超大,影響業務使用
三、實驗環境
準備四臺虛擬機

Haproxy服務器:192.168.126.10
Nginx 服務器1:192.168.126.20 (nginx服務器可以使用之前的lnmp一鍵部署腳本部署)
Nginx 服務器2:192.168.126.30
客戶端:192.168.126.40
四、實驗操作步驟
(一)、haproxy 服務器部署
1、關閉防火墻,將安裝Haproxy所需軟體包傳到/opt目錄下
systemctl stop firewalld
setenforce
0
2、編譯安裝 Haproxy
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install
引數說明:
TARGET=linux26 #內核版本,
#使用uname -r查看內核,如:2.6.18-371.el5,此時該引數用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
ARCH=x86_64 #系統位數,64位系統

3、Haproxy服務器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/
vim haproxy.cfg
global
--4~5行--修改,配置日志記錄,local0為日志設備,默認存放到系統日志
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096 #最大連接數,需考慮ulimit-n限制
--8行--注釋,chroot運行路徑,為該服務自設定的根目錄,一般需將此行注釋掉
#chroot /usr/share/haproxy
uid 99 #用戶UID
gid 99 #用戶GID
daemon #守護行程模式
defaults
log global #定義日志為global配置中的日志定義
mode http #模式為http
option httplog #采用http日志格式記錄日志
option dontlognull #不記錄健康檢查日志資訊
retries 3 #檢查節點服務器失敗次數,連續達到三次失敗,則認為節點不可用
redispatch #當服務器負載很高時,自動結束當前佇列處理比較久的連接
maxconn 2000 #最大連接數
contimeout 5000 #連接超時時間
clitimeout 50000 #客戶端超時時間
srvtimeout 50000 #服務器超時時間
--洗掉下面所有listen項--,添加
listen webcluster 0.0.0.0:80 #定義一個名為appli4-backup的應用
option httpchk GET /test.html #檢查服務器的test.html檔案
balance roundrobin #負載均衡調度演算法使用輪詢演算法roundrobin
server inst1 192.168.80.100:80 check inter 2000 fall 3 #定義在線節點
server inst2 192.168.80.101:80 check inter 2000 fall 3



---------------------引數說明---------------------------------------------------------------------------
balance roundrobin #負載均衡調度演算法
#輪詢演算法:roundrobin;最小連接數演算法:leastconn;來源訪問調度演算法:source,類似于nginx的ip_hash
check inter 2000 #表示haproxy服務器和節點之間的一個心跳頻率
fall 3 #表示連續三次檢測不到心跳頻率則認為該節點失效
若節點配置后帶有“backup”表示該節點只是個備份節點,只有主節點失效該節點才會上,不攜帶“backup”,表示為主節點,和其它主節點共同提供服務,
4、添加haproxy 系統服務
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start 或 /etc/init.d/haproxy start

(二)、節點服務器的部署
可以參考前期博文:Shell腳本一鍵部署LNMP架構,原始碼編譯安裝
systemctl stop firewalld
setenforce 0
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
--192.168.126.20---
echo "this is test111111" > /usr/local/nginx/html/test.html
--192.168.126.30---
echo "this is test222222" > /usr/local/nginx/html/test.html
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx #啟動nginx 服務

(三)、測驗 Web群集
在客戶端使用瀏覽器打開 http://192.168.126.10/test.html ,不斷重繪瀏覽器測驗負載均衡效果


五、日志定義
#默認haproxy的日志是輸出到系統的syslog中,查看起來不是非常方便,為了更好的管理haproxy的日志,我們在生產環境中一般單獨定義出來,需要將haproxy的info及notice日志分別記錄到不同的日志檔案中,
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
service haproxy restart
#需要修改rsyslog配置,為了便于管理,將haproxy相關的配置獨立定義到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog啟動時會自動加載此目錄下的所有組態檔,
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
#說明:
這部分配置是將haproxy的info日志記錄到/var/log/haproxy/haproxy-info.log下,將notice日志記錄到/var/log/haproxy/haproxy-notice.log下,“&~”表示當日志寫入到日志檔案后,rsyslog停止處理這個資訊,
systemctl restart rsyslog.service
tail -f/var/log/haproxy/haproxy-info.log #查看haproxy的訪問請求日志資訊


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/251740.html
標籤:其他
上一篇:分布式事務解決方案全決議
