====== HAProxy ====== ===== gcc ===== [[centos:rpm:rpmbuild|rpmbuild]]に必要 gcc他、関連するものを一括でインストール # yum -y groupinstall "Development Tools" ===== pcre-devel ===== [[centos:rpm:rpmbuild|rpmbuild]]に必要 # yum -y install pcre-devel ===== HAProxyインストール ===== 公式:http://www.haproxy.org/ 最新:http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz (2016/05/20時点) [[centos:rpm:rpmbuild|rpmbuild]]に都合のいい階層で以後の処理を行う # /root/rpmbuild/SOURCES # wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz # tar zxvf haproxy-1.4.22.tar.gz [[centos:rpm:rpmbuild|rpmbuild]] # rpmbuild -bb ./haproxy-1.6.5/examples/haproxy.spec インストール # cd /root/rpmbuild/RPMS/x86_64 # rpm -iv ./haproxy-1.6.5-1.x86_64.rpm Preparing... ########################################### [100%] 1:haproxy ########################################### [100%] インストールファイルの確認 # rpm -qs haproxy 通常 /etc/haproxy 通常 /etc/rc.d/init.d/haproxy 通常 /usr/sbin/haproxy 通常 /usr/share/doc/haproxy-1.6.5 通常 /usr/share/doc/haproxy-1.6.5/CHANGELOG 通常 /usr/share/doc/haproxy-1.6.5/README 通常 /usr/share/doc/haproxy-1.6.5/architecture.txt 通常 /usr/share/doc/haproxy-1.6.5/configuration.txt 通常 /usr/share/doc/haproxy-1.6.5/intro.txt 通常 /usr/share/doc/haproxy-1.6.5/management.txt 通常 /usr/share/doc/haproxy-1.6.5/proxy-protocol.txt 通常 /usr/share/man/man1/haproxy.1.gz ユーザー追加 # groupadd -g 188 haproxy # useradd -d /var/lib/haproxy -g haproxy -u 188 -s /sbin/nologin haproxy 設定 # cd /etc/haproxy/ # vi haproxy.cfg sample # 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 loghost local0 info maxconn 4096 #chroot /usr/share/haproxy uid 99 gid 99 daemon #debug #quiet defaults log global mode tcp retries 3 maxconn 2000 contimeout 10s clitimeout 1m srvtimeout 1m listen www 0.0.0.0:81 mode http option httpchk GET /check.html HTTP/1.0 option log-health-checks option forwardfor balance roundrobin server srv01 192.168.26.137:80 check inter 2000 fall 2 server srv02 192.168.26.138:80 check inter 2000 fall 2 listen mysql-slave 0.0.0.0:3307 mode tcp option mysql-check user haproxy option log-health-checks balance roundrobin server mysql1 192.168.26.140:3306 check port 3306 server mysql2 192.168.26.141:3306 check port 3306 listen mysql-master 0.0.0.0:3308 mode tcp option mysql-check user haproxy option log-health-checks balance roundrobin server mysql3 192.168.26.142:3306 check port 3306 HTTPのチェックファイル作成 振り分け先のサーバ(例では、192.168.26.137/138)にヘルスチェック用のファイル(check.html)を作成する 中身は適当 MySQLのチェック用ユーザ作成 振り分け先のサーバ(例では、192.168.26.140/141/142)にヘルスチェック用のユーザ(haproxy)を作成する mysql> grant select on *.* to 'haproxy'@'%'; MySQLの設定変更 vi /etc/my.cnf [mysqld] +) max_connect_errors=999999999 /etc/init.d/mysqld restart 全ての設定が終わったら、HAProxyサービスを起動する # /etc/init.d/haproxy start MySQLの接続テスト ※ホスト「127.0.0.1」の指定が必須。ポートは必要に応じて。 # mysql -u haproxy -h 127.0.0.1 -P 3307 サービス起動の設定 # chkconfig haproxy on # chkconfig --list | grep haproxy haproxy 0:off 1:off 2:on 3:on 4:on 5:on 6:off ===== その他 ===== HTTPの振り分けを行うと、振り分け先のapacheのアクセスログにヘルスチェックのログが大量に記載される 192.168.26.127 - - [22/Jan/2013:00:02:01 -0800] "GET /check.html HTTP/1.0" 200 4 "-" "-" 192.168.26.126 - - [22/Jan/2013:00:02:02 -0800] "GET /check.html HTTP/1.0" 200 4 "-" "-" これを残さないようにするため、apacheの設定を変更する # vi /etc/httpd/conf/httpd.conf -) #CustomLog logs/access_log combined +) SetEnvIf Request_URI "check.html" nolog +) CustomLog logs/access_log combined env=!nolog # /etc/init.d/httpd restart haproxyを経由したapacheのアクセスログにはロードバランサのIPアドレスが記録される。 クライアントのIPを記録したい場合はmod_rpafを使う # yum -y install httpd-devel # wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz # tar xvfz mod_rpaf-0.6.tar.gz # cd mod_rpaf-0.6 # vi Makefile -) #APXS2=$(shell which apxs2) +) APXS2=/usr/sbin/apxs # make rpaf-2.0 # make install-2.0 # vi /etc/httpd/conf.d/mod_rpaf.conf LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 192.168.26.137 RPAFheader X-Forwarded-For # /etc/init.d/httpd restart ===== ドキュメント ===== http://cbonte.github.io/haproxy-dconv/configuration-1.4.html