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
- ####################グローバルコンフィギュレーション########################
- #######プロセスレベルパラメータ、通常、オペレーティングシステム(OS)に関連ある#########
- グローバル
- 接続のMAXCONN 20480#のデフォルトの最大数
- 127.0.0.1のLOCAL0#ログ出力の設定を記録し、すべてのログ・レコードは、出力はlocal0システムログに存在しています
- ログレベルについて127.0.0.1のLOCAL1通知#noticeログ、通常、24のレベル(デバッグwarringinfoエラー)
- パスchroot環境の/ var / haproxy #chrootラン
- ユーザーのuid 99位実行UIDを所属します
- ユーザグループはGID 99#を実行している所属します
- デーモン#テーブルのフォームを実行した後haproxy
- nbproc番号#1のプロセス(あなたは、パフォーマンスを向上させるために複数のプロセスを設定することができます)
- /var/run/haproxy.pid #haproxy PIDファイルPIDストレージ・パスは、ユーザーがプロセスがこのファイルにアクセスする権限を持っている必要があります開始します
- ulimitの-N 65535 #ulimitの数量
- デフォルトでは、#####################設定######################
- フロントエンド、バックエンドを使用するように構成することができる##これらのパラメータは、アセンブリ聞く##
- デフォルト
- グローバルログ
- カテゴリーモードのhttp#が処理(#7層のhttp; 4層のTCP)
- 接続の20480#最大数をMAXCONN
- オプションHTTPLOG#HTTPログ形式ログカテゴリ
- 各オプションhttpclose#HTTPリクエストの完了後にアクティブチャネルを閉じます
- オプションdontlognull#がヘルスチェックログ情報を記録しません。
- #forwardforオプションのバックエンドサーバは、実際のクライアントのIPパラメータを設定する必要があります取得する必要がある場合は、HTTPヘッダーからクライアントIPを取得することができます
- オプションの再ディスパッチは、他の正常なサーバーに向け強制的に、対応するサーバがハング#serverId後
- #abortoncloseオプション際に高いサーバーの負荷時、自動的に現在のキュー処理が比較的長い接続の終わりオフ
- 統計は、30の#統計ページの更新間隔をリフレッシュ
- あなたはまた戻って設定することができ、3#3回の接続が失敗したサービスが利用できないと考えて再試行
- バランスラウンドロビン#デフォルトのロードバランシングモード、ポーリング
- #balanceソース#のデフォルトのロードバランス方式、類似したnginxののip_hash
- #デフォルトロードバランシングモードleastconn #balance、最小接続
- contimeout 5000#接続タイムアウト
- 50000#クライアントのタイムアウトclitimeout
- srvtimeout 50000#サーバのタイムアウト
- タイムアウトチェック2000#ハートビートタイムアウト
- 設定し####################### ####################監視ページを
- バックエンドはADMIN_STATUS #Frontendおよびそれらの組み合わせ、監視するグループの名前、オンデマンドカスタム名を聞きます
- 0.0.0.0:65532#リスニングポートをバインド
- 7層モデル#httpモードのhttp
- 127.0.0.1 LOCAL3のERR#エラーログを記録
- 統計は5秒#モニタをリフレッシュ5秒ごとに自動的にページを更新
- 統計URI /管理?URL統計#監視ページ
- \プロンプトitnihao#監視ページitnihao統計レルム
- 統計認証管理者:ユーザーおよびパスワード管理者管理者#監視ページには、複数のユーザー名を設定することができます
- 統計認証ADMIN1:ユーザー名とパスワードADMIN1のADMIN1#監視ページ
- 統計は、非表示、バージョンの統計ページで#バージョンHAproxy非表示情報を
- 統計情報管理TRUE#は、手動で(haproxy-1.4.9バージョンの後)/無効、バックエンドサーバーを有効にした場合
- 403 /etc/haproxy/errorfiles/403.httpをERRORFILE
- 500 /etc/haproxy/errorfiles/500.httpをERRORFILE
- 502 /etc/haproxy/errorfiles/502.httpをERRORFILE
- 503 /etc/haproxy/errorfiles/503.httpをERRORFILE
- 504 /etc/haproxy/errorfiles/504.httpをERRORFILE
- ログインコンテンツ################# HAProxyセット###################
- リクエストヘッダホストLEN 40を捕捉
- 10 lenの捕捉要求ヘッダーのContent-Length
- 捕捉要求ヘッダーリファラーLEN 200
- 40をlenのキャプチャレスポンスヘッダサーバ
- レスポンスヘッダーのContent-Length LEN 10を捕捉
- キャプチャレスポンスヘッダのCache-Control LEN 8
- #######################ウェブサイトの監視を設定するには、耳を傾け#####################
- ###########これは、使用haproxyバックエンドサーバーの監視ステータスを監視するために主にある############
- site_statusを聞きます
- 0.0.0.0:1081#リスニングポートをバインド
- 7層モデル#httpモードのhttp
- 127.0.0.1 LOCAL3 ERR#をログ[警告情報デバッグを誤ります]
- 監視-URIのサイトには、通常のリターン200とHAProxyを管理することが可能かどうかを検出するために使用/ site_statusの#ヘルスモニタリングのウェブサイトのURLを、503は通常の状態に戻りません。
- 効果的な戦略の数は、マシンLT 2つの#は、ステージ1が指定されたバックエンドよりも小さいときに、ロードバランシングに掛かっACL site_dead nbsrv(server_web)ダウンサイトを定義するとき場合にtrueを返します
- ACL site_dead nbsrv(server_blog)LT 2
- ACL site_dead nbsrv(server_bbs)LT 2
- 返品ポリシー503を満たしたときにsite_dead#は、オンラインドキュメントは、実際の試験のためにその500、503と言う場合、モニターは失敗します
- ログ情報から監視ネット192.168.16.2/32#192.168.16.2を記録し、転送されません
- モニターネット192.168.16.3/32
- ########フロントエンドの設定############
- マッチング操作を複数定義することができる#####注、フロントエンド構成######## ACL
- フロントエンドhttp_80_in
- 0.0.0.0:80#リスニングWebサービスhaproxyポートを提供し、ポート、および同様のVIP LVSポートをバインド
- 7層モデル#httpモードのhttp
- グローバル#グローバルロギング設定を適用するログ
- オプションHTTPLOG#ログを有効にするには、http
- 各オプションはhttpclose#HTTPリクエスト積極的に閉じられたチャネルが終了した後、HA-プロキシキープアライブモードがサポートされていません。
- バックエンドサーバーは、クライアントが時間パラメータを設定する必要があり、実際のIPを取得する必要がある場合#forwardforオプションは、あなたがHTTPヘッダーからクライアントIPを取得することができます
- ######## ACLポリシーの設定#############
- ACL itnihao_web hdr_reg(ホスト)-i ^(www.itnihao.cn | ww1.itnihao.cn)$
- 2人のドメイン名に正規表現を満たすために要求されたドメイン名の場合#は大文字小文字を区別しないリターン当てはまる-i
- ACL itnihao_blog hdr_dom(ホスト)-i blog.itnihao.cn
- #要求されたドメイン名は大文字小文字を無視する場合はtrueを返す-i www.itnihao.cn満たすのであれば
- #acl itnihao HDR(ホスト)-i itnihao.cn
- #要求されたドメイン名は大文字小文字を無視するitnihao.cnが真-iを返す満たすのであれば
- #acl file_req url_sub -i のkillall =
- #での要求URLに含まkillallを=、この制御戦略は真、そうでない場合はfalseを返します。
- #acl dir_req url_dir -i許可
- #プレゼンスは、アドレス・パスの一部を許可し、この制御戦略は、そうでない場合はfalse、リクエストURLにtrueを返します
- #acl missing_cl hdr_cnt(コンテンツ長)EQ 0
- ときに要求ヘッダ#コンテンツ長等しい戻り真0場合
- ######## ACLポリシーは、対応する一致#############
- #BLOCK場合missing_cl
- リクエスト#1 Content-Lengthヘッダは、返却要求403を防止するために、0に等しい場合
- !のfile_req場合#BLOCK || dir_req
- #BLOCKは、ブロック要求を表す現在の表現は、ポリシーfile_reqを満たしていない、またはポリシーdir_reqを満たすようにすれば、403エラーを返し、要求がブロックされています
- itnihao_web場合use_backendのserver_web
- #使用するバックエンドserver_web itnihao_web戦略を満たすために
- itnihao_blog場合use_backendのserver_blog
- #ときitnihao_blog戦略を満たすserver_blogバックエンドを使用して
- itnihao場合#REDIRECT接頭http://blog.itniaho.cnコード301
- 301 HTTPでアクセスitnihao.cnは、http://192.168.16.3に選ぶ#
- default_backendのserver_bbs
- バックエンドserver_bbsデフォルトを使用する場合#は、上記の満たされていません
- ##########バックエンドの設定##############
- #は、今私は、サーバのserver_web、server_blog、server_bbsの三つのグループを設定します
- ###########################バックエンドserver_web ##################### ########
- バックエンドserver_web
- 7層モデル#httpモードのhttp
- 平均方法ラウンドロビン#負荷分散方法ラウンドロビンバランス、
- クッキーでクッキーSERVERID#のSERVERID許可挿入、後にSERVERIDに定義することができます
- オプションhttpchk GET /index.htmlが#ハートビートファイル
- サーバー192.168.16.2:80はweb1クッキーweb1とは間1500上昇3秋3重量1をご確認ください
- #サーバーの定義、クッキー1は、インター1500をチェックし、SERVERIDがweb1とで表した心拍数の上昇を3回3を検出することであるが、正しいサーバーと見なされる可能です、
- #fall 3は、図3は、サーバが利用できないと思います失敗した、重量が重量を表しています
- サーバー192.168.16.3:80 WEB2クッキーWEB2は間1500上昇3秋3重量2をご確認ください
- #サーバーの定義、クッキー1は、インター1500をチェックし、WEB2としてSERVERIDを表し心拍数上昇を3回3を検出することであるが、正しいサーバーと見なされる可能です、
- #fall 3は、図3は、サーバが利用できないと思います失敗した、重量が重量を表しています
- ###################################バックエンドserver_blog ############# ##################################
- バックエンドserver_blog
- 7層モデル#httpモードのhttp
- 平均方法ラウンドロビン#負荷分散方法ラウンドロビンバランス、
- クッキーでクッキーSERVERID#のSERVERID許可挿入、後にSERVERIDに定義することができます
- オプションhttpchk GET /index.htmlが#ハートビートファイル
- サーバーblog1 192.168.16.2:80クッキーblog1チェック間1500上昇3秋3重量1
- #サーバーの定義、クッキー1は、インター1500をチェックし、SERVERIDがweb1とで表し3を秋、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、
- サーバーblog2 192.168.16.3:80クッキーblog2チェック間1500上昇3秋3重量2
- #サーバーの定義、クッキー1は、インター1500をチェックし、WEB2としてSERVERIDを表し3を落ち、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、
- ###################################バックエンドserver_bbs ############# ##################################
- バックエンドserver_bbs
- 7層モデル#httpモードのhttp
- 平均方法ラウンドロビン#負荷分散方法ラウンドロビンバランス、
- クッキーでクッキーSERVERID#のSERVERID許可挿入、後にSERVERIDに定義することができます
- オプションhttpchk GET /index.htmlが#ハートビートファイル
- サーバBBS1 192.168.16.2:80クッキーBBS1チェック間1500上昇3秋3重量1
- #サーバーの定義、クッキー1は、インター1500をチェックし、SERVERIDがweb1とで表し3を秋、3回3が正しいサーバが利用可能であると考えられている心拍数の上昇を検出することである3は、思考サーバーを失敗している利用できない、重量が重量を表し、
- サーバbbs2 192.168.16.3:80クッキーbbs2チェック間1500上昇3秋3重量2
- #サーバーの定義、クッキー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 状态统计功能测试