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 14:27
下一篇 2018-07-13 20:54

相關推薦

  • Linux進程管理工具

    進程管理

    Linux筆記 2018-05-06
  • 第十一周作業

    1、搭建php-fpm工作方式的LAMP環境,實現wordpress正常訪問 1、 先安裝數據庫mariadb [root@bogon ~]# yum install mariadb-service 配置數據庫主文件 [root@bogon ~]# vim /etc/my.cnf.d/server.cnf 啟動數據庫 [root@bogon ~]# syst…

    Linux筆記 2018-06-10
  • N31第五周作業

    本周(7.16–7.22)第五周 1、簡述rpm與yum命令的常見選項,并舉例 rpm相關 rpm安裝 ? ? ? ? ? ? rpm {-i|–install} [install-options] PACKAGE_FILE … ?? ??? ??? [install-options]: ??????????????? -…

    Linux筆記 2018-07-23
  • 一些練習(4)

    一些練習(4) 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 復制/etc/skel目錄為/home/tuser1 改權限 2、編輯/etc/group文件,添加組hadoop。 vim直接添加hadoop組 3、手動編輯/etc/passwd文件新增一行,添加用戶ha…

    2018-07-16
  • 高效利用linux工作 之 學習命令行筆記(一)

    本節將先圍繞“為什么學習命令行?”這個問題來展開個人使用linux的近期總結

    2018-07-21
  • 正則表達式入門及應用 以grep sed為例

      ◆ 正則表達式正則表達式是由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符) 不表示字符字面意義,而表示控制或通配的功能。 它與shell的通配符既有相似也有不同。 ※ 轉義符\?可將帶有命令性質的符號作為一般字符使用。 正則表達式中,常用以下元字符來代表特定字符的集合: ◆ 分組 ??? 1、正則表達式中,可以用\(\) 將一個或多…

    2018-04-15

評論列表(1條)

  • ely
    ely 2018-07-14 15:18

    寫的不錯

欧美性久久久久