成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HAProxy

ernest.wang / 3581人閱讀

摘要:單進(jìn)程事件驅(qū)動模型顯著降低了上下文切換的開銷及內(nèi)存占用。指定記錄首部值時所記錄的精確長度,超出的部分將會被忽略。啟用統(tǒng)計報告并限定報告的區(qū)段,不能用于區(qū)段。如果的確有這種問題,可以使用來返回狀態(tài)碼給客戶端。

博文參考
http://ju.outofmemory.cn/entry/218244
http://www.cnblogs.com/gtms/p/6790939.html
http://www.92to.com/bangong/2016/08-24/9737822.html
http://blog.sina.com.cn/s/blog_704836f40102vrt0.html
http://blog.csdn.net/jinshiyill/article/details/50824352
架構(gòu)圖



HAProxy概述 HAProxy簡介
  HAProxy主要提供兩個功能:http協(xié)議反向代理(不提供緩存功能)、基于tcp層的負(fù)載均衡(如https、MySQL協(xié)議)。適用于需要會話保持或七層處理的且負(fù)載特別大的站點??芍С?jǐn)?shù)以萬計的并發(fā)連接。
  代理作用:web緩存(加速)、反向代理、內(nèi)容路由(根據(jù)流量及內(nèi)容類型等將請求轉(zhuǎn)發(fā)至特定服務(wù)器)、轉(zhuǎn)碼器;
  HAProxy基于一種事件驅(qū)動(event-driven)、單一進(jìn)程模型和ebtree彈性二叉樹機(jī)制。
  多進(jìn)程或多線程模型受內(nèi)存限制、系統(tǒng)調(diào)度器限制以及無處不在的鎖限制,很少能處理數(shù)千并發(fā)連接。事件驅(qū)動模型有更好的資源和時間管理的用戶端(User-Space) 實現(xiàn)所有這些任務(wù),所以并發(fā)響應(yīng)能特別大。但在多核系統(tǒng)上此模型通常擴(kuò)展性較差
性能優(yōu)勢
  HAProxy借助于OS上幾種常見的技術(shù)來實現(xiàn)性能的最大化。
      單進(jìn)程、事件驅(qū)動模型顯著降低了上下文切換的開銷及內(nèi)存占用。
      O(1)事件檢查器(eventchecker)允許其在高并發(fā)連接中對任何連接的任何事件實現(xiàn)即時探測。
      在任何可用的情況下,單緩沖(singlebuffering)機(jī)制能以不復(fù)制任何數(shù)據(jù)的方式完成讀寫操作,這會節(jié)約大量的CPU時鐘周期及內(nèi)存帶寬;
      借助于Linux 2.6 (>=2.6.27.19)上的splice()系統(tǒng)調(diào)用,HAProxy可以實現(xiàn)零復(fù)制轉(zhuǎn)發(fā)(Zero-copy forwarding),在Linux3.5及以上的OS中還可以實現(xiàn)零復(fù)制啟動(zero-starting);
       內(nèi)存分配器在固定大小的內(nèi)存池中可實現(xiàn)即時內(nèi)存分配,這能夠顯著減少創(chuàng)建一個會話的時長;
       樹型存儲:側(cè)重于使用作者多年前開發(fā)的彈性二叉樹,實現(xiàn)了以O(shè)(log(N))的低開銷來保持計時器命令、保持運行隊列命令及管理輪詢及最少連接隊列;
      優(yōu)化的HTTP首部分析:優(yōu)化的首部分析功能避免了在HTTP首部分析過程中重讀任何內(nèi)存區(qū)域;
      精心地降低了昂貴的系統(tǒng)調(diào)用,大部分工作都在用戶空間完成,如時間讀取、緩沖聚合及文件描述符的啟用和禁用等;
HAProxy目前主要版本

