HAProxy負載均衡

来源:http://www.cnblogs.com/xiaocheche/archive/2017/10/24/7725200.html
-Advertisement-
Play Games

1》HAProxy簡介: HAProxy是免費,高效,可靠的高可用及負載均衡解決方案,該軟體非常適合於處理高負載站點的七層數據請求,HAProxy的工作模式使其可以非常容易且安全地集成 到我們現有的站點架構中,使用類似的代理軟體還可以對外屏蔽內部的真實WEB伺服器,防止內部伺服器遭受外部攻擊;HAP ...


1》HAProxy簡介:

      HAProxy是免費,高效,可靠的高可用及負載均衡解決方案,該軟體非常適合於處理高負載站點的七層數據請求,HAProxy的工作模式使其可以非常容易且安全地集成            到我們現有的站點架構中,使用類似的代理軟體還可以對外屏蔽內部的真實WEB伺服器,防止內部伺服器遭受外部攻擊;HAProxy架構中終端用戶通過訪問HAProxy代理伺服器          獲得站點頁面,而代理伺服器在收到客戶端請求後會根據自身規則將數據請求轉發給後端真實伺服器;為了讓同一客戶端訪問伺服器時可以保持會話(同一客戶端第二次訪問網          站時可以被轉發至相同的後端真實伺服器),HAProxy有三種解決方案:客戶端IP,Cookie以及Session,第一種方式中,HAProxy將客戶端IP進行Hash計算並保存,以此確保當         相同的IP訪問代理伺服器時可以轉發到固定的真實伺服器上;第二種方式中,HAProxy依靠真實伺服器發送給客戶端的Cookie信息進行會話保持;第三種方式中,HAProxy將保           存真實伺服器的Session及伺服器標識,實現會話保持功能;          

      HAProxy軟體包可以在其官方網站上下載,下麵通過源碼方式安裝該軟體,在使用make命令生成makefile文件時,TARGET=linux2628代表Linux操作系統使用的內核版         本為2.6.28及以上版本;

        #yum   install   gcc

        #tar -xvf haproxy-1.4.24.tar.gz

        #cd  /usr/local/src/haproxy-1.4.24

        #make   TARGET=linux2628

        #make  install

2》配置文件解析:

     HAProxy安裝後沒有預設的配置文件,需要手動創建,本例將創建/etc/haproxy.cfg配置文件,當啟動HAProxy服務時需要使用-f選項指定配置文件路徑,HAProxy配置文件主         要包含全局設置段與代理段,global代表全局段,defaults,listen,frontend,backend為代理段;frontend用來匹配客戶端請求的功能變數名稱或URI等,backend定義後端伺服器集群,listen         是frontend與backend的集合,有時僅使用listen即可代替frontend與backend,下麵給出了一個監聽80埠的HTTP代理案例,代理伺服器將轉發數據請求到單一後臺伺服器                     127.0.0.1:8000;

           

        HAProxy主配置文件的具體語法格式及描述:

          global:

            chroot<jail  dir>:將工作目錄切換至<jail  dir>並執行chroot,該配置可增強HAProxy的安全性,但需要使用超級賬戶啟動HAProxy程式;

            daemon:配置HAProxy以後臺進程模式工作;

            uid<number>:配置進程的賬戶ID,建議設置為HAProxy專用賬戶;

            gid<number>:配置進程的組ID,建議設置為HAProxy專用組;

            log<address><facility>:配置全局syslog伺服器,可以設置兩台日誌伺服器;

            nbproc<number>:指定後臺進程的數量;

            pidfile<pidfile>:將進程ID號寫入<pidfile>文件;

            ulimit-n<number>:設置每個進程的最大文件描述符數量;

            maxconn<number>:設置每個進程支持的最大併發數;

            tune.bufsize<number>:設置buffer大小,預設值為16384,單位為位元組(B);

          代理設置:

            mode:HAProxy工作模式,可選項為:tcp,http,health;

            timeout  check<timeout>:設置檢查超時時間;

            contimeout<timeout>:設置連接超時時間;

            balance   roundrobin:預設負載均衡工作模式,輪詢;

            bind<address>:<port>:定義一個或過個監聽地址或埠;

            stats  auth  admin:admin:設置監控界面的用戶名稱與密碼;

            stats  refresh   <number>:統計頁面刷新間隔時間;

            option  httplog:使用http日誌;

            cookie<name>:啟用基於cookie的保持連接功能;

            option  forwardfor:允許插入X-Forwarded-For數據包頭給後端真實伺服器,可以讓後臺伺服器獲得客戶端的真實IP地址;

            option   abortonclose:伺服器負載高時,自動關閉隊列里處理時間比較長的連接請求;

            option   allbackups:當後端伺服器全部宕機時,是否激活所有備用的伺服器,預設僅啟動第一個備用伺服器;

            option  dontlognull:不記錄空連接日誌,主要用於不記錄健康檢查日誌;

            option  redispatch:在HTTP模式,如果使用cookie的伺服器宕機,客戶端還好堅持連接它,該選項在後端伺服器宕機時強制將請求轉發給其他健康主機;

            monitor-uri<uri>:檢查<uri>文件是否存在,依次判斷主機健康狀態;

            monitor-fail if  site_dead:當伺服器宕機時,返回503錯誤代碼,需要定義ACL;

            option httpchk<uri>:使用HTTP協議檢查伺服器健康狀態;

            retries<value>:伺服器連接失敗後的重試次數;

            timeout  client<n>:設置客戶端最大超時時間為n,預設單位為毫秒(ms);

            timeout  server<n>:設置伺服器端最大超時時間為n,預設單位為毫秒(ms);

            timeout  connect<n>:設置連接最大超時時間為n,預設單位為毫秒(ms);

            default_backend:配置文件中沒有use_backend規則時,設置預設後端伺服器組,伺服器組由backend定義;

            use_backend:當條件滿足時,指定後端伺服器組,需要設置ACL;

            acl<name><criterion>:定義訪問控制列表,配置文件中通過name調用該ACL,常用限制包括:dst(目標地址),dst_port(目標埠),src(源地址),hdr(連接頭部                                                                              信息),path_reg(訪問路徑匹配正則),url(統一資源定位符);

        ACL訪問控制列表案例如下:

              

            

