HAProxy介紹及相關實驗

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基于TCP和HTTP的應用程序代理。

本節索引:

一、HAProxy介紹

二、HAProxy服務配置

三、實驗:實現HAProxy反向代理

四、實驗:實現根據url(uri算法)和客戶端來源(hdr算法)進行調度

五、實驗:實現基于cookie的會話綁定

六、實驗:啟用HAproxy統計接口

七、實驗:Errorfile實現自定義錯誤頁,狀態碼

 

一、HAPrxoy介紹

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基于tcp和

http的應用程序代理。

mode http:七層反向代理,受端口數量限制

mode tcp:四層反向代理,不受套接字文件數量限制

 

官方網站:

http://www.haproxy.org

http://www.haproxy.com

官方文檔:

http://cbonte.github.io/haproxy-dconv/

 

HAProxy特別適用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行

在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整合進

您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

 

HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的并發連接數。多進程或多線程模型受

內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。事件驅動模型因為在有更

好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,

在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以 使每個CPU時間片(Cycle)做

更多的工作。

建議:生產環境運行在單進程模型下,便于分析,排查問題

 

二、HAProxy服務配置

程序環境:

主程序:/usr/sbin/haproxy

主配置文件:/etc/haproxy/haproxy.cfg

Unit file:/usr/lib/systemd/system/haproxy.service

 

配置段:

???? global:全局配置段

進程及安全配置相關的參數

性能調整相關參數

Debug參數

用戶列表

peers

proxies:代理配置段

defaults:為frontend, listen, backend提供默認配置;

fronted:前端,相當于nginx, server {}

backend:后端,相當于nginx, upstream {}

listen:同時擁前端和后端

 

簡單的配置示例:

frontend web

??????????????????????? bind *:80??????

??????????????????????? default_backend???? websrvs

backend websrvs

??????????????????????? balance roundrobin

??????????????????????? server srv1 172.16.100.6:80 check

??????????????????????? server srv2 172.16.100.7:80 check

 

 

global配置參數:

進程及安全管理:chroot, daemon,user, group, uid, gid

log:定義全局的syslog服務器;最多可以定義兩個;

log <address> [len <length>] <facility> [max level [min level]]

 

nbproc <number>:要啟動的haproxy的進程數量;

ulimit-n <number>:每個haproxy進程可打開的最大文件數;

 

性能調整:

maxconn <number>:設定每個haproxy進程所能接受的最大并發連接數;

Sets the maximum per-process number of concurrent connections to <number>.

總體的并發連接數:nbproc * maxconn

maxconnrate <number>:每個進程每秒種所能創建的最大連接數量;

Sets the maximum per-process number of connections per second to <number>.

maxsessrate <number>:每個進程每秒所能創建最大會話數

maxsslconn <number>:設定每個haproxy進程所能接受的ssl的最大并發連接數;

Sets the maximum per-process number of concurrent SSL connections to <number>.

?spread-checks <0..50, in percent>

 

三、實驗:實現HAProxy反向代理

前期準備:

虛擬機4臺

HAproxy192.168.30.10

node1192.168.30.17

node2192.168.30.27

Client:192.168.30.16

 

具體步驟:

HAProxy服務器操作:

yum install haproxy

修改配置文件

vim /etc/haproxy/haproxy.cfg

frontend main *:80

???????? default_backend? websrvs

 

backend websrvs

???????? balance roundrobin

???????? server websrv1 192.168.30.17:80 check????????? #check 健康性檢查

???????? server websrv2 192.168.30.27:80 check

1

重啟haproxy

systemctl restart haproxy

 

node1,node2開啟http服務

[root@node1 ~]# systemctl start httpd

[root@node1 ~]# echo Backend Server 1 > /var/www/html/index.html

 

[root@node2 ~]# systemctl start httpd

[root@node2 ~]# echo Backend Server 2 > /var/www/html/index.html

 

客戶端訪問測試:

2

 

添加權重:

vim /etc/haproxy/haproxy.cfg

backend websrvs

??? balance???? roundrobin

??? server? websrvs1 192.168.30.17:80 check weight 2

??? server? websrvs2 192.168.30.27:80 check

重啟HAProxy服務網

systemctl restart haproxy.service

 

訪問測試:

3

 

四、實驗:實現根據url(uri算法)和客戶端來源(hdr算法)進行調度

實現uri算法

對同一url的訪問請求都調度至同一個后端服務器

注意:如果HAProxy調度后端為緩存服務器,就要使用uri算法,且使用動態算法,一致性哈希

