集群(三)——haproxy+nginx搭建web集群
生活随笔
收集整理的這篇文章主要介紹了
集群(三)——haproxy+nginx搭建web集群
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
集群(三)——haproxy+nginx搭建web集群
- 一、Haproxy 前言
- 二、Haproxy 簡介
- 1、常見的web集群調度器
- 2、Haproxy應用分析
- 3、Haproxy高性能負載均衡的主要優點:
- 4、四層與七層負載的主要區別
- 三、Haproxy調度算法原理
- 四、LVS、Haproxy、nginx區別
- 1、LVS和Haproxy應用分析
- 2、nginx和LVS、Haproxy的區別
- ①、nginx
- ②、LVS
- ③、Haproxy
- 五、實驗:Haproxy搭建 Web 群集
- 1、規劃
- 2、部署haproxy服務器(192.168.184.10)
- 3、編譯安裝Nginx服務器
- 4、啟動Haproxy服務
- 5、客戶端測試
一、Haproxy 前言
- Haproxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基于TCP和HTT的應用程序代理。
- Haproxy特別適用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。Haproxy運行在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。
- Haproxy實現了一種事件驅動,單一進程模型,此模型支持非常大的并發連接數。多進程或多線程模型受內存限制系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間(User-Space)實現所有這些任務,所以沒有這些問題。
- 此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以使每個CPU時間片(Cycle)做更多的工作。
- 包括GitHub,Bitbucket,stack overflow,Reddit Tumblr,Twitter 和 Tuenti 在內的知名網站,及亞馬遜網絡服務系統都使用了Haproxy
二、Haproxy 簡介
1、常見的web集群調度器
- 目前常見的web集群調度器分為軟件和硬件
- 軟件通常使用開源的LVS、 Haproxy、Nginx
- LVS性能最好,但是搭建相對復雜;Nginx的upstream模塊支持群集功能,但是對群集節點健康檢查功能不強,高并發性能沒有Haproxy好。
- 硬件一般使用比較多的是F5,也有很多人使用國內的一些產品,如梭子魚、綠盟等
2、Haproxy應用分析
- LVS在企業應用中抗負載能力很強,但存在不足
- LVS不支持正則處理,不能實現動靜分離
- 對于大型網站,LVS的實施配置復雜,維護成本相對較高
- Haproxy是一款可提供高可用性、負載均衡、及基于TCP和HTTP應用的代理的軟件適用于負載大的web站點運行在硬件上可支持數以萬計的并發連接的連接請求
3、Haproxy高性能負載均衡的主要優點:
- Haproxy在負載均衡速度和并發處理上是優于Nginx
- Haproxy支持虛擬主機,可以工作在4、7層
- 能夠補充Nginx的一些缺點,比如session的保持、Cookie的引導等工作
- 支持url檢測后端的服務器的狀態
- Haproxy可以對Mysql進行負載均衡,對后端的DB節點進行檢測和負載均衡
- 支持很多負載均衡算法, Round-robin (輪詢) 、weight-round-robin (加權輪詢)、 source (原地址保持) 、RI(請求URL) 、rdp-cookie (根據cookie)
4、四層與七層負載的主要區別
-
四層負載均衡器是通過分析IP層及TCP/UDP層的流量實現的基于“IP +端口”的負載均衡,主要通過報文的目標地址和端口配合負載均衡算法選擇后端真實服務器,確定是否需要對報文進行修改(根據需求,可能會修改目標地址、源地址、MAC地址等)并將數據轉發至選出的后端真實服務器。
-
七層負載均衡器是基于應用層信息(如URL、Cookies等)的負載均衡。主要依據報文的內容配合負載均衡算法選擇后端真實服務器,然后再分發請求到真實服務器進行處理,也稱"內容交換器"。客戶端與負載均衡器、負載均衡器與后端真實服務器之間會分別建立TCP連接。
三、Haproxy調度算法原理
- Haproxy支持多種調度算法,最常用的有三種
- RR (Round Robin):RR算法是最簡單常用的一種算法,即輪詢調度
- LC(Least Connections):最小連接數算法,根據后端的節點連接數大小動態分配前端請求。
- SH(Source Hashing):基于來源訪問調度算法,用于一些有Session會話記錄在服務器端的場景,可以基于來源的IP、Cookie等做集群調度
四、LVS、Haproxy、nginx區別
1、LVS和Haproxy應用分析
- LVS在企業應用中抗負載均衡能力很強,但存在不足
- LVS不支持正則處理(因為是應用層),不能實現動靜分離
- 對于大型網站,LVS的實施配置復雜,維護成本相對較高
- Haproxy是一塊可提供高可用性、負載均衡及基于TCP和HTTP應用的代理軟件
- 特別適合于負載特別大的web站點(可以承受高并發,可與Nginx配合)
- 運行在當前的硬件上可支持數以萬計的并發連接請求
2、nginx和LVS、Haproxy的區別
①、nginx
- 支持正則
- 只支持基于端口的健康檢查
- 不支持session的直接保持,但能通過IP_hash來解決
- 對網絡穩定性要求不高
- 反向代理能力強
- nginx社區活躍
②、LVS
- 只能基于四層端口轉發
- 在四層做分發作用,抗負載能力強
- 應用范圍廣(幾乎可以對所有應用做負載)
③、Haproxy
- 支持8種負載均衡策略
- 僅做負載均衡軟件使用,在高并發情況下性能優于nginx
- 支持URL健康檢測、支持session保持
五、實驗:Haproxy搭建 Web 群集
1、規劃
| Haproxy | 192.168.184.10 |
| nginx1 | 192.168.184.40 |
| nginx2 | 192.168.184.50 |
| centos客戶端 | 192.168.184.70 |
- 注:使用uname -r查看內核,如:2.6.18-371.el5,此時該參數用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
2、部署haproxy服務器(192.168.184.10)
systemctl stop firewalld setenforce 0cd /opt haproxy-1.5.19.tar.gzyum install -y pcre-devel bzip2-devel gcc gcc-c++ maketar zxvf haproxy-1.5.19.tar.gz cd haproxy-1.5.19/ make TARGET=linux2628 ARCH=x86_64 make install#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 webcluster 0.0.0.0:80 option httpchk GET /test.html #檢查服務器的test.html文件balance roundrobin #負載均衡調度算法使用輪詢算法roundrobinserver inst1 192.168.184.40:80 check inter 2000 fall 3 #定義在線節點server inst2 192.168.184.50:80 check inter 2000 fall 3
3、編譯安裝Nginx服務器
systemctl stop firewalld setenforce 0yum install -y pcre-devel zlib-devel gcc gcc-c++ make useradd -M -s /sbin/nologin nginxcd /opt tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginxmake && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx #啟動nginx 服務
4、啟動Haproxy服務
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy cd /etc/init.d/ ls chmod +x haproxy chkconfig --add /etc/init.d/haproxy ln -s /usr/local/sbin/haproxy /usr/sbin/haproxyservice haproxy start5、客戶端測試
總結
以上是生活随笔為你收集整理的集群(三)——haproxy+nginx搭建web集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存价格疯涨!销售员如何化解危机?
- 下一篇: XP操作系统重磅升级!全新ddr4内存助