Haproxy集群部署與優化
- 一、常見的Web集群調度器
- 二、Haproxy應用分析
- 三、Haproxy調度演算法原理
- 1、RR (Round Robin)
- 2、LC(Least Connections)
- 3、SH(Source Hashing)
- 四、Haproxy集群部署步驟
- 五、Haproxy 引數優化
一、常見的Web集群調度器
1、目前常見的Web集群調度器分為軟體和硬體
2、軟體通常使用開源的LVS、Haproxy、 Nginx
LVS性能最好,但是搭建相對復雜;Nginx 的upstream模塊支持群集功能,但是對群集節點健康檢查功能不強,高并發性能沒有Haproxy好,
3、硬體一般使用比較多的是F5,也有很多人使用國內的一些產品,如梭子魚、綠盟等,
二、Haproxy應用分析
1、LVS在企業應用中抗負載能力很強,但存在不足
(1)LVS不支持正則處理,不能實作動靜分離
(2)對于大型網站,LVS的實施配置復雜,維護成本相對較高
2、Haproxy是一款可提供高可用性、負載均衡、及基于TCP和HTTP應用的代理的軟體
(1)適用于負載大的Web站點
(2)運行在硬體上可支持數以萬計的并發連接的連接請求
三、Haproxy調度演算法原理
(Haproxy支持多種調度演算法,最常用的有三種)
1、RR (Round Robin)
RR演算法是最簡單最常用的一種演算法,即輪詢調度
2、LC(Least Connections)
最小連接數演算法,根據后端的節點連接數大小動態分配前端請求
3、SH(Source Hashing)
基于來源訪問調度演算法,用于一些有Session會話記錄在服務器的場景,可以基于來源的IP、Cookie等做集群調度,
四、Haproxy集群部署步驟
搭建環境:
Haproxy服務器(centos7-5):192.168.177.8
Nginx服務器1(centos7-1):192.168.177.11
Nginx服務器2(centos7-8):192.168.177.18
客戶端(虛擬windows7):192.168.177.200
-------------------------------------Haproxy服務器部署--------------------------------------
1、關閉防火墻,將安裝Haproxy所需軟體包haproxy-1.5.19.tar.gz 傳到/opt目錄下
systemctl stop firewalld.service
systemctl disable firewalld.service
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=linux2628 #內核版本
#使用uname -r 查看內核,如2.6.18-371.e15,此時該引數用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
ARCH=x86_64 #系統位數,64位系統
-------------------------------------------------------
3、Haproxy服務器配置
mkdir /etc/haproxy
cp /opt/haproxy-1.5.19/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
----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 #定義一個名為webcluster的應用
option httpchk GET /test.html #檢查服務器的test.html檔案
balance roundrobin #負載均衡調度演算法使用輪詢演算法roundrobin
server inst1 192.168.177.11:80 check inter 2000 fall 3 #定義在線節點
server inst2 192.168.177.18: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
cd /etc/init.d/
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
----------------------節點服務器--------------------------------------
systemctl stop firewalld.service
systemctl disable firewalld.service
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 #提前將nginx壓縮包上傳到/opt目錄下
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
----192.168.177.11----
echo "this is yy web" > /usr/local/nginx/html/test.html
----192.168.177.18----
echo "this is benet web" > /usr/local/nginx/html/test.html
nginx #啟動nginx 服務


--------------------------測驗 web 集群--------------------------------
在客戶端使用瀏覽器打開 http://192.168.177.11/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
mkdir /var/log/haproxy
tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的訪問請求日志資訊

五、Haproxy 引數優化
1、maxconn:最大連接數,根據應用實際情況進行調整,推薦使用10 240
2、daemon:守護行程模式,Haproxy可以使用非守護行程模式啟動,建議使用守護行程模式啟動
3、nbproc:負載均衡的并發行程數,建議與當前服務器CPU核數相等或為其2倍
4、retries: 重試次數,主要用于對集群節點的檢查,如果節點多,且并發量大,設定為2次或3次
5、option http-server-close:主動關閉http請求選項,建議在生產環境中使用此選項
6、timeout http-keep-alive:長連接超時時間,設定長連接超時時間,可以設定為10s
7、timeout http-request:http請求超時時間,建議將此時間設定為5 ~ 10s,增加http連接釋放速度
8、timeout client:客戶端超時時間,如果訪問量過大,節點回應慢,可以將此時間設定短一些,建議設定為1min左右
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256728.html
標籤:其他
