• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Haproxy的安裝與負載均衡配置

    標簽: 網絡協議  haproxy

    Haproxy是一款高性能的負載均衡軟件。因為其專注于負載均衡這一些事情,因此與Nginx比起來在負載均衡這件事情上做得更好,更專業。

    安裝環境:4臺Linux機,系統為CentOS 7.7。
    Haproxy版本:1.8.25

    ip作用
    172.16.122.101部署Haproxy,代理真實服務器1、2、3
    172.16.122.104真實服務器1,已經部署應用,并對外暴露http端口10900
    172.16.122.105真實服務器2,已經部署應用,并對外暴露http端口10900
    172.16.122.106真實服務器3,已經部署應用,并對外暴露http端口10900

    1、下載安裝Haproxy

    1.1、下載

    下載地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
    選擇一個版本進行下載,這里我用的是haproxy-1.8.25.tar.gz版本。

    1.2、安裝

    將下載的安裝包上傳至服務器。

    tar -xvf haproxy-1.8.25.tar.gz
    cd haproxy-1.8.25
    make TARGET=linux31 # uname -r 查看下內核版本,centos7.x是linux31、centos6.x是linux26
    sudo make install PREFIX=/usr/local/haproxy # 安裝到指定路徑
    cd /usr/local/haproxy/
    mkdir conf pid # 分別用來存放配置、進程文件
    

    2、配置Haproxy

    2.1、Haproxy配置文件組成

    Haproxy 配置文件根據功能和用途,主要有 5 個部分組成,但有些部分并不是必須的, 可以根據需要選擇相應的部分進行配置。

    1、global 部分
    用來設定全局配置參數,屬于進程級的配置,通常和操作系統配置有關。

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

    3、frontend 部分
    此部分用于設置接收用戶請求的前端虛擬節點。frontend 是在 Haproxy1.3 版本之后才引入的一個組件,同時引入的還有 backend 組件。通過引入這些組件,在很大程度上簡化了 Haproxy 配置文件的復雜性。frontend 可以根據 ACL 規則直接指定要使用的后端。

    4、backend 部分
    此部分用于設置集群后端服務集群的配置,也就是用來添加一組真實服務器,以處理前端用戶的請求。添加的真實服務器類似于 LVS 中的 real server 節點。

    5、listen 部分
    此部分是 frontend 部分和 backend 部分的結合體。在 Haproxy1.3 版本之前,Haproxy 的所有配置選項都在這個部分中設置。為了保持兼容性,Haproxy 新的版本仍然保留了 listen 組件的配置方式。目前在 Haproxy 中,兩種配置方式任選其一即可。

    2.2、Haproxy配置文件示例

    創建配置文件 haproxy.cfg

    cd conf
    vi haproxy.cfg
    

    配置內容

    global
        log 127.0.0.1 local0 debug
        maxconn 4096
        daemon
        nbproc 1 # 進程數,創建多個進程,能夠減少每個進程的任務隊列,但是過多的進程可能會導致進程的崩潰
        pidfile /usr/local/haproxy/pid/haproxy.pid
    defaults
        mode http
        retries 3 # 連接后端服務器失敗的次數如果超過這里設置的值,haproxy會將對應的后端服務器標記為不可用
        timeout connect 10s
        timeout client 20s
        timeout server 30s
        timeout check 5s
    # 接入配置
    frontend http_in
        bind *:11000
        mode http
        option httpclose # 此選項表示在客戶端和服務器端完成一次連接請求后,haproxy將主動關閉此TCP連接
        default_backend http_in_forward
    # 接出配置
    backend http_in_forward
        mode http
        balance roundrobin
        option abortonclose # 在服務器負載很高的情況下,自動結束掉當前隊列中處理時間比較長的鏈接
        server real_server1 172.16.122.104:10900 check inter 10000 rise 1 fall 3 weight 1
        server real_server2 172.16.122.105:10900 check inter 10000 rise 1 fall 3 weight 1
        server real_server3 172.16.122.106:10900 check inter 10000 rise 1 fall 3 weight 1
    
    # 接入接出一起配置,相當于frontend和backend同時配置
    listen http_in_config
        bind *:12000
        mode http
        balance roundrobin
        option httpclose # 此選項表示在客戶端和服務器端完成一次連接請求后,haproxy將主動關閉此TCP連接
        option abortonclose # 在服務器負載很高的情況下,自動結束掉當前隊列中處理時間比較長的鏈接
        server real_server4 172.16.122.104:10900 check inter 10000 rise 1 fall 3 weight 1
        server real_server5 172.16.122.105:10900 check inter 10000 rise 1 fall 3 weight 1
        server real_server6 172.16.122.106:10900 check inter 10000 rise 1 fall 3 weight 1
    
    # 監控頁面
    listen admin_stats
        bind *:11001
        mode http
        stats refresh 30s
        stats uri /admin
        stats realm welcome login\ Haproxy
        stats auth admin:admin123
        stats admin if TRUE # 通過設置此選項,可以在監控頁面上手工啟用或禁用后端真實服務器
    

    global配置

    log:全局的日志配置,local0是日志設備,debug表示日志級別。其中日志級別有err、warning、info、debug四種可選。這個配置表示使用127.0.0.1上的rsyslog服務中的local0日志設備,記錄日志等級為debug

    maxconn:設定每個haproxy進程可接受的最大并發連接數,此選項等同于Linux命令行選項"ulimit -n"

    daemon:設置haproxy進程進入后臺運行。這是推薦的運行模式。

    nbproc:設置haproxy啟動時可創建的進程數,此參數要求將haproxy運行模式設置為daemon,默認只啟動一個進程。根據使用經驗,該值的設置應該小于服務器的CPU核數。創建多個進程,能夠減少每個進程的任務隊列,但是過多的進程可能會導致進程的崩潰。

    pidfile:指定haproxy進程的pid文件。啟動進程的用戶必須有訪問此文件的權限。

    defaults配置

    mode:設置haproxy實例默認的運行模式,有tcp、http、health三個可選值。

    retries:設置連接后端服務器的失敗重試次數,連接失敗的次數如果超過這里設置的值,haproxy會將對應的后端服務器標記為不可用。此參數也可在后面部分進行設置。

    timeout connect:設置成功連接到一臺服務器的最長等待時間,默認單位是毫秒,但也可以使用其他的時間單位后綴。

    timeout client:設置連接客戶端發送數據時最長等待時間,默認單位是毫秒,也可以使用其他的時間單位后綴。

    timeout server:設置服務器端回應客戶度數據發送的最長等待時間,默認單位是毫秒,也可以使用其他的時間單位后綴。

    timeout check:設置對后端服務器的檢測超時時間,默認單位是毫秒,也可以使用其他的時間單位后綴。

    frontend配置

    bind:此選項只能在frontendlisten部分進行定義,用于定義一個或幾個監聽的套接字。

    option httpclose:此選項表示在客戶端和服務器端完成一次連接請求后,haproxy將主動關閉此TCP連接。這是對性能非常有幫助的一個參數。

    default_backend:指定默認的后端服務器池,也就是指定一組后端真實服務器,而這些真實服務器組將在backend段進行定義。這里的http_in_forward就是一個后端服務器組。

    backend配置

    balance:此關鍵字用來定義負載均衡算法。目前haproxy支持多種負載均衡算法,常用的有如下幾種。

    算法含義
    roundrobin是基于權重進行輪詢調度的算法,在服務器的性能分布比較均勻的時候,這是一種最公平、最合理的算法。此算法經常使用。
    static-rr也是基于權重進行輪詢的調度算法,不過此算法為靜態方法,在運行時調整其服務器權重不會生效。
    source是基于請求源 IP 的算法。此算法先對請求的源 IP 進行 hash 運算, 然后將結果與后端服務器的權重總數相除后轉發至某個匹配的后端服務器。
    這種方式可以使同一個客戶端 IP 的請求始終被轉發到某特定的后端服務器。
    leastconn此算法會將新的連接請求轉發到具有最少連接數目的后端服務器。在會話時間較長的場景中推薦使用此算法,例如數據庫負載均衡等。
    此算法不適合會話較短的環境中,例如基于 HTTP 的應用。
    uri此算法會對部分或整個 URI 進行 hash 運算,再經過與服務器的總權重相除,最后轉發到某臺匹配的后端服務器上。
    uri_param此算法會根據 URL 路徑中的參數進行轉發,這樣可保證在后端真實服務器數量不變時,同一個用戶的請求始終分發到同一臺機器上。
    hdr(<name>):此算法根據 http 頭進行轉發,如果指定的 http 頭名稱不存在,則使用 roundrobin 算法進行策略轉發。

    option abortonclose:如果設置了此參數,可以在服務器負載很高的情況下, 自動結束掉當前隊列中處理時間比較長的鏈接。

    server:這個關鍵字用來定義多個后端真實服務器,不能用于 defaults 和frontend部分。使用格式為:server <name> <address>[:port] [param*] 其中,每個參數含義如下:

    check:表示啟用對此后端服務器執行健康狀態檢查。

    inter:設置健康狀態檢查的時間間隔,單位為毫秒。

    rise:設置從故障狀態轉換至正常狀態需要成功檢查的次數,例如。“rise 2”表示 2 次檢查正確就認為此服務器可用。

    fall:設置后端服務器從正常狀態轉換為不可用狀態需要檢查的次數,例如,“fall 3”表示 3次檢查失敗就認為此服務器不可用。

    weight:設置后端真實服務器的權重,默認為 1,最大值為 256。設置為 0 表示不參與負載均衡。

    listen配置

    stats refresh:設置haproxy監控統計頁面自動刷新的時間。

    stats uri:設置haproxy監控統計頁面的URL路徑,可隨意指定。例如、指定stats uri /admin,就可以通過http://ip:port/admin查看。

    stats realm:設置登錄haproxy統計頁面時密碼框上的文本提示信息。

    stats auth:設置登錄haproxy統計頁面的用戶名和密碼。用戶名和密碼通過冒號分割。可為監控頁面設置多個用戶名和密碼,每行一個。

    stats admin if TRUE:通過設置此選項,可以在監控頁面上手工啟用或禁用后端真實服務器,僅在haproxy1.4.9以后版本有效。

    3、啟動Haproxy

    3.1、啟動

    執行以下命令,就可以啟動Haproxy

    /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg 
    

    可能會出現以下的提示:

    [WARNING] 333/173319 (22617) : [/usr/local/haproxy/sbin/haproxy.main()] Cannot raise FD limit to 8214, limit is 4096.
    [WARNING] 333/173319 (22617) : [/usr/local/haproxy/sbin/haproxy.main()] FD limit (4096) too low for maxconn=4096/maxsock=8214. Please raise 'ulimit-n' to 8214 or more to avoid any trouble.
    

    可以用如下辦法解決:

    sudo vi /etc/profile
    

    在最后增加一行內容:

    ulimit -n 65536
    

    保存退出,執行sudo source /etc/profile使其生效。這時候重新啟動Haproxy就沒問題了。

    3.2、查看監控頁面

    瀏覽器打開http://172.16.122.101:11001/admin輸入前面listen部分配置的賬號密碼登錄。

    管理頁面
    管理頁面可以通過手動操作開啟/禁用后端某臺真實服務器。

    3.3、負載均衡效果測試

    postman調用http://172.16.122.101:11000/xxxHaproxy會將請求轉發到對應的后端真實服務器http://172.16.122.104~6:10900/xxx,多次調用可以看到是輪詢的效果。

    參考文章

    個人網站

    版權聲明:本文為weixin_39020878原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_39020878/article/details/110440820

    智能推薦

    Windows環境下配置Haproxy的負載均衡

    Windows環境下配置Haproxy的負載均衡 近期由于需要給服務器分布式部署,而公司服務器采用win server,網上大多數的資料都是基于Linux配置的,這里重點對Haproxy對http和https兩種入口的轉發配置。 基于Linux系統下的Haproxy的配置流程 針對于Linux版本,可以直接對tar包編譯,直接在網上各種教程配置,如: haproxy配置詳解: haproxy配置詳...

    部署安裝HAProxy,實現mycat集群的負載均衡

    #創建目錄,用于存放配置文件 #進入目錄 #拉取鏡像 #創建容器 #創建文件 #輸入如下內容[配置文件一定要寫對,否則啟動不起來,我在這上面浪費不少時間] #啟動容器 通過http://192.168.88.101:4001/dbs端口查看集群情況,如果都是綠色表示部署成功 用navicate登錄HAProxy,用戶名和密碼是你在mycat中設置的,默認端口是4002 到此,你就搭建出了高可用的m...

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    猜你喜歡

    Java LinkedHashMap

    Java LinkedHashMap 前言 Map是我們在實際使用過程中常用的集合,HashMap在Java的實際開發中出鏡率很高,它通過hash算法實現了高效的非線程安全的集合,它有一個缺點就是,用戶插入集合的數據時無序,在我們需要一些有序的map的時候,我們就需要引入另外一個集合:LinkedHashMap。 LinkedHashMap是一個有序的非線程安全的集合,它是HashMap的子類,基...

    Spark Streaming處理文件(本地文件以及hdfs上面的文件)

    標題介紹文件流之前先介紹一下Dstream 下面是來自官網一段的說明,Discretized Streams或DStream是Spark Streaming提供的基本抽象。它表示連續的數據流,可以是從源接收的輸入數據流,也可以是通過轉換輸入流生成的已處理數據流。在內部,DStream由一系列連續的RDD表示,這是Spark對不可變的分布式數據集的抽象(有關更多詳細信息,請參見Spark編程指南)。...

    《痞子衡嵌入式半月刊》 第 8 期

    痞子衡嵌入式半月刊: 第 8 期 這里分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農歷年分二十四節氣,希望在每個交節之日準時發布一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 7 期》 嘮兩句 今天是小滿,小滿節氣意味著進入了大幅降水的雨季。痞子...

    (C++)二叉樹的線索化 / 線索二叉樹

    好久不見,朋友們!雖然我知道沒人看我的博客,但我還是想叨逼叨一下。啊,好久沒編程了(其實也就一周沒編),但你們知道,程序員一天不編程那能叫程序員么???雖然我不是程序員哈哈哈哈哈,但還是要有基本素養嘛。 繼續寫二叉樹,給自己立一個flag,就是這幾天要寫完之前沒做完的幾道題,和二叉樹紅黑樹各種樹之類的~~雖然有這個flag,但我還是很實誠地遵從自己的內心,買了一張明天的電影票,等我回來告訴你們好不...

    Linux內存管理:分頁機制

    《Linux內存管理:內存描述之內存節點node》 《Linux內存管理:內存描述之內存區域zone》 《Linux內存管理:內存描述之內存頁面page》 《Linux內存管理:內存描述之高端內存》 《Linux內存管理:分頁機制》 《內存管理:Linux Memory Management:MMU、段、分頁、PAE、Cache、TLB》 目錄 1 分頁機制 1.1 為什么使用多級頁表來完成映射 ...

    精品国产乱码久久久久久蜜桃不卡