本文記錄在CentOS 7環境下使用源碼安裝的方式安裝HAProxy。
HAProxy簡介
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的並發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千並發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow[4]、Reddit、Tumblr、Twitter和 Tuenti在內的知名網站,及亞馬遜網絡服務系統都使用了HAProxy。
安裝HAProxy
- 下載
由於到官網下載需要翻牆,這里提供百度雲鏈接。
鏈接: https://pan.baidu.com/s/1uaSJa3NHFiE1E6dk7iHMwQ 提取碼: irz6
- 將haproxy-1.7.8.tar.gz拷貝至/opt目錄下,解壓縮:
tar zxvf haproxy-1.7.8.tar.gz
- 進入目錄,編譯成可執行文件。
將源代碼解壓之后,需要運行make來將HAProxy編譯成為可執行文件。如果是在Linux2.6系統上面進行編譯的話,需要設置TARGET=linux26以開啟epoll支持,這也是為什么網上許多博客里面都是這么寫的。對於其他的UNIX系統來說,直接采用TARGET=generic方式,本文進行安裝的系統為CentOS7 ,內核3.10版本。
cd haproxy-1.7.8
make TARGET=generic
執行完畢之后,目錄下出現haproxy的可執行文件。
- 配置環境變量
為方便使用,可以進行環境變量的配置。在/etc/profile中加入haproxy的路徑:
export PATH=$PATH:/opt/haproxy-1.7.8/haproxy
最后執行source /etc/profile
讓此環境變量生效。
配置HAProxy
HAProxy配置文件說明
HAProxy配置文件通常分為三個部分,即global、defaults和listen。global為全局配置,defaults為默認配置,listen為應用組件配置。
global為全局配置部分,屬於進程級別的配置,通常和使用的操作系統配置相關。
defaults配置項配置默認參數,會被應用組件繼承,如果在應用組件中沒有特別聲明,將使用默認配置參數。
以配置RabbitMQ集群的負載均衡為例,在安裝目錄下面新建一個haproxy.cfg,輸入下面配置信息:
global
#日志輸出配置,所有日志都記錄在本機,通過local0輸出
log 127.0.0.1 local0 info
#最大連接數
maxconn 10240
#以守護進程方式運行
daemon
defaults
#應用全局的日志配置
log global
mode http
#超時配置
timeout connect 5000
timeout client 5000
timeout server 5000
timeout check 2000
listen http_front #haproxy的客戶頁面
bind 192.168.72.128:8888
mode http
option httplog
stats uri /haproxy
stats auth admin:123456
stats refresh 5s
stats enable
listen haproxy #負載均衡的名字
bind 0.0.0.0:5666 #對外提供的虛擬的端口
option tcplog
mode tcp
#輪詢算法
balance roundrobin
server rabbit1 192.168.72.128:5672 check inter 5000 rise 2 fall 2
server rabbit2 192.168.72.128:5673 check inter 5000 rise 2 fall 2
server rabbit3 192.168.72.128:5674 check inter 5000 rise 2 fall 2
啟動
啟動命令:
/opt/haproxy-1.7.8/haproxy -f /opt/haproxy-1.7.8/haproxy.cfg
驗證是否啟動成功:
[root@localhost haproxy-1.7.8]# lsof -i:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 45031 root 3u IPv4 228341 0t0 TCP localhost.localdomain:ddi-tcp-1 (LISTEN)
在瀏覽器上訪問http://192.168.72.128:8888/haproxy,輸入配置的用戶名和密碼登錄以后,可以看到如下畫面: