Haproxy詳細な説明と設定ファイル

HAProxyについて

   公式サイト:のhttp://www.haproxy.com

   HAProxyは、高可用性、負荷分散、およびアプリケーションベースのTCPおよびHTTPプロキシのサポート仮想ホストを提供し、それは負荷分散ソリューション、無料の高速かつ信頼性の高いです。7つのデータ要求の高負荷サイトを扱うのに適しています。同様のプロキシサービスは、攻撃を防ぐために内部実サーバ、内部サーバーを保護することができます。
   HAProxyの特徴と利点:
   1.オリジナルのサポートSSLのSSLは、クライアントとサーバーのサポート
   2. IPv6のサポートスリーブとUNIXのバイト(ソケット)
   3.キープアライブのサポートHTTP
   4. HTTPをサポート/ 1.1圧縮、帯域幅の節約
   5健康検出メカニズム(SSL、TCPスクリプト、チェックエージェント...)最適化するためのサポート
   6.支持層7負荷分散を。
   7.信頼性と安定性が非常に良好です。
   8. 40000から50000の同時接続、最大要求単位時間20000、10Gbpsの処理、最大データ。
   サポートセッションを維持しながら、ロードバランシングアルゴリズムは、8をサポート9。
   10.仮想ホストをサポートします。
   11.サポート接続は、透過プロキシを拒否しました。
   12.サーバー状態監視のページを持っています。
   13.サポートACL。

 

 同じクライアントアクセスサーバーのためHAProxy順序は、セッションを維持することができます。クライアントIP、クッキーとセッション:3つの解決策があり
   、クライアントIPハッシュによって1.HAProxyを計算し、格納し、同じIPアクセスプロキシが固定実サーバに転送することができたときに確実にするためには。
   クッキー実サーバが維持され、クライアントのセッション情報を送信頼る2.HAProxy。
   3.HAProxyセッションは、セッションの遺骨を実装、識別するために、実サーバおよびサーバに保存されます。
   (HAProxyバックエンドサーバーはLVS ARPの設定と同じくらい退屈なネットワーク接続、ないを必要とすることができます)


 負荷分散アルゴリズムのHAProxy balance8の種類:
   1.roundrobin:重量ベースのポーリング。
   2.static-RR:重量ベースのポーリング。静的アルゴリズム、変更は有効ランタイム取ることができない
   要求元IPベースのアルゴリズム:3.sourceを。要求元IPは、再思う他のマッチングサーバステーションに転送右結果とバックエンドサーバーの総数次に、ハッシュ関数を実行します。同じIPクライアントの要求は、常に特定のバックエンドサーバーに転送されます。
   4.leastconn:最小接続。(環境の短いセッションに適したデータベースロードバランシング、ない場合) 
   5.uri:URIの一部または全体としてのハッシュ関数を実行し、次に総重量がに加えて、サーバーにしたい、そして最終的にバックエンド・マッチに転送されます。
   6.uri_paramは:不変のバックエンドサーバーの数の場合には、同一のユーザ要求が同じマシンに配布されることを保証するために、URLパスパラメータに基づいて転送されます。
   7.hdr(<名前>):転送HTTPヘッダ、いかなるHTTPヘッダが存在しない場合。これは、単純なラウンドロビンを使用しています。


 HAProxyメインモード
   1.tcpモード:このモードでは、クライアントとサーバとの間で全二重接続を確立し、任意のシンプルモードのパケット処理層7を行う必要はありません。通常、SSL、SSH、SMTPアプリケーションのために使用されるこのデフォルト・モード、。
   2.httpモード(一般的な使用):バックエンドサーバー要求に転送される前に、クライアントによるこのモードでは、詳細な分析は、すべての非RFC準拠のフォーマット要求は拒否されます。
   

 

HAProxyのインストールと構成ファイルのパラメータ

   HAProxyのインストール

yumをhaproxyインストール-y

   HAProxy環境

