HAproxy部署配置

来源:http://www.cnblogs.com/Sunzz/archive/2017/08/07/7300777.html
-Advertisement-
Play Games

HAproxy部署配置 拓撲圖 說明: 一 HAProxy主機配置 1 global部分 用來設定全局配置參數,屬於進程級的配置,通常和操作系統配置有關。 2 default部分 預設參數的配置部分。在次部分配置的參數值,預設會自動引用到下麵frontend、backend、listen部分中,因此 ...


HAproxy部署配置

拓撲圖

說明:

haproxy伺服器IP:172.16.253.200/16 (外網)、192.168.29.140/24(內網)
博客伺服器組IP:192.168.29.130/24、192.168.29.131/24
網站伺服器組IP:192.168.29.120/24、192.168.29.121/24
預設伺服器組IP:192.168.29.110/24、192.168.29.111/24

一 HAProxy主機配置

[root@local ~]# yum install haproxy -y
[root@local ~]# vim   /etc/haproxy/haproxy.cfg

1 global部分

用來設定全局配置參數,屬於進程級的配置,通常和操作系統配置有關。

global
    log         127.0.0.1 local2 info       ##全局日誌配置,local2為日誌設備,info為日誌級別
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid        ##指定HAProxy進程的Pid文件,啟動進程的用戶必須有訪問次文件的許可權
    maxconn     4000        ##設定每個進程可接受的最大併發連接數
    user        haproxy     ##設置運行haproxy進程的用戶,可使用UID代替
    group       haproxy     ##設置運行haproxy進程的組,可使用GID代替
    daemon          ##設置haproxy進程進入後臺運行
   
stats socket /var/lib/haproxy/stats

2 default部分

預設參數的配置部分。在次部分配置的參數值,預設會自動引用到下麵frontend、backend、listen部分中,因此,如果某些參數屬於公共的配置,只需在default部分添加一次即可。而如果在frontend、backend、和listen部分也配置了與default部分一樣的參數,那麼default部分的參數對應的值自動被覆蓋。

defaults
    mode                    http        ##設置haproxy實例預設運行模式,有tcp、http、health三個值
    log                     global      ##
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3           ##設置後端伺服器的失敗重試次數
    timeout http-request    10s     ##
    timeout queue           1m
    timeout connect         5s
    timeout client          10s     ##設置連接客戶端發送數據時的最長等待時間,預設單位為毫秒
    timeout server          10s     ##設置伺服器端回應客戶端數據發送的最長等待時間,預設單位為毫秒
    timeout http-keep-alive 10s ##持久連接的持久時長
    timeout check           2s      ##設置對後端伺服器的監測超時時間,預設單位為毫秒
maxconn                 3000

3 listen部分

此部分是frontend和backend部分的結合體

listen  admin_stats
    bind    0.0.0.0:19088           ##設置監控統計頁面的監聽的IP和埠
    mode    http
    log 127.0.0.1 local2 err
    stats   refresh 30s         ##設置哈haproxy監控統計頁面的自動刷新時間
    stats   uri /haproxy-status ##設置haproxy監控統計頁面的URL路徑,可隨意指定,例如“stats uri  /haproxy-status”,就可以通過http://IP:PORT//haproxy-status查看
    stats   realm   welcome login\ Haproxy      ##設置登錄haproxy統計頁面是密碼框上的提示信息
    stats   auth    admin:admin     ##設置登錄統計頁面的用戶名和密碼,可同時設置多個,每行一個
    stats   hide-version            ##用來隱藏統計頁面上haproxy的版本信息
    stats   admin   if  TRUE        ##通過設置此選項,可以在監控頁面上手工啟動或者禁用後端伺服器

4 frontend部分

此部分用於設置接收用戶請求的前端虛擬節點。frontend可以根據ACL規則直接指定要使用的後端backend。
(1)frontend部分

frontend  www
    bind    *:80        ##此選項只能在frontend和listen部分使用,用於定義一個或多個監聽的套接字。格式為:bind  [<address>:<port_range>]  interface   <interface>
    mode    http        ##實例的運行模式
    option  httplog     ##啟用日誌記錄http請求。預設haproxy日誌不記錄http請求
    option  forwardfor  ##在由haproxy發往後端主機的請求報文中添加“X-Forwarded-For”首部,其值前端客戶端的地址;用於向後端主發送真實的客戶端IP 
    option  httpclose   ##次選項表示在客戶端和伺服器端完成一次連接請求後,haproxy自動關閉此TCP連接
    log global      ##表示使用全局的日誌級別,引用global部分定義的log配置

