haproxy實現高可用站點架構

    在負載均衡的調度器中,有個lvs,nginx,haproxy,lvs的搭建相比後兩者較困難些,而nginx的主要用處是輕量級的web服務器,haproxy是一種很好的高可用軟件,它可以基於4層和7層做高可用,分別表現在TCP上和http上,下面我們就通過一幅圖來了解haproxy的工作原理。

haproxy的工作模式:調度時發生的協議層次

     http:僅用於調度http協議的服務器,7層

          會對應用層數據做深入分析,因此支持7層過濾、處理、轉換等機制

 

     tcp:非http協議的服務器調度,包含https,4層

          通過在客戶端和後端的backend server之間建立一個全雙工的連接

 
後端提供兩個web服務器的節點,並且提供主頁以示區分,兩個節點的網段調爲自定義的vnet2

node1:

<h1>web1 test page</h1>

node2:

<h1>this is web2</h1>

然後,給這兩臺主機規劃IP地址

node1:211.70.160.15
node2:211.70.160.16
[root@node1 ~]ifconfig  eth0  211.70.160.15/24  up
[root@node2 ~]ifconfig  eth0  211.70.160.16/24  up

此時,我們就可以將兩個節點上的web服務啓動了

[root@node1 ~]service  httpd start

安裝haproxy軟件

[root@localhost ~]# yum install -y haproxy

將haproxy的日誌定向到rsyslog中,在rsyslog的配置文件中更改如下

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
local2.*               /var/log/haproxy.log     #將haproxy的日誌發往local2設施上

然後,重啓我們的rsyslog服務

[root@localhost ~]# service rsyslog restart

查看514端口是否在監聽

 

更改haproxy的配置文件,並且備份一份原有配置

[root@localhost haproxy]# cp haproxy.cfg haproxy.cfg.bak

刪除defaults段落後的所有內容,添加如下

frontend  main  *:80
    default_backend  webs
backend webs
    balance  roundrobin
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check
 
或者修改爲listen形式
listen  main  *:80
    balance  roundrobin
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check

啓動haproxy服務

[root@localhost haproxy]# service haproxy start

此時,haproxy的主機上已經監聽了80端口,可以使用ss查看

 

在我們的瀏覽器中進行驗證

刷新一次後,根據輪詢效果,會返回後端的node1和node2的網站主頁

使用基於source方法的haproxy調度

配置文件更改,只改了調度算法

frontend  main  *:80
    default_backend webs
backend webs
    balance  source
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check

重啓服務

[root@localhost haproxy]# service haproxy restart

再回到瀏覽器中查看

無論刷新多少次,出來的網頁都是node2節點上提供的web2的主網頁

使用基於cookie算法的haproxy

更改配置:

frontend  main
    bind :80
    default_backend webs
backend webs
    balance  source
    cookie web  insert nocache     #inset插入到http首部,nocache是中間的緩存服務器不允許緩存數據
    server s1 211.70.160.15 
    server s2 211.70.160.16

重啓haproxy服務

[root@localhost haproxy]# service haproxy restart

然後在瀏覽器中訪問我們的地址,並且查看http首部信息

實現cookie綁定的效果

 

將我們的調度算法改爲roundrobin輪詢,更改配置文件爲

frontend  main
    bind :80
    default_backend webs
backend webs
    balance  roundrobin
    cookie web  insert nocache
    server s1 211.70.160.15 cookie s1     #指定server的名稱,實現cookie綁定
    server s2 211.70.160.16 cookie s2
 
[root@localhost haproxy]# service haproxy reload

再爲後端的兩個web節點提供網頁

node1上:

[root@node1~ ]cat  /var/www/html/test.html
<h1>hello node1 test</h1>

node2上:

[root@node2~ ]cat  /var/www/html/test.html
<h1>hello node2 test</h1>

訪問我們的資源

無論我們怎麼刷新網頁,返回的都是node1上提供的網頁,因爲這裏的cookie實現了綁定的效果

啓動haproxy的狀態頁:stats

 

修改haproxy的配置文件,使之支持stats狀態頁顯示

frontend  main
    maxconn 4000
    bind :80
    default_backend webs
backend webs
    balance  roundrobin
    server s1 211.70.160.15 check port 80
    server s2 211.70.160.16 check port 80
    server b1 127.0.0.1:8080 backup
    stats enable     #開啓stats

此時,將後端的node1的web服務上線

[root@node1 ~]service httpd start

重新加載配置文件,在瀏覽器中訪問狀態也地址

[root@localhost haproxy]# service haproxy reload


圖示,node1的web服務在線,node2在線,但是web服務沒有啓動

active:後端服務器中的active  server

backup:後端服務器中的backup server

 

將backup主機加入健康監測,更改下面選項

server b1 127.0.0.1:8080 backup check port 8080

重新加載配置文件

[root@localhost haproxy]# service haproxy reload

對stats網頁做網頁訪問控制

stats  hide-version     #隱藏版本號
stats  scope    .      #當前的作用範圍
stats   uri   /haproxyadmin?stats     #自定義stats頁面的uri
stats   realm  haproxy\ statistics     #用於下面選項,提示用戶輸入用戶名密碼的顯示
stats   auth     statsadmin:password     #基於用戶名和密碼的認證

修改配置文件,使其具有認證功能,在backend中添加

    stats enable
    stats hide-version
    stats uri /hap?stats
    stats scope .
    stats realm INPUT\ your name & password
    stats auth admin:admin

重新加載配置,在瀏覽器中驗證

[root@localhost haproxy]# service haproxy reload

啓用stats的管理接口

stats admin if TRUE     #添加此項

重新加載配置

[root@localhost haproxy]# service haproxy reload

再次訪問

也可以將stats單獨放置在一個段落中,不在backend中了,雖然,這樣安全了,但是,看不到後端服務器的狀態了

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