グローバル(大域部分)デフォルト(初期設定部)リッスン(アプリケーション構成部品):haproxyプロファイルは、一般的に3つの部分に分かれ
プロフィール:/etc/haproxy/haproxy.cfg 

  1.        ####################グローバルコンフィギュレーション######################## 
  2.        #######プロセスレベルパラメータ、通常、オペレーティングシステム(OS)に関連ある######### 
  3. グローバル 
  4.        接続のMAXCONN 20480#のデフォルトの最大数 
  5.        127.0.0.1のLOCAL0#ログ出力の設定を記録し、すべてのログ・レコードは、出力はlocal0システムログに存在しています
  6.        ログレベルについて127.0.0.1のLOCAL1通知#noticeログ、通常、24のレベル(デバッグwarringinfoエラー)
  7.        パスchroot環境の/ var / haproxy #chrootラン 
  8.        ユーザーのuid 99位実行UIDを所属します 
  9.        ユーザグループはGID 99#を実行している所属します 
  10.        デーモン#テーブルのフォームを実行した後haproxy 
  11.        nbproc番号#1のプロセス(あなたは、パフォーマンスを向上させるために複数のプロセスを設定することができます) 
  12.        /var/run/haproxy.pid #haproxy PIDファイルPIDストレージ・パスは、ユーザーがプロセスがこのファイルにアクセスする権限を持っている必要があります開始します 
  13.        ulimitの-N 65535 #ulimitの数量 
  14.        デフォルトでは、#####################設定###################### 
  15.        フロントエンド、バックエンドを使用するように構成することができる##これらのパラメータは、アセンブリ聞く## 
  16. デフォルト 
  17.        グローバルログ 
  18.        カテゴリーモードのhttp#が処理(#7層のhttp; 4層のTCP) 
  19.        接続の20480#最大数をMAXCONN 
  20.        オプションHTTPLOG#HTTPログ形式ログカテゴリ 
  21.        各オプションhttpclose#HTTPリクエストの完了後にアクティブチャネルを閉じます 
  22.        オプションdontlognull#がヘルスチェックログ情報を記録しません。 
  23.        #forwardforオプションのバックエンドサーバは、実際のクライアントのIPパラメータを設定する必要があります取得する必要がある場合は、HTTPヘッダーからクライアントIPを取得することができます  
  24.        オプションの再ディスパッチは、他の正常なサーバーに向け強制的に、対応するサーバがハング#serverId後  
  25.        #abortoncloseオプション際に高いサーバーの負荷時、自動的に現在のキュー処理が比較的長い接続の終わりオフ 
  26.        統計は、30の#統計ページの更新間隔をリフレッシュ 
  27.        あなたはまた戻って設定することができ、3#3回の接続が失敗したサービスが利用できないと考えて再試行 
  28.        バランスラウンドロビン#デフォルトのロードバランシングモード、ポーリング 
  29.       #balanceソース#のデフォルトのロードバランス方式、類似したnginxののip_hash 
  30.       #デフォルトロードバランシングモードleastconn #balance、最小接続 
  31.        contimeout 5000#接続タイムアウト 
  32.        50000#クライアントのタイムアウトclitimeout 
  33.        srvtimeout 50000#サーバのタイムアウト 
  34.        タイムアウトチェック2000#ハートビートタイムアウト 
  35.        設定し####################### ####################監視ページを 
  36. バックエンドはADMIN_STATUS #Frontendおよびそれらの組み合わせ、監視するグループの名前、オンデマンドカスタム名を聞きます 
  37.         0.0.0.0:65532#リスニングポートをバインド 
  38.         7層モデル#httpモードのhttp 
  39.         127.0.0.1 LOCAL3のERR#エラーログを記録 
  40.         統計は5秒#モニタをリフレッシュ5秒ごとに自動的にページを更新 
  41.         統計URI /管理?URL統計#監視ページ 
  42.         \プロンプトitnihao#監視ページitnihao統計レルム 
  43.         統計認証管理者:ユーザーおよびパスワード管理者管理者#監視ページには、複数のユーザー名を設定することができます 
  44.         統計認証ADMIN1:ユーザー名とパスワードADMIN1のADMIN1#監視ページ 
  45.         統計は、非表示、バージョンの統計ページで#バージョンHAproxy非表示情報を  
  46.         統計情報管理TRUE#は、手動で(haproxy-1.4.9バージョンの後)/無効、バックエンドサーバーを有効にした場合 
  47.        403 /etc/haproxy/errorfiles/403.httpをERRORFILE 
  48.        500 /etc/haproxy/errorfiles/500.httpをERRORFILE 
  49.        502 /etc/haproxy/errorfiles/502.httpをERRORFILE 
  50.        503 /etc/haproxy/errorfiles/503.httpをERRORFILE 
  51.        504 /etc/haproxy/errorfiles/504.httpをERRORFILE 
  52.        ログインコンテンツ################# HAProxyセット################### 
  53.        リクエストヘッダホストLEN 40を捕捉 
  54.        10 lenの捕捉要求ヘッダーのContent-Length 
  55.        捕捉要求ヘッダーリファラーLEN 200 
  56.        40をlenのキャプチャレスポンスヘッダサーバ 
  57.        レスポンスヘッダーのContent-Length LEN 10を捕捉 
  58.        キャプチャレスポンスヘッダのCache-Control LEN 8 
  59.        #######################ウェブサイトの監視を設定するには、耳を傾け##################### 
  60.        ###########これは、使用haproxyバックエンドサーバーの監視ステータスを監視するために主にある############ 
  61. site_statusを聞きます 
  62.        0.0.0.0:1081#リスニングポートをバインド 
  63.        7層モデル#httpモードのhttp 
  64.        127.0.0.1 LOCAL3 ERR#をログ[警告情報デバッグを誤ります] 
  65.        監視-URIのサイトには、通常のリターン200とHAProxyを管理することが可能かどうかを検出するために使用/ site_statusの#ヘルスモニタリングのウェブサイトのURLを、503は通常の状態に戻りません。 
  66.        効果的な戦略の数は、マシンLT 2つの#は、ステージ1が指定されたバックエンドよりも小さいときに、ロードバランシングに掛かっACL site_dead nbsrv(server_web)ダウンサイトを定義するとき場合にtrueを返します 
  67.        ACL site_dead nbsrv(server_blog)LT 2 
  68.        ACL site_dead nbsrv(server_bbs)LT 2  
  69.        返品ポリシー503を満たしたときにsite_dead#は、オンラインドキュメントは、実際の試験のためにその500、503と言う場合、モニターは失敗します 
  70.        ログ情報から監視ネット192.168.16.2/32#192.168.16.2を記録し、転送されません 
  71.        モニターネット192.168.16.3/32 
  72.        ########フロントエンドの設定############ 
  73.        マッチング操作を複数定義することができる#####注、フロントエンド構成######## ACL 
  74. フロントエンドhttp_80_in 
  75.        0.0.0.0:80#リスニングWebサービスhaproxyポートを提供し、ポート、および同様のVIP LVSポートをバインド 
  76.        7層モデル#httpモードのhttp 
  77.        グローバル#グローバルロギング設定を適用するログ 
  78.        オプションHTTPLOG#ログを有効にするには、http 
  79.        各オプションはhttpclose#HTTPリクエスト積極的に閉じられたチャネルが終了した後、HA-プロキシキープアライブモードがサポートされていません。 
  80.        バックエンドサーバーは、クライアントが時間パラメータを設定する必要があり、実際のIPを取得する必要がある場合#forwardforオプションは、あなたがHTTPヘッダーからクライアントIPを取得することができます 
  81.        ######## ACLポリシーの設定############# 
  82.        ACL itnihao_web hdr_reg(ホスト)-i ^(www.itnihao.cn | ww1.itnihao.cn)$    
  83.        2人のドメイン名に正規表現を満たすために要求されたドメイン名の場合#は大文字小文字を区別しないリターン当てはまる-i 
  84.        ACL itnihao_blog hdr_dom(ホスト)-i blog.itnihao.cn 
  85.        #要求されたドメイン名は大文字小文字を無視する場合はtrueを返す-i www.itnihao.cn満たすのであれば 
  86.        #acl itnihao HDR(ホスト)-i itnihao.cn 
  87.        #要求されたドメイン名は大文字小文字を無視するitnihao.cnが真-iを返す満たすのであれば 
  88.        #acl file_req url_sub -i   のkillall = 
  89.        #での要求URLに含まkillallを=、この制御戦略は真、そうでない場合はfalseを返します。 
  90.        #acl dir_req url_dir -i許可 
  91.        #プレゼンスは、アドレス・パスの一部を許可し、この制御戦略は、そうでない場合はfalse、リクエストURLにtrueを返します 
  92.        #acl missing_cl hdr_cnt(コンテンツ長)EQ 0 
  93.        ときに要求ヘッダ#コンテンツ長等しい戻り真0場合 
  94.        ######## ACLポリシーは、対応する一致############# 
  95.        #BLOCK場合missing_cl 
  96.        リクエスト#1 Content-Lengthヘッダは、返却要求403を防止するために、0に等しい場合 
  97.        !のfile_req場合#BLOCK || dir_req 
  98.        #BLOCKは、ブロック要求を表す現在の表現は、ポリシーfile_reqを満たしていない、またはポリシーdir_reqを満たすようにすれば、403エラーを返し、要求がブロックされています 
  99.        itnihao_web場合use_backendのserver_web 
  100.        #使用するバックエンドserver_web itnihao_web戦略を満たすために 
  101.        itnihao_blog場合use_backendのserver_blog 
  102.        #ときitnihao_blog戦略を満たすserver_blogバックエンドを使用して 
  103.        itnihao場合#REDIRECT接頭http://blog.itniaho.cnコード301 
  104.        301 HTTPでアクセスitnihao.cnは、http://192.168.16.3に選ぶ# 
  105.        default_backendのserver_bbs 
  106.        バックエンドserver_bbsデフォルトを使用する場合#は、上記の満たされていません 
  107.        ##########バックエンドの設定############## 
  108.        #は、今私は、サーバのserver_web、server_blog、server_bbsの三つのグループを設定します
  109. ###########################バックエンドserver_web ##################### ######## 
  110. バックエンドserver_web 
  111.        7層モデル#httpモードのhttp 
  112.        平均方法ラウンドロビン#負荷分散方法ラウンドロビンバランス、 
  113.        クッキーでクッキーSERVERID#のSERVERID許可挿入、後にSERVERIDに定義することができます 
  114.        オプションhttpchk GET /index.htmlが#ハートビートファイル 
  115.        サーバー192.168.16.2:80はweb1クッキーweb1とは間1500上昇3秋3重量1をご確認ください  
  116.        #サーバーの定義、クッキー1は、インター1500をチェックし、SERVERIDがweb1とで表した心拍数の上昇を3回3を検出することであるが、正しいサーバーと見なされる可能です、 
  117.        #fall 3は、図3は、サーバが利用できないと思います失敗した、重量が重量を表しています 
  118.        サーバー192.168.16.3:80 WEB2クッキーWEB2は間1500上昇3秋3重量2をご確認ください 
  119.        #サーバーの定義、クッキー1は、インター1500をチェックし、WEB2としてSERVERIDを表し心拍数上昇を3回3を検出することであるが、正しいサーバーと見なされる可能です、 
  120.        #fall 3は、図3は、サーバが利用できないと思います失敗した、重量が重量を表しています 
  121. ###################################バックエンドserver_blog ############# ################################## 
  122. バックエンドserver_blog 
  123.        7層モデル#httpモードのhttp 
  124.        平均方法ラウンドロビン#負荷分散方法ラウンドロビンバランス、 
  125.        クッキーでクッキーSERVERID#のSERVERID許可挿入、後にSERVERIDに定義することができます 
  126.        オプションhttpchk GET /index.htmlが#ハートビートファイル 
  127.        サーバーblog1 192.168.16.2:80クッキーblog1チェック間1500上昇3秋3重量1  
  128.        #サーバーの定義、クッキー1は、インター1500をチェックし、SERVERIDがweb1とで表し3を秋、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、 
  129.        サーバーblog2 192.168.16.3:80クッキーblog2チェック間1500上昇3秋3重量2 
  130.         #サーバーの定義、クッキー1は、インター1500をチェックし、WEB2としてSERVERIDを表し3を落ち、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、 
  131. ###################################バックエンドserver_bbs ############# ################################## 
  132. バックエンドserver_bbs 
  133.        7層モデル#httpモードのhttp 
  134.        平均方法ラウンドロビン#負荷分散方法ラウンドロビンバランス、 
  135.        クッキーでクッキーSERVERID#のSERVERID許可挿入、後にSERVERIDに定義することができます 
  136.        オプションhttpchk GET /index.htmlが#ハートビートファイル 
  137.        サーバBBS1 192.168.16.2:80クッキーBBS1チェック間1500上昇3秋3重量1  
  138.        #サーバーの定義、クッキー1は、インター1500をチェックし、SERVERIDがweb1とで表し3を秋、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、 
  139.        サーバbbs2 192.168.16.3:80クッキーbbs2チェック間1500上昇3秋3重量2 
  140.         #サーバーの定義、クッキー1は、インター1500をチェックし、WEB2としてSERVERIDを表し3を落ち、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、 

 

 

 