1.4版本——提供較好的彈性:衍生于1.2版本,并提供了額外的新特性,其中大多數(shù)是期待已久的。
客戶端側(cè)的長連接(client-side keep-alive)
TCP加速(TCP speedups)
響應(yīng)池(response buffering)
RDP協(xié)議
基于源的粘性(source-based stickiness)
更好的統(tǒng)計數(shù)據(jù)接口(a much better stats interfaces)
更詳細(xì)的健康狀態(tài)檢測機(jī)制(more verbose health checks)
基于流量的健康評估機(jī)制(traffic-based health)
支持HTTP認(rèn)證
服務(wù)器管理命令行接口(server management from the CLI)
基于ACL的持久性(ACL-based persistence)
日志分析器

 1.3版本——內(nèi)容交換和超強(qiáng)負(fù)載:衍生于1.2版本,并提供了額外的新特性。

內(nèi)容交換(content switching):基于任何請求標(biāo)準(zhǔn)挑選服務(wù)器池;
ACL:編寫內(nèi)容交換規(guī)則;
負(fù)載均衡算法(load-balancing algorithms):更多的算法支持;
內(nèi)容探測(content inspection):阻止非授權(quán)協(xié)議;
透明代理(transparentproxy):在linux系統(tǒng)上允許使用客戶端IP直接連入服務(wù)器;
內(nèi)核TCP拼接(kernel TCPsplicing):無copy方式在客戶端和服務(wù)端之間轉(zhuǎn)發(fā)數(shù)據(jù)以實現(xiàn)數(shù)G級別的數(shù)據(jù)速率;
分層設(shè)計(layereddesign):分別實現(xiàn)套接字、TCP、HTTP處理以提供更好的健壯性、更快的處理機(jī)制及便捷的演進(jìn)能力;
快速、公平調(diào)度器(fast and fairscheduler):為某些任務(wù)指定優(yōu)先級可實現(xiàn)理好的QoS;
會話速率限制(session rate limiting):適用于托管環(huán)境;
注意:

  1)1.1、1.2、1.3的poll和epoll機(jī)制對性能影響
      1.1l版本默認(rèn)使用的polling系統(tǒng)為select(),其處理的文件數(shù)達(dá)數(shù)千個時性能便會急劇下降。
      1.2和1.3版本默認(rèn)的為poll(),在有些操作系統(tǒng)上可會也會有性能方面的問題,但在Solaris上表現(xiàn)相當(dāng)不錯。
      HAProxy1.3在Linux 2.6及打了epoll補(bǔ)丁的Linux2.4上默認(rèn)使用epoll,在FreeBSD上使用kqueue,這兩種機(jī)制在任何負(fù)載上都能提供恒定的性能表現(xiàn)。
 2) 高性能選型方案

Linux 2.6.32及之后版本上運行HAProxy 1.4;
打了epoll補(bǔ)丁的Linux2.4上運行HAProxy 1.4;
FreeBSD上運行HAProxy1.4;
Solaris10上運行HAProxy 1.4;

 3)splice()調(diào)用機(jī)制
        在較新版本的Linux2.6(>=2.6.27.19)上,HAProxy還能夠使用splice()系統(tǒng)調(diào)用在接口間無復(fù)制地轉(zhuǎn)發(fā)任何數(shù)據(jù),甚至可以達(dá)到10Gbps的性能。
HAProxy安裝配置 程序包安裝

[root@localhost~]# yum install -y haproxy
主配置文件:/etc/haproxy/haproxy.cfg
主程序:/usr/sbin/haproxy

配置文件格式



 實例一:
frontend  main *:5000
   acl url_static       path_beg       -i /static /images /JavaScript/stylesheets
   acl url_static       path_end       -i .jpg .gif .png .css .js
   use_backend static          if url_static
   default_backend             app
backendstatic
   balance    roundrobin
   server     static 127.0.0.1:4331 check
backendapp
   balance    roundrobin
   server app1 127.0.0.1:5001 check
   server app2 127.0.0.1:5002 check
   server app3 127.0.0.1:5003 check
   server app4 127.0.0.1:5004 check
   實例二:
