HAProxy——概念,反向代理及負載均衡
1. HAProxy介紹
HaProxy是一個特別適用於高可用性環境的TCP/HTTP開源的反向代理和負載均衡軟件。在七層負載均衡方面的功能很強大(支持cookie track, header rewrite等等),支持雙機熱備,支持虛擬主機,支持健康檢查,同時還提供直觀的監控頁面,可以清晰的監控服務集羣的運行狀況。
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在內的知名網站,及亞馬遜網絡服務系統都使用了HAProxy。
2. Haproxy的配置
HAProxy的配通過程分爲3個主要部分:
- 命令行參數,這是最優先的
- global (全局)段,設置進程級參數;
- 代理配置段,通常位於default,listen,backend這樣的形式內。
配置文件的語法是由關鍵字後跟可選的一個或者多個參數(參數之間有空格)組成。如果字符串中包含空格,必須用\進行轉義.
Haproxy配置段中分五大部分:
global
:全局參數配置,進程級的,用來控制Haproxy啓動前的一些進程及系統設置defaults
:配置些默認的參數,可以被frontend,backend, listen段集成使用frontend
:用來匹配接收客戶所請求的域名、uri等,並針對不同的匹配做不同的請求處理backend
:定義後端服務器集羣,以及對後端服務器集羣的一些權重、隊列、連接數等選項的設置,類似於nginx中的upstream模塊listen
:可以理解爲frontend和backend的組合體。Haproxy配置文件的配通方法主要有兩種,一種是由前端(frontend )和後端( backend )配置塊組成,前端和後端都可以有多個。第二種方法是隻有一個listen配置塊來同時實現前端和後端。最常用也是推薦的方法爲第一種,即frontend和backend的模式
3. 實驗環境準備
準備三臺全新的虛擬機
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -b kane.qcow2 hh1
qemu-img create -f qcow2 -b kane.qcow2 hh2
qemu-img create -f qcow2 -b kane.qcow2 hh3
server1—haproxy
server2—服務端
server3—服務端
4. 實現反向代理及負載均衡
server1
yum install haproxy -y
cd /etc/haproxy/
vim haproxy.cfg
87 listen admin *:8080
88 stats enable
89 stats uri /status #監控頁面地址
90 stats auth admin:westos #管理帳號和密碼
91 stats refresh 5s #刷新頻率
92
93 listen westos *:80 #監聽的實例名稱,地址和端口
94 balance roundrobin #負載均衡算法
95 server web1 172.25.1.2:80 check
96 server web2 172.25.1.3:80 check
systemctl start haproxy #啓動haproxy
server2
yum install httpd -y
cd /var/www/html/
vim index.html
server2
systemctl start httpd
server3
yum install httpd -y
cd /var/www/html/
vim index.html
server3
systemctl start httpd
server1
netstat -antlp
測試:
打開遊覽器:
http://172.25.1.1:8080/status
真機:
curl 172.25.1.1
關閉server2
systemctl stop httpd
真機:
curl 172.25.1.1
生成日誌:
server1
cat /var/log/messages
查看日誌級別
vim haproxy.cfg
vim /etc/rsyslog.conf
15 $ModLoad imudp
16 $UDPServerRun 514
55 local2.* /var/log/haproxy
systemctl restart rsyslog.service
cat /var/log/haproxy