haproxy構成ファイルを変更

[root@localhost ~] # vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
 
global
#   log 127.0.0.1   local0
#   log 127.0.0.1   local1 notice
     log /dev/log     local0 info
     log /dev/log     local0 notice
     maxconn 4096
     uid 99
     gid 99
     daemon
 
defaults
     log global
     mode    http
     option  httplog
     retries 3
     maxconn 4096
     contimeout  5000
     clitimeout  50000
     srvtimeout  50000
 
listen  webcluster 0.0.0.0:80
     option  httpchk GET /index .html
     balance roundrobin
     server  inst1 192.168.200.103:80 check inter 2000 fall 3
     server  inst1 192.168.200.104:80 check inter 2000 fall 3
 
listen admin_stats
     bind 0.0.0.0:8000
     mode http
     option httplog
     maxconn 100
     stats refresh 30s
     stats uri /stats
     stats realm Crushlinux\ Haproxy
         stats auth admin:admin
     stats hide-version

  

起動スクリプトから5.5準備サービス

[root@localhost ~] # cp /usr/src/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
[root@localhost ~] # ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost ~] # chmod +x /etc/init.d/haproxy
[root@localhost ~] # /etc/init.d/haproxy start
Starting haproxy:                                          [确定]

Haproxyログ

Haproxy 的日志默认输出到系统的syslog中,为了更好的管理Haproxy 的日志,在生产环境中一般单独定义出来。
8.1 修改Haproxy配置文件中关于日志配置选项,

