Blog.057 Haproxy 叢集
阿新 • • 發佈:2021-09-13
本章目錄
1. Haproxy 叢集
1.1 Haproxy 叢集特性
1.2 負載均衡策略
1.3 LVS、Nainx、Haproxy 的區別
2. Haproxy 叢集構建
2.1 構建步驟
3. Haproxy 叢集的 日誌重新定義
3.1 操作步驟
Haproxy 是一個使用 C 語言編寫的自由及開放原始碼軟體,其提供高可用性、負載均衡,以及基於 TCP 和 HTTP 的應用程式代理。
- 可靠性和穩定性非常好,可以與硬體級的F5負載均衡裝置相媲美;
- 最高可以同時維護40000-50000個併發連線,單位時間內處理的最大請求數為20000個,最大處理能力可達10Git/s;
- 支援多達8種負載均衡演算法,同時也支援會話保持;
- 支援虛機主機功能,從而實現web負載均衡更加靈活;
- 支援連線拒絕、全透明代理等獨特的功能;
- 擁有強大的ACL支援,用於訪問控制;
- 其獨特的彈性二叉樹資料結構,使資料結構的複雜性上升到了0(1),即資料的查尋速度不會隨著資料條目的增加而速度有所下降;
- 支援客戶端的keepalive功能,減少客戶端與haproxy的多次三次握手導致資源浪費,讓多個請求在一個tcp連線中完成;
- 支援TCP加速,零複製功能,類似於mmap機制;
- 支援響應池 (response buffering);
- 支援RDP協議;
- 基於源的粘性,類似nginx的ip hash功能,把來自同一客戶端的請求在一定時間內始終排程到上游的同一伺服器;
- 更好統計資料介面,其web介面顯示後端叢集中各個伺服器的接收、傳送、拒絕、錯誤等資料的統計資訊;
- 詳細的健康狀態檢測,web介面中有關於對上游伺服器的健康檢測狀態, 並提供了一定的管理功能;
- 基於流量的健康評估機制;
- 基於http認證;
- 基於命令列的管理介面;
- 日誌分析器,可對日誌進行分析
(1)roundrobin∶表示簡單的輪詢。
(2)static-rr∶表示根據權重。
(3)leastconn∶ 表示最少連線者先處理。
(4)source∶ 表示根據請求的源IP,類似Nginx的IP hash機制。
(5)ri∶表示根據請求的URI。
(6)rl_param∶表示根據HTTP請求頭來鎖定每 一 次HTTP請求。
(7)rdp-cookie (name)∶表示根據據cookie (name)來鎖定並雜湊每一次TCP請求。
- LVS基於Linux作業系統實現軟負載均衡,而 HAProxy 和 Nginx 是基於第三方應用實現的軟負載均衡;
- LVS是可實現4層的IP負載均衡技術,無法實現基於目錄、URL 的轉發。而 HAProxy 和 Nainx 都可以實現4層和7層技術,HAProxy 可提供 TCP 和HTTP應用的負載均衡綜合解決方案;
- LVS因為工作在ISO模型的第四層,其狀態監測功能單一, 而HAProxy在狀監測方面功能更豐富、強大, 可支援埠、URL、指令碼等多種狀態檢測方式;
- HAProxy 功能強大,但整體效能低於4層模式的LVS 負載均衡。
- Nginx 主要用幹 Web 伺服器或快取伺服器。
(1)實驗環境準備
Haproxy 伺服器:192.168.80.30
Nginx 伺服器1:192.168.80.10
Nginx 伺服器2:192.168.80.20
客戶端:192.168.80.200
(2)關閉防火牆,將安裝 Haproxy 所需軟體包傳到 /opt 目錄下
1 systemctl stop firewalld 2 setenforce 0 3 4 haproxy-1.5.19.tar.gz
(3)編譯安裝 Haproxy
1 yum install -y pcre-devel bzip2-devel gcc gcc-c++ make 2 3 tar zxvf haproxy-1.5.19.tar.gz 4 cd haproxy-1.5.19/ 5 make TARGET=linux2628 ARCH=x86_64 6 make install
(4)Haproxy 伺服器配置
1 mkdir /etc/haproxy 2 cp examples/haproxy.cfg /etc/haproxy/ 3 4 cd /etc/haproxy/ 5 vim haproxy.cfg
1 global 2 --4~5行--修改,配置日誌記錄,local0為日誌裝置,預設存放到系統日誌 3 log /dev/log local0 info 4 log /dev/log local0 notice 5 #log loghost local0 info 6 maxconn 4096 #最大連線數,需考慮ulimit -n限制 7 --8行--註釋,chroot執行路徑,為該服務自設定的根目錄,一般需將此行註釋掉 8 #chroot /usr/share/haproxy 9 uid 99 #使用者UID 10 gid 99 #使用者GID 11 daemon #守護程序模式 12 13 defaults 14 log global #定義日誌為global配置中的日誌定義 15 mode http #模式為http 16 option httplog #採用http日誌格式記錄日誌 17 option dontlognull #不記錄健康檢查日誌資訊 18 retries 3 #檢查節點伺服器失敗次數,連續達到三次失敗,則認為節點不可用 19 redispatch #當伺服器負載很高時,自動結束當前佇列處理比較久的連線 20 maxconn 2000 #最大連線數 21 contimeout 5000 #連線超時時間 22 clitimeout 50000 #客戶端超時時間 23 srvtimeout 50000 #伺服器超時時間 24 25 --刪除下面所有listen項--,新增 26 listen webcluster 0.0.0.0:80 #定義一個名為webcluster的應用 27 option httpchk GET /test.html #檢查伺服器的test.html檔案 28 balance roundrobin #負載均衡排程演算法使用輪詢演算法roundrobin 29 server inst1 192.168.80.10:80 check inter 2000 fall 3 #定義線上節點 30 server inst2 192.168.80.20:80 check inter 2000 fall 3 31
(5)新增 haproxy 系統服務
1 cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy 2 cd /etc/init.d 3 chmod +x haproxy 4 chkconfig --add /etc/init.d/haproxy 5 6 ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy 7 service haproxy start 或 /etc/init.d/haproxy start
(6)節點伺服器部署
1 systemctl stop firewalld 2 setenforce 0 3 4 yum install -y pcre-devel zlib-devel gcc gcc-c++ make 5 6 useradd -M -s /sbin/nologin nginx 7 8 cd /opt 9 tar zxvf nginx-1.12.0.tar.gz -C /opt/ 10 11 cd nginx-1.12.0/ 12 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install 13 14 make && make install 15 16 --192.168.80.10--- 17 echo "this is accp web" > /usr/local/nginx/html/test.html 18 19 --192.168.80.20--- 20 echo "this is benet web" > /usr/local/nginx/html/test.html 21 22 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 23 24 nginx #啟動nginx 服務
(7)測試 Web群集
在客戶端使用瀏覽器開啟 http://192.168.80.30/test.html ,不斷重新整理瀏覽器測試負載均衡效果
3. Haproxy 叢集的 日誌重新定義
3.1 操作步驟
1 #預設haproxy的日誌是輸出到系統的syslog中,檢視起來不是非常方便,為了更好的管理haproxy的日誌,我們在生產環境中一般單獨定義出來。
需要將haproxy的info及notice日誌分別記錄到不同的日誌檔案中。 2 3 vim /etc/haproxy/haproxy.cfg 4 5 global 6 log /dev/log local0 info 7 log /dev/log local0 notice 8 9 service haproxy restart
1 #需要修改rsyslog配置,為了便於管理。
將haproxy相關的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d/下,rsyslog啟動時會自動載入此目錄下的所有配置檔案。 2 3 vim /etc/rsyslog.d/haproxy.conf 4 5 if ($programname == 'haproxy' and $syslogseverity-text == 'info') 6 then -/var/log/haproxy/haproxy-info.log 7 &~ 8 if ($programname == 'haproxy' and $syslogseverity-text == 'notice') 9 then -/var/log/haproxy/haproxy-notice.log 10 &~
1 這部分配置是將haproxy的info日誌記錄到/var/log/haproxy/haproxy-info.log下,將notice日誌記錄到/var/log/haproxy/haproxy-notice.log下。
“&~”表示當日志寫入到日誌檔案後,rsyslog停止處理這個資訊。 2 3 4 mkdir /var/log/haproxy/ 5 systemctl restart rsyslog.service 6 7 tail -f /var/log/haproxy/haproxy-info.log #檢視haproxy的訪問請求日誌資訊
-