====== 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