[root@localhost ~] # vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
 
global
     #log 127.0.0.1  local0
     #log 127.0.0.1  local1 notice
     
     log /dev/log     local0 info
     log /dev/log     local0 notice
[root@localhost ~] # service haproxy restart
Shutting down haproxy:                                     [确定]
Starting haproxy:                                          [确定]

这两行配置放到global选项中,主要是将Haproxy的info和notice日志分别记录到不同的日志文件中

8.2 修改rsyslog配置
为了便于管理,将Haproxy相关的配置独立定义到haproxy.conf 并放到/etc/rsyslog.d/ 下,rsyslog启动时会自动加载此目录下的所有配置文件。

[root@localhost ~] # vim /etc/rsyslog.d/haproxy.conf
if  ($programname == 'haproxy'  and $syslogserverity-text == 'info' ) then  - /var/log/haproxy/haproxy-info .log
&~
if  ($programname == 'haproxy'  and $syslogserverity-text == 'notice' ) then  - /var/log/haproxy/haproxy-notice .log
&~  

将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log中,将notice日志记录到/var/log/haproxy/haproxy-notice.log中,将notice日志记录到/var/log/haproxy/haproxy-notice
&~ 表示当写入到日志文件后,rsyslog停止处理这个信息,(rainerscript 脚本语言)

重启rsyslog服务
[root@localhost ~]# service rsyslog restart
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]

8.3 查看日志文件是否创建成功

[root@localhost ~] # ls -l /var/log/haproxy/haproxy-info.log
[root@localhost ~] # ls -l /var/log/haproxy/haproxy-notice.log
 
Sep 20 23:39:26 localhost haproxy[2674]: 192.168.200.1:51629 [20 /Sep/2015 :23:38:27.256] web-cluster web-cluster /inst2  0 /0/0/1/59740  200 1648 - - CD-- 0 /0/0/0/0  0 /0  "GET / HTTP/1.1"
Sep 20 23:40:06 localhost haproxy[2674]: 192.168.200.1:51693 [20 /Sep/2015 :23:39:34.423] web-cluster web-cluster /inst2  0 /0/0/0/32120  200 580 - - ---- 1 /1/1/1/0  0 /0  "GET / HTTP/1.1"

8.4 状态统计功能测试

 

おすすめ

転載: www.cnblogs.com/2567xl/p/11640991.html