千万級高同時負荷等化HAProxyのインストールと使用例


1.HAProxyの概要
HAProxyは、TCP(4層)、HTTP(7層)アプリケーションに基づくオープンソース、高性能の負荷等化ソフトウェアです.HAproxyはプロフェッショナルな負荷分散ソフトウェアとして、次のような利点があります.
・信頼性と安定性が非常に良く、ハードウェアレベルのF 5負荷等化設備に匹敵する
最大40,000-50,000個の同時接続を同時に維持でき、単位時間内の最大要求数は20,000個であり、最大データ処理能力は10 Gbpsに達する.
・8種類以上の負荷等化アルゴリズムをサポートし、同時にセッション保持をサポートする
.仮想ホスト機能のサポート
.バージョン1.3以降では接続拒否、完全透明エージェントをサポートしており、これらの機能は他の負荷分散には備わっていない
.HAPRoxyは強力なサーバー状態監視ページを持ち、このページを通じてリアルタイムでシステム状況を知ることができる.
.HAproxyは強力なACLサポートを備えており、使い勝手が非常に良い
HAProxyは、オペレーティングシステムの技術的特性を利用してパフォーマンスを最大化するため、haproxyを使用する際にオペレーティングシステムのパフォーマンスを最適化することが重要です.
2.インストール
HAProxyの公式サイトに行って住所をダウンロードしますhttp://www.haproxy.org/
公式サイトは現在最新の安定版1.7.8バージョンのダウンロードアドレス
http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz
tar zxvf haproxy-1.7.8.tar.gz
cd haproxy-1.7.8
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /usr/local/haproxy/conf
cp examples/option-http_proxy.cfg /usr/local/haproxy/haproxy.cfg

3.みんなが全体の配置ファイルを理解することができるため、私は私の配置ファイルの内容を貼り出して、中に注釈があってみんなの理解を助けます
#
# demo config for Proxy mode
# 

global
        maxconn         20000
	#  HAProxy           
	ulimit-n	41000
	#linux     ,      
        log             127.0.0.1 local0
	#        ,local0       info(err,warnig,minfo,debug)     ,  rsyslog
        uid             200
        gid             200
	#     ,   uid,gid  
        chroot          /var/empty
	nbproc		1
	#HAProxy          ,  daemon    ,         ,     cpu  。
        daemon
	#      ,(    )

defaults
	mode		http
	#         
	retries		3
	#              
	timeout		connect	10s
	#            ,       ,         
	timeout		client	20s
	#                ,       ,         
	timeout		server	30s
	#                    ,       ,         
	timeout		check	5s
	#             ,       ,         

listen	admin_stats
	bind		*:9188
	#           ,               9188  
	mode		http
	log		global
	#      
	stats		refresh 30s
	#          
	stats		uri /haproxy-status
	#uri     
	stats		realm welcome login\ Haproxy
	#      
	stats		auth	admin:admin~!@
	#           ,    
	stats		hide-version
	#       HAProxy     
	stats		admin if TRUE
	#               ,  1.4.9     


frontend test-proxy
	bind		*:80
	#      
        mode            http
        log             global
        option          httplog
		#      
	option		forwardfor
	#       ip。    “X-Forwarded-For”  
	option		httpclose
	#HAProxy            ,        ,        
        option          dontlognull
        option          nolinger
        option          http_proxy
        maxconn         8000
        timeout client  30s

	# layer3: Valid users
#	acl allow_host src 192.168.200.150/32
	acl allow_host src 192.168.10.0/24
	#acl   ,  192.168.10.0/24       
	#acl      
	#acl    acl   acl   -i [          ]
#	acl allow_host src 0.0.0.0/24
	http-request deny if !allow_host
	#       allow_host 

	# layer7: prevent private network relaying
#	acl forbidden_dst url_ip 192.168.0.0/24
#	acl forbidden_dst url_ip 172.16.0.0/12
	acl forbidden_dst url_ip 192.168.20.0/24
	http-request deny if forbidden_dst

	default_backend test-proxy-srv


backend test-proxy-srv
	mode            http
	timeout connect 5s
	timeout server  5s
	retries         2
	option		redispatch
	#   cookie     
	option		abortonclose
	#         
	option          nolinger
	option          http_proxy
#	option		httpchk	GET /index.php
	balance		roundrobin
	cookie		SERVERID
	server web1	192.168.10.101:8080	cookie	server1 weight 6 check inter 2000 rise 2 fall 3
	#         
	server web2	192.168.10.101:8888	cookie	server2	weight 6 check inter 2000 rise 2 fall 3


	# layer7: Only GET method is valid
	acl valid_method        method GET
	acl valid_method	method POST
	http-request deny if !valid_method

	# layer7: protect bad reply
	http-response deny if { res.hdr(content-type) audio/mp3 }

4.起動
haproxyの起動はインストールディレクトリの下のsbinの下で
haproxy -f/usr/local/haproxy.cfg
5.起動時によくあるエラー
in multi-process mode, stats will be limited to process assigned to the current request.
Listenは単一のプロセスで実行する必要があります.デフォルトのプロセスを指定する必要があります.この問題を解決するには、グローバルパラメータnbprocを1に設定します.
Proxy 'admin_stats': stats admin will not work correctly in multi-process mode. [./haproxy.main()] FD limit (16384) too low for maxconn=20000/maxsock=40014. Please raise 'ulimit-n' to 40014 or more to avoid any trouble.
パラメータulimit-nを設定してください の値はmaxconnの2倍に等しい
6.これでhaproxyの単純負荷等化構成が完了し、ACLにより7層の要求制御を制御できる.