3》HAProxy應用案例:

      本例以生產環境為原型,簡化網路拓撲後使用HAProxy實現下圖所示的高性能代理伺服器架構,本例將使用listen定義一個監控埠;使用frontend定義一個前端80端                 口;通過backend分別定義名為inside_servers和external_servers的伺服器組;使用default_backend定義預設伺服器組為external_servers;定義ACL規則時,如果內網                         (192.168.0.0/24)訪問WEB服務,則由inside_servers伺服器組提供WEB頁面;

       external_servers伺服器組中包含web1.example.com和web2.example.com兩台伺服器,inside_servers伺服器組中包含web2.example.com一臺伺服器;

                              =》Web1  

       Client------->Internet--------->HAProxy--------->router-----=

                              =》Web2

      1>實驗環境;

        haproxy.example.com:   eth0:172.31.16.163

                      eth1:192.168.10.10

         web1.example.com:     eth0:192.168.10.20

         web2.example.com:   eth0:192.168.10.30

               client.example.com:      eth0:172.31.16.229

    2>具體配置:

         兩台WEB伺服器基本採用相同的配置,下麵僅以WEB1為例,為了演示HAProxy可以輪詢訪問後端伺服器,我們將兩台伺服器的頁面設置為不同的內容以示區                                別:    

               

         #service    network   restart

            #yum -y  install  httpd

         #echo "192.168.10.20"  >/var/www/html/index.html

           #service   iptables  stop

             

         

          #service    network   restart

            #yum -y  install  httpd

         #echo "192.168.10.30"  >/var/www/html/index.html

           #service   iptables  stop

      HAProxy代理伺服器設置如下:

             

            

                                 #service   network   restart

          #service  iptables stop

          內核調優,文件中插入如下兩行:

                        

        #yum   install   gcc

        #tar -xvf haproxy-1.4.24.tar.gz

        #cd  /usr/local/src/haproxy-1.4.24

        #make   TARGET=linux2628

        #make  install

        #mkdir  /var/haproxy     #chroot所需目錄

       創建配置文件:          

global
maxconn 4096
log 127.0.0.1 local3 info
chroot /var/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /var/run/haproxy.pid
ulimit-n 65535
stats socket /var/tmp/stats
defaults
log global
mode http
maxconn 20480
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
stats refresh 30
retries 3
balance roundrobin
cookie SRV
timeout check 2000ms
timeout connect 5000ms
timeout server 50000ms
timeout client 50000ms
listen admin_status #定義HAProxy到監控界面
bind 0.0.0.0:6553
mode http
log 127.0.0.1 local3 info
stats enable
stats refresh 5s #監控統計頁面自動刷新時間為5s
stats realm Haproxy\ Statistics #登錄監控統計頁面提示符
stats uri /admin?stats #監控頁面URL路徑
stats auth admin1:AdMiN123 #查看HAProxy監控頁面到賬戶與密碼
stats hide-version #隱藏HAProxy版本信息

