Haproxy配合Nginx搭建Web集群
- 一、常見的Web集群調度器
- 二、Haproxy應用分析
- 三、Haproxy調度演算法原理
- 3.1 RR (Round Robin)
- 3.2 LC (Least Connections)
- 3.3 SH (Source Hashing)
- 四、Haproxy搭建 Web 群集
- 實驗所需安裝包
- 環境配置
- 1、編譯安裝Nginx服務器
- 2、部署haproxy服務器(Haproxy-Server:192.168.28.10)
- (1)關閉防火墻,將安裝Haproxy所需軟體包傳到/opt目錄下
- (2)編譯安裝 Haproxy
- (3)Haproxy服務器配置
- (4)添加并啟動Haproxy服務
- 3、測驗 Web集群
- 五、日志定義
- 六、Haproxy引數優化
一、常見的Web集群調度器
目前常見的Web集群調度器分為軟體和硬體
軟體通常使用開源的LVS、Haproxy、Nginx
LVS性能最好,但是搭建相對復雜;Nginx的uostream模塊支持群集功能,但是對群集節點健康檢查功能不強,高并發性能沒有Haproxy好
引薦一般使用比較多的是F5,也有很多人使用國內的一些產品,如梭子魚、綠盟等

二、Haproxy應用分析
LVS在企業中抗負載能力很強,但存在不足
LVS不支持正則處理,不能實作動靜分離
對于大型網站,LVS的實施配置復雜,維護成本相對較高
Haproxy是一款可提供高可用性、負載均衡及基于TCP和HTTP應用的代理的軟體
適用于負載大的Web站點
運行在硬體上可支持數以萬計的并發連接請求
三、Haproxy調度演算法原理
Haproxy支持多種調度演算法,最常用的有三種
3.1 RR (Round Robin)
RR演算法是最簡單最常用的一種演算法,即輪詢調度
●理解舉例
有三個節點A、B、c
◆第一個用戶訪問會被指派到節點A
◆第二個用戶訪問會被指派到節點B
◆第三個用戶訪問會被指派到節點C
◆第四個用戶訪問繼續指派到節點A,輪詢分配訪問請求實作負載均衡效果
3.2 LC (Least Connections)
●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訪問量非常大時會引起負載不均衡,部分節點訪問量超大,影響業務使用
四、Haproxy搭建 Web 群集
實驗所需安裝包
haproxy-1.5.19.tar.gz
nginx-1.12.0.tar.gz
環境配置
| 主機 | 作業系統 | IP地址 | 所需軟體/安裝包/工具 |
|---|---|---|---|
| Haproxy-Server | CentOS7 | 192.168.28.10 | haproxy-1.5.19.tar.gz |
| Nginx-Server1 | CentOS7 | 192.168.28.20 | nginx-1.12.0.tar.gz |
| Nginx-Server2 | CentOS7 | 192.168.28.30 | nginx-1.12.0.tar.gz |
| 客戶端 | win10 | 192.168.28.15 | ----- |
1、編譯安裝Nginx服務器
在前面的文章中,已經介紹過了,這里就不作贅述了
在Nginx網站服務配置中的(一、編譯安裝Nginx服務)已經解釋的很清楚了,
我們換一種安裝方法,用腳本安裝,方便快捷,
編譯安裝nginx服務,使用腳本前請將相應的安裝包放入/opt目錄下
vim /opt/nginx.sh #編輯nginx腳本
#!/bin/bash
yum -y install 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 #編譯及安裝
#軟鏈接便于系統識別nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#添加nginx系統服務
echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service
#賦權及開啟服務、開啟開機自啟
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
cd /opt
. nginx.sh #執行腳本
Nginx-Server1:192.168.28.20
echo "this is 192.168.28.20 web" > /usr/local/nginx/html/test.html
Nginx-Server2:192.168.28.30
echo "this is 192.168.28.30 web" > /usr/local/nginx/html/test.html
2、部署haproxy服務器(Haproxy-Server:192.168.28.10)
(1)關閉防火墻,將安裝Haproxy所需軟體包傳到/opt目錄下
systemctl stop firewalld
setenforce 0
cd /opt
haproxy-1.5.19.tar.gz #軟體包版本
(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
引數說明
#使用uname -r查看內核,如:2.6.18-371.el5,此時該引數用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
TARGET=linux26 #內核版本
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為日志設備,默認存放到系統日志3
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
option httpchk GET /test.html #檢查服務器的test.html檔案
balance roundrobin #負載均衡調度演算法使用輪詢演算法roundrobin
server inst1 192.168.163.11:80 check inter 2000 fall 3 #定義在線節點
server inst2 192.168.163.12:80 check inter 2000 fall 3
#--引數說明----------------
balance roundrobin #負載均衡調度演算法
#輪詢演算法: roundrobin;最小連接數演算法: leastconn;來源訪問調度演算法: source,類似于nginx的ip_hash
check inter 2000 #表示haproxy服務器和節點之間的一個心跳頻率
fall 3 #表示連續三次檢測不到心跳頻率則認為該節點失效
若節點配置后帶有""backup"表示該節點只是個備份節點,只有主節點失效該節點才會上,不攜帶"backup",表示為主節點,和其它主節點共同提供服務,

(4)添加并啟動Haproxy服務
如果你先做Haproxy服務器,這步需要等到Nginx服務器搭建好再去做,不然會啟動失敗
#將解壓包內的腳本復制到/etc/init.d目錄下,改名為haproxy(/etc/init.d目錄下存放著系統服務的管理腳本)
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ll
chmod +x haproxy #給腳本添加執行權限
chkconfig --add /etc/init.d/haproxy #給系統添加服務
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #將haproxy的命令做軟連接到系統命令路徑下
service haproxy start #開啟服務

3、測驗 Web集群
在客戶端使用瀏覽器打開 http://192.168.28.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的訪問請求日志資訊

在配置完成時,沒有日志檔案的,在客戶端訪問過后,再回到服務器查看日志,這時日志就有內容了
六、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/266311.html
標籤:其他
下一篇:day02 環境搭建_虛擬機準備