(2)通過haproxy的ACL規則實現智能負載均衡
haproxy通過ACL完成兩個主要的功能:

    1)通過設置ACL的規則檢查客戶端請求是否合法。如果符合ACL規則要求,那麼將放行,如果不符合規則,則直接中斷請求。
    2)符合ACL規則要求的請求將被提交到後端的backend伺服器集群,進而實現基於ACL規則的負載均衡
    3)haproxy的ACL規則通常用在frontend部分中

格式為:acl 自定義的acl名稱 acl方法 -i [ 匹配的路徑或文件]

    acl:為關鍵字,表示定義ACL規則的開始,後面跟上自定義的ACL名稱。
    acl方法:這個欄位定義ACL的方法,haproxy定義了很多ACL方法,常用的有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等
    -i:表示不區分大小寫,後面跟上要匹配的路徑、文件或正則表達式。
    說明:與ACL規則一起使用的haproxy參數還有use_backend,use_backend  後面跟實例名,表示在滿足ACL規則後去哪裡請求哪個backend實例
    acl host_www    hdr_reg(host) -i  ^(www.tb.com|tb.com)  ##正則表達式匹配,表示如果開都有www.tb.com或tb.com 
    acl host_blog   hdr_beg(host) -i blog.          ##表示如果首碼包含blog.字元,則匹配
    use_backend server_www if host_www      ##表示如果滿足host_www 則去請求後端的server_www主機
    use_backend server_blog if host_blog
    default_backend server_default      ##表示如果前面都不匹配,則去請求server_default主機

5 backend部分

此部分用於設置後端伺服器集群的配置,也是用來添加一組真實伺服器,以處理客戶端的請求。

backend server_default      定義後端主機,格式為:backend  SERVER_NAME
    mode    http            ##實例的運行模式
    option  redispatch      ##次參數用於cookie保持的環境中
    option  abortonclose        ##自動結束當前隊列中處理時間較長的進程
    balance  roundrobin     ##定義負載均衡演算法,roundrobin為加權輪詢演算法
        cookie  SERVERID        ##表示允許向cookie中插入SERVERID
    option httpchk GET /check_status.html   ##啟用http的服務監測功能,採用GET方式,通過監測check_status,html頁面的狀態來確定伺服器的狀態
    server default1 192.168.29.110:80 cookie default1 weight 2 check inter 2000 rise 2 fall 3   
    server default2 192.168.29.111:80 cookie default2 weight 2 check inter 2000 rise 2 fall 3   
定義後端主機,格式為:server  <name>  <address>[:port]  [param*]
    param為一系列參數,
    cookie為當前server指定其cookie值,用於實現基於cookie的會話黏性
    weight 設置後端伺服器的權重,
    check表示啟用後端伺服器執行健康狀態監測,
    rise設置從故障狀態轉換到正常狀態需要成功檢查的次數,
    fall設置後端伺服器從從正常狀態轉換為不可以狀態需要檢查的次數
    disabled:標記為不可用;
    redir <prefix>:將發往此server的所有GET和HEAD類的請求重定向至指定的URL
backend server_www
    mode    http
    option  redispatch
    option  abortonclose
    balance source      ##定義負載均衡演算法,source為基於源IP 的演算法,可以使同一客戶端IP的請求始終被轉發至某台特定的後端伺服器
        cookie  SERVERID    
    option httpchk GET /check_status.jsp
    server www1 192.168.29.120:80 cookie www1 weight 6 check inter 2000 rise 2 fall 3
    server www2 192.168.29.121:80 cookie www2 weight 6 check inter 2000 rise 2 fall 3
backend server_blog
    mode    http
    option  redispatch
    option  abortonclose
    balance roundrobin
        cookie  SERVERID    
    option httpchk GET /check_blog.php
    server blog1 192.168.29.130:80 cookie blog1 weight 5 check inter 2000 rise 2 fall 3
    server blog2 192.168.29.131:80 cookie blog2 weight 5 check inter 2000 rise 2 fall 3

二 後端伺服器配置

1 預設伺服器配置

(1)虛擬主機配置

[root@local ~]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.29.110:80>
        DocumentRoot "/data/web1"
<Directory "/data/web1/">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
</VirtualHost>

(2)狀態監測頁配置

[root@local ~]# echo "This is check_status.page ip:192.168.29.110" > /data/web1/check_status.html

(3)預設頁面配置

[root@local ~]# echo "This is default page ip:192.168.29.110" > /data/web1/index.html

按照以上方式配置192.168.29.111主機