frontend web_service #定義終端用戶訪問到前端伺服器
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
option forwardfor
acl inside_src src 192.168.10.0/24 #定義ACL
#use_backend調用ACL定義,如果源地址為192.168.10.0/24,則代理伺服器將會把請求轉發#給inside_servers伺服器組
use_backend inside_servers if inside_src
default_backend external_servers
backend external_servers
mode http
balance roundrobin #輪詢真實伺服器
#檢查真實伺服器到index.html文件,以此判斷伺服器的健康狀態
option httpchk GET /index.html
#定義後端真實伺服器,向cookie信息中插入web1信息,check代表允許對伺服器進行健康檢#查,健康檢查到時間間隔為2000ms,連續兩次健康檢查成功則認為伺服器是有效開啟的,連續三次健康檢查失敗後,認為伺服器已經宕機,伺服器權重為1
server web1 192.168.10.20:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1server web2 192.168.10.30:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1backend inside_servers
mode http
balance roundrobin
option httpchk GET /index.html
server web1 192.168.10.30:80 cookie web2 check inter 1500 rise 3 fall 3 weight 1

                     3>修改HAProxy伺服器日誌配置文件,插入以下內容:

        #vim   /etc/rsyslog.conf

              $ModLoad   imudp                  

           $UDPServerRun    514

               local3.*

        #service   rsyslog  restart     #重啟系統日誌服務

          #haproxy  -f  /etc/haproxy.cfg   #指定配置文件啟動HAProxy服務

                            #echo "/usr/local/sbin/haproxy  -f    /etc/haproxy.cf"  >>/etc/rc.local

4》客戶端驗證如下:  

      首先為客戶端主機配置正確的網路環境,確保客戶端與HAProxy代理伺服器可以直接連通,使用瀏覽器訪問http://172.31.16.163:6553/admin?stats查看代理伺服器狀態統              計信息:

       

        

                   配置客戶端主機IP地址為172.31.16.229,通過瀏覽器訪問http://172.31.16.163,刷新將分別得到web1.example.com以及web2.example.com兩台主機返回的頁面信息,如           果客戶端主機IP地址配置為192.168.10.0/24網路內的IP,則訪問http://192.168.10.10,伺服器將返回的頁面將永遠都是web2.example.com主機的頁面信息;

             

                              

                  

           

      

          

 


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

-Advertisement-
Play Games
更多相關文章
  • ubuntu 下使用vi時方向鍵亂碼,退格鍵不能使用的解決方法 問題表現:Ubuntu下,初始使用vi,編輯模式下使用方向鍵的時候,並不會使游標移動,而是在命令行中出現A B C D 之類的字母,並且編輯錯誤的話,連退格鍵建(backspace)都無法使用,只能用delete來刪除。 解決方法: 首 ...
  • #!/bin/bash export device=`ifconfig|grep eth0|head -n 1|awk '{print ($1)}'`export ipcfg_pre="/etc/sysconfig/network-scripts/ifcfg-eth1-range"awktmp=`m ...
  • 系統win7 32位 安裝office2010出現了錯誤,提示要安裝MSXML6.10.1129.0解決方法 1、下載MSXML6.10.1129.0進行安裝 2、若本機已安裝過不管用: a、在運行里輸入:regsvr32 /u msxml6.dll,然後確定 b、再次在運行里輸入:regsvr32 ...
  • 1.1 環境說明 [root@test ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@test ~]# uname -r 2.6.32-696.el6.x86_64 [root@test ~]# getenforce Dis ...
  • 一.背景 1.1 OS 版本 windows 10 1.2 source insight版本 source insight 3.50.0034 二.解決方案 刪除"我的文檔"下麵的source insight目錄 ...
  • 本文目錄:1. 入門示例:虛擬主機提供web服務2. tomcat體繫結構基本說明3. tomcat的appBase和docBase詳細說明 4. tomcat進階:tomcat配置文件server.xml詳解 4.1 頂級元素server 4.2 頂級元素service 4.3 執行器execut ...
  • 授權chmod 777 -R /home/xueyueziyan/桌面/配置備份chmod 777 -R /home/xueyueziyan/桌面/Softwares 安裝vsftpdyum -y install vsftpd 備份cp /etc/vsftpd/vsftpd.conf /home/x ...
  • 一主板: 主板是電腦中各個部件工作的一個平臺,它把電腦的各個部件緊密的連接在一起,各個部件通過主板進行數據傳輸。 二.中央處理器(cpu) cpu,是一臺電腦的運算核心和控制中心。其主要功能是解釋電腦指令以及處理電腦軟體中的數據。cpu是整個系統中最高的執行單元,因此cpu已成為決定電腦性能的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...