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 

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章