實驗前期準備承接實現HAProxy反向代理中的環境

 

具體步驟:

修改配置文件

vim /etc/haproxy/haproxy.cfg

1

重啟haproxy服務

systemctl restart haproxy.service

 

在node1,node2上分別創建http頁面test1–test10

2

訪問測試:

3

 

實現hdr算法

來自同一客戶端的請求都調度至同一個后端服務器

修改配置文件

vim /etc/haproxy/haproxy.cfg

4

重啟haproxy服務

systemctl restart haproxy.service

訪問測試:

5

 

五、實驗:實現基于cookie的會話綁定

前期準備:

虛擬機4臺

HAproxy192.168.30.10

node1192.168.30.17

node2192.168.30.27

Client:192.168.30.16

 

具體步驟:

修改配置文件

vim /etc/haproxy/haproxy.cfg

1

重啟haproxy服務

systemctl restart haproxy.service

訪問測試:

重啟服務前在server1與server2之間輪詢調度,重啟后將綁定在其中一臺server中

2

注意:curl命令之間訪問不能綁定cookie

 

 

六、實驗:啟用HAproxy統計接口

統計接口啟用相關的參數:

? stats enable

啟用統計頁;基于默認的參數啟用stats page;

????????????????????????? – stats uri?? : /haproxy?stats

????????????????????????? – stats realm : “HAProxy Statistics”

????????????????????????? – stats auth? : no authentication

????????????????????????? – stats scope : no restriction

????????????????????????????????????????????????????

??? stats auth <user>:<passwd>

認證時的賬號和密碼,可使用多次;

 

???? stats realm <realm>

認證時的realm;

 

??????? stats uri <prefix>

自定義stats page uri

 

????? stats refresh <delay>

設定自動刷新時間間隔;

 

???? stats admin { if | unless } <cond>

啟用stats page中的管理功能

 

具體步驟:

只需在frontend或者backend中添加一行

stats enable

1

重啟haproxy服務

systemctl restart haproxy.service

 

瀏覽器訪問:http://192.168.30.10/haproxy?stats

2

避免狀態頁被其他客戶端訪問:

(1)修改狀態頁監聽端口

3

(2)修改狀態頁url

4

(3)添加安全認證

5

6

 

啟用state page中的管理功能:

可利用此功能實現腳本執行發布,網上搜索基于haproxy的發布腳本

7

再次訪問:

8

 

七、實驗:Errorfile實現自定義錯誤頁,狀態碼

修改前端響應報文及后端請求報文頭部信息

前端響應報文刪除一個頭部信息

1

修改前的報文頭部信息:

2

訪問測試

3

前端響應報文添加一個頭部信息

4

訪問測試

5

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/102826

(1)
wangxczwangxcz
上一篇 2018-07-13
下一篇 2018-07-13

相關推薦

  • Linux的命令

    Linux的命令機制 命令格式 COMMAND [OPTIONS…] [ARGUMENTS…]選項:用于啟用或關閉命令的某個或某些功能短選項:-c 例如:-l, -h長選項:–word 例如:–all, –human-readable參數:命令的作用對象: 比如文件名和作用名 注意 1. *多個選項…

    Linux筆記 2018-04-01
  • Linux系統啟動相關

    Linux系統啟動相關

    2018-04-13
  • rpm指令詳解

    程序包管理器: 功能:將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件,從而更方便地實現程序包的安裝、升級、卸載和查詢等管理操作; ? 1、程序包的組成清單(每個程序包都單獨實現); ? ? ? ? 文件清單 ? ? ? ? ?安裝或卸載時運行的腳本 ? 2、數據庫(公共) ? ? ? ?程序包的名稱和版本; ? ? ? 依賴關系; ? ? ? 功能…

    Linux筆記 2018-03-30
  • 文本處理工具

    文本處理小工具 tr tr [選項]…SET1 [SET2] 從標準輸入中替換、縮減和/或刪除字符,并將結果寫到標準輸出。 ? -c:取字符集的補集 ? -d:刪除所有屬于第一字符集的字符 ? -s:把連續重復的字符以單獨一個字符表示(壓縮) ? -t:將第一個字符集對應字符轉化為第二字符集對應的字符 #echo ‘tank zhang’ |tr a-z A…

    Linux筆記 2018-05-10
  • Linux基礎命令

    Linux基礎命令簡要介紹

    2018-03-30

評論列表(1條)

  • ely
    ely 2018-07-14 15:18

    寫的不錯

欧美性久久久久