HAProxy負載平衡,

來源:互聯網
上載者:User

HAProxy負載平衡,

1》HAProxy簡介:

      HAProxy是免費,高效,可靠的高可用及負載平衡解決方案,該軟體非常適合於處理高負載網站的七層資料請求,HAProxy的工作模式使其可以非常容易且安全地整合            到我們現有的網站架構中,使用類似的代理軟體還可以對外屏蔽內部的真實WEB伺服器,防止內部伺服器遭受外部攻擊;HAProxy架構中終端使用者通過訪問HAProxyProxy 伺服器          獲得網站頁面,而Proxy 伺服器在收到用戶端請求後會根據自身規則將資料請求轉寄給後端真實伺服器;為了讓同一Client Access Server時可以保持會話(同一用戶端第二次訪問網          站時可以被轉寄至相同的後端真實伺服器),HAProxy有三種解決方案:用戶端IP,Cookie以及Session,第一種方式中,HAProxy將用戶端IP進行Hash計算並儲存,以此確保當         相同的IP訪問Proxy 伺服器時可以轉寄到固定的真實伺服器上;第二種方式中,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代理案例,Proxy 伺服器將轉寄資料請求到單一後台伺服器                     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伺服器,可以設定兩台Log Service器;

            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實現所示的高效能Proxy 伺服器架構,本例將使用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

      HAProxyProxy 伺服器設定如下:

             

            

                                 #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
maxconn4096
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,則Proxy 伺服器將會把請求轉寄#給inside_servers伺服器組
use_backend inside_servers if inside_src
default_backendexternal_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     #重啟系統Log Service

          #haproxy  -f  /etc/haproxy.cfg   #指定設定檔啟動HAProxy服務

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

4》用戶端驗證如下:  

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

       

        

                   配置用戶端主機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主機的頁面資訊;

             

                              

                  

           

      

          

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.