Haproxy技術詳解
1、 介紹
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在當前的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶空間(User-Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在內的知名網站,及亞馬遜網絡服務系統都使用了HAProxy。javascript
【以上摘自百度百科】css
2、 原理
HAProxy 支持TCP(四層)和HTTP(七層)兩種代理模式,也是支持虛擬主機的。
HAProxy 的優勢可以補充 Nginx 的一些缺點,好比支持 Session 的保持,Cookie 的引導;同時支持經過獲取指定的 url 來檢測後端服務器的狀態。
HAProxy 跟 LVS 相似,自己就只是一款負載均衡軟件;單純從效率上來說 HAProxy 會比 Nginx 有更出色的負載均衡速度,在併發處理上也是優於 Nginx 的。
HAProxy 支持 TCP 協議的負載均衡轉發,能夠對 MySQL 讀進行負載均衡,對後端的 MySQL 節點進行檢測和負載均衡,你們能夠用 LVS+Keepalived 對 MySQL 主從作負載均衡。
HAProxy 負載均衡策略很是多:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據cookie)。java
3、 安裝(以CentOS爲例)
A.聯網yum安裝linux
$ sudo yum install haproxy -y
文件存放位置:web
/usr/sbin/haproxy #二進制文件
/usr/share/haproxy #共享文件
/var/lib/haproxy #庫文件
/etc/rc.d/init.d/haproxy #啓動二進制文件
/etc/logrotate.d/haproxy #日誌切割
/etc/sysconfig/haproxy #配置
/etc/haproxy #配置目錄redis
B.源碼編譯
haproxy-1.8.8.tar.gz源碼包地址:[從官網下載須要FQ]
連接: https://pan.baidu.com/s/1yj8qy2JB0Rh-WPy33T7aAw 提取碼: yy5d
# 編譯過程以下:vim
$ sudo tar –zxvf haproxy-1.8.8.tar.gc –C /usr/local/src $ sudo groupadd -r haproxy && useradd -g haproxy -M -s /sbin/nologin haproxy $ sudo cd /usr/local/src/haproxy-1.8.8 $ sudo make TARGET=linux26 ARCH=X86_64 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy $ sudo mkdir –p /etc/haproxy && vim /etc/haproxy/haproxy.cfg
###################################haproxy.cfg配置文件######################################後端
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend main *:5000 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static default_backend app backend static balance roundrobin server static 127.0.0.1:4331 check backend app balance roundrobin server app1 127.0.0.1:5001 check server app2 127.0.0.1:5002 check server app3 127.0.0.1:5003 check server app4 127.0.0.1:5004 check
###########################################################################################安全
4、 配置文件詳解服務器