2 網站伺服器配置

(1)虛擬主機配置

[root@local ~]# vim /etc/httpd/conf.d/vhost.conf 
<VirtualHost 192.168.29.120:80>
        DocumentRoot "/data/web1"
        ServerName www.tb.com
<Directory "/data/web1/">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
</VirtualHost>

(2)狀態監測頁配置

[root@local ~]# echo "This is check_status page ip:192.168.29.120" > /data/web1/check_status.jsp

(3)預設頁面配置

[root@local ~]# echo "This is www page ip:192.168.29.120" > /data/web1/index.html

按照以上方式配置192.168.29.121主機

3 博客伺服器組

(1)配置虛擬主機

[root@local ~]# vim /etc/httpd/conf.d/vhost.conf 
<VirtualHost 192.168.29.130:80>
        DocumentRoot "/data/web1"
        ServerName www.blog.tb.com
<Directory "/data/web1/">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
</VirtualHost>

(2)狀態監測頁配置

[root@local ~]# echo "This is check_status page ip:192.168.29.130" > /data/web1/check_blog.php

(3)預設頁面配置

[root@local ~]# echo "This is blog page ip:192.168.29.130" > /data/web1/index.html

按照以上方式配置192.168.29.131主機

三 測試

1 啟動haproxy

[root@local ~]# systemctl start haproxy

2 測試

(1)訪問網站伺服器

[root@local ~]# for i in {1..10} ; do curl www.tb.com ; done
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120

由於有會話粘性,所有都是用一臺伺服器響應請求
(2)訪問blog伺服器

[root@local ~]# for i in {1..10} ; do curl blog.tb.com ; done
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130

可以看到,輪詢演算法生效了
(3)測試預設伺服器

[root@local ~]# for i in {1..10} ; do curl 172.16.253.200 ; done
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111

成功了

3 haproxy狀態監測頁面

(1)輸入http://172.16.253.200:19088/haproxy-status登錄狀態監測頁
(2)輸入用戶名密碼

(3)登錄成功


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文目錄: 1.1 概述 1.2 RPC不可不知的原理 1.2.1 RPC原理 1.2.2 RCP工具介紹 1.3 啟動NFS 1.4 配置導出目錄和掛載使用 1.4.1 配置NFS導出目錄 1.4.2 掛載NFS文件系統 1.4.3 NFS偽文件系統 1.5 showmount命令 1.6 NFS ...
  • 曾經最喜歡Fedora 版本的Linux,但是因為現在Fedora的界面實在太花里胡哨了,所以最近開始搗鼓CenOS,本來 RedHat的EL版本也是一個不錯的選擇,最後想想還是用社區版的。 話說CentOS本身自帶的文檔閱讀器可以閱讀PDF文件,但是沒有手型工具,這個體驗實在是不好,因此自己打算安 ...
  • 原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。 expr 是一款表達式計算工具,使用它能完成表達式的求值操作。 例如,兩個數相加(註意使用的是反引號 ` 而不是單引號 '): #!/bin/bash val=`expr 2 + 2` ec ...
  • 我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式為:$n。n 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推…… 以下實例我們向腳本傳遞三個參數,並分別輸出,其中 $0 為執行的文件名: #!/bin/bash echo "Shell 傳遞參數 ...
  • sra文件轉換為fastq格式 fastq-dump -h --split-3 也就是說如果SRA文件中只有一個文件,那麼這個參數就會被忽略。如果原文件中有兩個文件,那麼它就會把成對的文件按*_1.fastq,*_2.fastq這樣分開。如果還出現了第三個文件,就意味著這個文件本身是未成配對的部分。 ...
  • rpc.statd程式主要實現NFS鎖相關內容,如普通的文件鎖(NLM、NSM)、文件委托、租約等,但註意,它和sm-notify組合起來才能實現整個NFS鎖機制,具體見下文翻譯文檔中的說明。 以下是NFS相關翻譯篇: 回到系列文章大綱:http://www.cnblogs.com/f-ck-nee ...
  • 以下是NFS相關翻譯篇: 回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7302577.html 註:若您覺得這篇文章還不錯請點擊下右下角 ...
  • LNMP編譯安裝之nginx關聯php--圖文詳解 1、前言 之前已經介紹了nginx,php,mysql的編譯安裝過程,但nginx和php的關聯沒有涉及,導致網頁不能正常使用php功能,所有本編介紹如何將nginx和php進行關聯,使*.php文件可以正常在瀏覽器訪問。 2、準備步驟 2.1、修 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...