一、常見的Web集群調度器:
■目前常見的Web集群調度器分為軟體和硬體
■軟體通常使用開源的LVS、Haproxy、 Nginx
■硬體一般使用比較多的是F5,也有很多人使用國內的一
些產品,如梭子魚、綠盟等
LVS群集搭建見這三篇
LVS+NAT模式
LVS+DR模式
LVS+keepalived
二、Haproxy應用分析
■LVS在企業應用中抗負載能力很強,但存在不足
LVS不支持正則處理,不能實作動靜分離
對于大型網站,LVS的實施配置復雜,維護成本相對較高
■Haproxy是一款可提供高可用性、負載均衡、及基于TCP和HTTP應用的代理的軟體
適用于負載大的Web站點
運行在硬體上可支持數以萬計的并發連接的連接請求
三、Haproxy調度演算法原理
3.1 RR (RoundRobin)
RR演算法是最簡單最常用的一種演算法,即輪詢調度
理解舉例:
- 有三個節點A、B、C
- 第一個用戶訪問會被指派到節點A
- 第二個用戶訪問會被指派到節點B
- 第三個用戶訪問會被指派到節點C
- 第四個用戶訪問繼續指派到節點A,輪詢分配訪問請求實作負載均衡效果
3.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.3 SH (Source Hashing)
基于來源訪問調度演算法,用于- -些有Session會話記錄在服務器端的場景, 可以
基于來源的IP、Cookie等做集群調度
理解舉例
- 有三個節點A、B、C,第一個用戶第一-次訪問被指派到了A,第二個用戶第一-次
訪問被指派到了B - 當第一個用戶第二次訪問時會被繼續指派到A,第二個用戶第二_次訪問時依舊會
被指派到B,只要負載均衡調度器不重啟,第一個用戶訪問都會被指派到A,第二
個用戶訪問都會被指派到B,實作集群的調度 - 此調度演算法好處是實作會話保持,但某些IP訪問量非常大時會引|起負載不均衡,
部分節點訪問量超大,影響業務使用
四、案例實操
4.1 案例環境

共需要三臺主機(關閉防火墻):共同構建web群集
- 一臺做Haproxy調度器,IP:192.168.247.130,給客戶機提供訪問服務
- 兩臺位元組點服務器,部署nginx,提供web服務,IP:192.168.247.140 和 192.168.247.150
4.2 節點服務器的部署
在兩臺網站服務器上安裝Nginx,并啟動服務,修改網頁內容為不一樣的,方便驗證
yum -y install make pcre-devel zlib-devel #安裝依賴環境
useradd -M -s /sbin/nologin nginx #添加系統用戶賬號
tar xzf nginx-1.12.2.tar.gz
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #編譯安裝
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin #優化命令路徑
nginx -t #檢查組態檔語法和狀態
nginx #啟動服務
netstat -anpt | grep nginx #查看是否開啟服務
cd /usr/local/nginx/html/ #對默認網頁內容修改,便于測驗驗證
echo "this is web1" > index.html
#節點服務器2用:echo "this is web2" > index.html
4.3 Haproxy部署
安裝Haproxy
yum -y install pcre-devel bzip2-devel make
tar zxf haproxy-1.4.24.tar.gz
cd haproxy-1.4.24/
make TARGET=linux26
make install
mkdir /etc/haproxy
修改組態檔
cp examples/haproxy.cfg /etc/haproxy/
vi /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
#global 為全域配置
global
log /dev/log local0 info #配置日志記錄,local0為日志設備,默認存放到系統日志
log /dev/log local0 notice #日志級別為 info、notice
#log loghost local0 info
maxconn 4096 #最大連接數
#chroot /usr/share/haproxy #注釋掉,不讓服務器從自己的目錄獲取,而從節點服務器
uid 99
gid 99
daemon
#debug
#quiet
#defaults 為默認配置
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 #當有訪問80埠的請求則進行
option httpchk GET /index.html #獲取web服務器池中服務器的index.html檔案
balance roundrobin #定義采用輪詢演算法
server web1 192.168.247.140:80 check inter 2000 fall 3 #定義在線節點服務器
server web2 192.168.247.150:80 check inter 2000 fall 3
創建自啟動腳本,并開啟服務
cp examples/haproxy.init /etc/init.d/haproxy
vi /etc/init.d/haproxy

chmod 755 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start
systemctl enable haproxy
vi /etc/haproxy/haproxy.cfg
4.4 輪詢調度效果驗證
win10瀏覽器作客戶次訪問調度服務器

再重繪,會有延時

輪流提供web服務
4.5 Haproxy日志管理
默認是輸出到系統的syslog中,生產環境中一般單獨定義,
定義方法:
●修改Haproxy組態檔中關于日志配置的選項,加入配置(上面組態檔已經修改)
log /dev/log local0 info
log /deytog local0 notice
●修改rsyslog配置,將Haproxy相關的配置獨立定義到haproxy.conf,并放到/etc/rsyslog.d/下
[root@haproxy ~]# touch /etc/rsyslog.d/haproxy.conf
[root@haproxy ~]# vi /etc/rsyslog.d/haproxy.conf
#創建客戶機的訪問日志
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
#Haproxy群集的狀態日志
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
●保存組態檔并重啟rsyslog服務,完成rsyslog配置
[root@haproxy ~]# systemctl restart rsyslog.service
[root@haproxy ~]# systemctl restart haproxy.service
■訪問Haproxy集群測驗網頁,并查看日志資訊
[root@haproxy ~]# cd /var/log/haproxy/
[root@haproxy haproxy]# ll
總用量 8
-rw-------. 1 root root 658 11月 5 19:20 haproxy-info.log
-rw-------. 1 root root 132 11月 5 19:20 haproxy-notice.log
#以http格式記錄的日志
[root@haproxy haproxy]# cat haproxy-info.log
Nov 5 19:21:18 haproxy haproxy[57949]: 192.168.247.1:59064 [05/Nov/2020:19:20:24.881] webcluster webcluster/web1 0/0/1/0/53181 200 604 - - cD-- 0/0/0/0/0 0/0 "GET / HTTP/1.1"
Nov 5 19:22:41 haproxy haproxy[57949]: 192.168.247.1:59080 [05/Nov/2020:19:21:50.160] webcluster webcluster/web2 0/0/1/0/51108 200 426 - - cD-- 0/0/0/0/0 0/0 "GET / HTTP/1.1"
[root@haproxy haproxy]# cat haproxy-notice.log #群集狀態日志
Nov 5 19:20:15 haproxy haproxy[57948]: Proxy webcluster started.
Nov 5 19:20:15 haproxy haproxy[57948]: Proxy webcluster started.
五、Haproxy引數優化
隨著企業網站負載增加, haproxy引數優化相當重要,可根據需要進行修改,
- maxconn:最大連接數,根據應用實際情況進行調整,推薦使用10240
- daemon:守護行程模式, Haproxy可以使用非守護行程模式啟動,建議使用守護行程模式啟動
- nbproc:負載均衡的并發行程數,建議與當前服務器CPU核數相等或為其2倍
- retries:重試次數,主要用于對集群節點的檢查,如果節點多,且并發量大,設定為2次或3次
- option http-server-close:主動關閉http請求選項,建議在生產環境中使用此選項
- timeout http-keep-alive:長連接超時時間,設定長連接超時時間,可以設定為10s
- timeout http-request:http請求超時時間,建議將此時間設定為5~10s,增加http連接釋放速度
- timeout client:客戶端超時時間,如果訪問量過大,節點回應慢,可以將此時間設定短一些,建議設定為1min左右就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/204542.html
標籤:其他