frontendmain
bind  *:80
default_backendwebsrvs
backendwebsrvs
balanceroundrobin
server web1 172.16.49.102:80 check
server web2 172.16.49.103:80 check
HAProxy代理相關(guān)配置 balance

定義負(fù)載均衡算法,可用于"defaults"、"listen"和"backend"配置段

    ① roundrobin,表示簡單的輪詢,這個是負(fù)載均衡基本都具備的;
    ② static-rr,表示根據(jù)權(quán)重,選擇 server 的邏輯最為簡單
    ③ leastconn,表示最少連接者先處理
    ④ source,表示根據(jù)請求源IP,這個跟Nginx的IP_hash機(jī)制類似,用其作為解決session問題的一種方法
    ⑤ ri,表示根據(jù)請求的URI;
    ⑥ rl_param,表示根據(jù)請求的URl參數(shù)’balance url_param’ requires an URL parameter name;
    ⑦ hdr(name),表示根據(jù)HTTP請求頭來鎖定每一次HTTP請求;

    ⑧ rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請求。

注意

    (1)當(dāng)使用uri算法時,第一次請求一個URL分發(fā)到一個主機(jī),則之后再次請求相同URL則使用一臺主機(jī)響應(yīng)。當(dāng)?shù)谝淮握埱笾?,若響?yīng)該請求的主機(jī)服務(wù)出現(xiàn)故障,則haproxy或?qū)⑵湔{(diào)度到其他主機(jī),此主機(jī)修復(fù)后再次調(diào)度回來
      (2)URI:統(tǒng)一資源標(biāo)識符;格式如下:
    ://:@:/;?#
    方案://用戶:密碼@主機(jī):端口/路徑;參數(shù)(鍵值數(shù)據(jù)、可以多個參數(shù)字段)?查詢語句#片段顯示
hash-type
  格式:hash-type 
     定義用于將hash碼映射至后端服務(wù)器的方法;不能用于frontend區(qū)段;可用方法有map-based和consistent
  說明:
bind
定義一個或者幾個監(jiān)聽的套接字、只能用于frontend, listen;
    bind[
]: [, ...] bind[
]: [, ...] interface

default_backend

為frontend指明使用的默認(rèn)后端;default_backend
實例:
use_backend dynamic if url_dyn
use_backend static if url_css url_img extension_img
default_backend dynamic

注意:use_backend: 條件式后端調(diào)用;
server

server :port;用于為后端聲明一個server
:名稱,標(biāo)識符
[:port]:設(shè)定后端真實服務(wù)器監(jiān)聽的端口和地址
[param*]:參數(shù)
backup: 設(shè)定為備用服務(wù)器,僅在負(fù)載均衡場景中的其它server均不可用于啟用此server;
check:健康狀態(tài)檢測;
inter:檢測時間間隔;單位為ms, 默認(rèn)為2000;
rise:設(shè)定健康狀態(tài)檢查中,某離線的server從離線狀態(tài)轉(zhuǎn)換至正常狀態(tài)需要成功檢查的次數(shù);
fall:確認(rèn)server從正常狀態(tài)轉(zhuǎn)換為不可用狀態(tài)需要檢查的次數(shù);
cookie :為指定server設(shè)定cookie值,用于實現(xiàn)持久連接的功能;
maxconn:此服務(wù)接受的并發(fā)連接的最大數(shù)量;
maxqueue:請求隊列的最大長度;
observe:根據(jù)流量判斷后端server的健康狀態(tài);
weight #: 指定權(quán)重,#默認(rèn)為1,最大為256;0表示不被調(diào)度;
redir: 重定向;所有發(fā)往此服務(wù)器的請求均以302響應(yīng);

注意:

   健康監(jiān)測的方式有多種,具體服務(wù)可能檢測方法的配置指令不同;此處為后端http服務(wù)時的健康狀態(tài)的檢測方法,在defaults配置段定義了" option httpchk "。

"httpchk"、"smtpchk"、"mysql-check"、"pgsql-check"、"ssl-hello-chk"

實例:基于瀏覽器cookie實現(xiàn)sessionsticky(會話綁定)

backendwebsrvs

  balance    roundrobin
  cookie SERVERID insert    # 報文首部插入標(biāo)識
  server web1 172.16.49.102:80 check weight 1 cookie websrv1     # cookie綁定名稱參數(shù)標(biāo)識
  server web2 172.16.49.103:80 check weight 3 cookie websrv2

注釋:每個server有自己惟一的cookie標(biāo)識、在backend中定義為用戶請求調(diào)度完成后操縱其cookie

日志記錄信息

(1) capture requestheader

      格式:capture request header  len 
      捕獲并記錄指定的請求首部最近一次出現(xiàn)時的第一個值,僅能用于“frontend”和“l(fā)isten”區(qū)段
    :要捕獲的首部的名稱,此名稱不區(qū)分字符大小寫,但建議與它們出現(xiàn)在首部中的格式相同,比如大寫首字母。需要注意的是,記錄在日志中的是首部對應(yīng)的值,而非首部名稱。
    :指定記錄首部值時所記錄的精確長度,超出的部分將會被忽略。

注意:

  可以捕獲的請求首部的個數(shù)沒有限制,但每個捕獲最多只能記錄64個字符。為了保證同一個frontend中日志格式的統(tǒng)一性,首部捕獲僅能在frontend中定義。

(2)captureresponse header;捕獲并記錄響應(yīng)首部,其格式和要點同請求首部。

     格式:capture response header  len 
HAProxy狀態(tài)監(jiān)控頁配置 配置監(jiān)控頁信息

1.配置監(jiān)控頁信息
(1)stats enable

         啟用基于程序編譯時默認(rèn)設(shè)置的統(tǒng)計報告,不能用于“frontend”區(qū)段。

(2)stats hide-version

      啟用統(tǒng)計報告并隱藏HAProxy版本報告,不能用于“frontend”區(qū)段。

(3)stats realm

      格式:stats realm 
        :實現(xiàn)HTTP基本認(rèn)證時顯示在瀏覽器中的領(lǐng)域名稱,用于提示用戶輸入一個用戶名和密碼。
  啟用統(tǒng)計報告并高精認(rèn)證領(lǐng)域,不能用于“frontend”區(qū)段。haproxy在讀取realm時會將其視作一個單詞,因此,中間的任何空白字符都必須使用反斜線進(jìn)行轉(zhuǎn)義。此參數(shù)僅在與“statsauth”配置使用時有意義。

(4)stats scope

      stats scope { | "." }
       :可以是“l(fā)isten”、“frontend”或“backend”區(qū)段的名稱,而“.”則表示statsscope語句所定義的當(dāng)前區(qū)段。
     啟用統(tǒng)計報告并限定報告的區(qū)段,不能用于“frontend”區(qū)段。當(dāng)指定此語句時,統(tǒng)計報告將僅顯示其列舉出區(qū)段的報告信息,所有其它區(qū)段的信息將被隱藏。如果需要顯示多個區(qū)段的統(tǒng)計報告,此語句可以定義多次。需要注意的是,區(qū)段名稱檢測僅僅是以字符串比較的方式進(jìn)行,它不會真檢測指定的區(qū)段是否真正存在。

(5)stats auth

       格式:stats auth :
:授權(quán)進(jìn)行訪問的用戶名;
:此用戶的訪問密碼,明文格式;
      啟用帶認(rèn)證的統(tǒng)計報告功能并授權(quán)一個用戶帳號,其不能用于“frontend”區(qū)段。

(6)stats admin

      格式:stats admin {if | unless } 
     在指定的條件滿足時啟用統(tǒng)計報告頁面的管理級別功能,它允許通過web接口啟用或禁用服務(wù)器。
配置案例:stats狀態(tài)監(jiān)控頁

(1)在配置文件/etc/haproxy/haproxy.cfg中配置代理和監(jiān)控配置信息
listenstatistics

bind  *:9090
stats  enable
stats  hide-version
stats uri /haproxyadmin?stats 
stats realm  "HAPorxyStatistics"
stats auth admin:xuding
stats admin if TRUE  

(2)訪問URL:http://172.16.49.101:9090/hap...

(3)此時即可進(jìn)入管理頁面進(jìn)行對后端服務(wù)器的管理和頁面監(jiān)控數(shù)據(jù)監(jiān)控

說明:

錯誤頁面
errorfile:使用haproxy主機(jī)本地文件進(jìn)行響應(yīng);
errorloc,errorloc302: 使用指定的url進(jìn)行響應(yīng),響應(yīng)狀態(tài)碼為302;不適用于GET以外的其它請求方法;
errorloc303:返回303狀態(tài)碼;
errorfile
    格式:errorfile  

:指定對HTTP的哪些狀態(tài)碼返回指定的頁面;這里可用的狀態(tài)碼有200、400、403、408、500、502、503和504;
:指定用于響應(yīng)的頁面文件

在用戶請求不存在的頁面時,返回一個頁面文件給客戶端而非由haproxy生成的錯誤代碼;可用于所有段中。

實例:
errorfile400 /etc/haproxy/errorpages/400badreq.http
errorfile403 /etc/haproxy/errorpages/403forbid.http
errorfile503 /etc/haproxy/errorpages/503sorry.http

errorloc和errorloc302
  請求錯誤時,返回一個HTTP重定向至某URL的信息;可用于所有配置段中。
    errorloc 
    errorloc302 
       :指定對HTTP的哪些狀態(tài)碼返回指定的頁面;這里可用的狀態(tài)碼有200、400、403、408、500、502、503和504;
       :Location首部中指定的頁面位置的具體路徑,可以是在當(dāng)前服務(wù)器上的頁面的相對路徑,也可以使用絕對路徑;需要注意的是,如果URI自身錯誤時產(chǎn)生某特定狀態(tài)碼信息的話,有可能會導(dǎo)致循環(huán)定向;

注意:

這兩個關(guān)鍵字都會返回302狀態(tài)嗎,這將使得客戶端使用同樣的HTTP方法獲取指定的URL,對于非GET廣場法的場景(如POST)來說會產(chǎn)生問題,因為返回客戶的URL是不允許使用GET以外的其它方法的。如果的確有這種問題,可以使用errorloc303來返回303狀態(tài)碼給客戶端。
errorloc303
    errorloc303  ;請求錯誤時,返回一個HTTP重定向至某URL的信息給客戶端;可用于所有配置段中。
     :指定對HTTP的哪些狀態(tài)碼返回指定的頁面;這里可用的狀態(tài)碼有400、403、408、500、502、503和504;
     :Location首部中指定的頁面位置的具體路徑,可以是在當(dāng)前服務(wù)器上的頁面的相對路徑,也可以使用絕對路徑;需要注意的是,如果URI自身錯誤時產(chǎn)生某特定狀態(tài)碼信息的話,有可能會導(dǎo)致循環(huán)定向;

實例:
backendwebserver
server 172.16.100.6 172.16.100.6:80 checkmaxconn 3000 cookie srv01
server 172.16.100.7 172.16.100.7:80 checkmaxconn 3000 cookie srv02
errorfile 403/etc/haproxy/errorpages/sorry.htm
errorfile 503/etc/haproxy/errorpages/sorry.htm

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/35847.html

相關(guān)文章

  • Kubernetes Master High Availability 高級實踐

    摘要:才云科技云開源高級工程師唐繼元受邀社群,在線分享高級實踐,介紹如何構(gòu)建環(huán)境。除命令外的停止都是異常停止。 才云科技云開源高級工程師唐繼元受邀DBAplus社群,在線分享《Kubernetes Master High Availability 高級實踐》,介紹如何構(gòu)建Kubernetes Master High Availability環(huán)境。 以下是分享實錄: 大家好,我是才云科技的唐繼...

    JiaXinYi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<