ユーザ用ツール

サイト用ツール


haproxy:install

文書の過去の版を表示しています。


HAProxy

pcre-devel

rpmbuildに必要

# yum -y install pcre-devel

ログ出力設定

HAProxy のログを出力する

# vi /etc/sysconfig/syslog
-) #SYSLOGD_OPTIONS="-m 0"
+) SYSLOGD_OPTIONS="-m 0 -r"
# vi /etc/syslog.conf
# 全てのログを/var/log/messagesに記録する、ただし、mail、authpriv、cronは取得しない←HAProxyのログ(local0、local1)追加
#*.info;mail.none;authpriv.none;cron.none               /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local0.none;local1.none                /var/log/messages

~ 省略 ~

# HAProxy
local1.*                                                /var/log/haproxy.log

設定を反映させるために、再起動

# /etc/init.d/syslog restart

HAProxyインストール

公式:http://haproxy.1wt.eu/ 最新:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz (2013/01/22時点)

rpmbuildに都合のいい階層で以後の処理を行う

# cd /usr/src/redhat/SOURCES
# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz
# tar zxvf haproxy-1.4.22.tar.gz 

rpmbuild

# rpmbuild -bb ./haproxy-1.4.22/examples/haproxy.spec
# cd /usr/src/redhat/RPMS/x86_64

インストール

# rpm -ivh haproxy-1.4.22-1.x86_64.rpm
Preparing...                ########################################### [100%]
   1:haproxy                ########################################### [100%]

インストールファイルの確認

# rpm -qs haproxy
normal        /etc/haproxy
normal        /etc/haproxy/haproxy.cfg
normal        /etc/rc.d/init.d/haproxy
normal        /usr/sbin/haproxy
normal        /usr/share/doc/haproxy-1.4.22
normal        /usr/share/doc/haproxy-1.4.22/~
normal        /usr/share/man/man1/haproxy.1.gz

設定

# cd /etc/haproxy/
# cp haproxy.cfg haproxy.cfg.org
# vi 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 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

マルチドメインの振り分け

frontend  main *:80
    acl is_adm    hdr_dom(host) -i adm.mono.net
    acl is_app    hdr_dom(host) -i app.mono.net

    use_backend          virtual_adm if is_adm
    default_backend      default_www

backend virtual_adm
    balance     roundrobin
    server      adm01 192.168.24.222:80 check

backend default_www
    balance     roundrobin
    server      web01 192.168.24.225:80 check
    server      web02 192.168.24.226:80 check

静的・動的振り分け

frontend  main *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html
    
    use_backend static          if url_static
    default_backend             app

backend static
    balance     roundrobin
    server      ngx01 192.168.24.223:80 check
    server      ngx02 192.168.24.224:80 check

backend app
    balance     roundrobin
    server      web01 192.168.24.225:80 check
    server      web02 192.168.24.226:80 check

Statistics Report

listen stats :23451
    mode http
    stats enable
    #stats hide-version
    
    #Authentication realm. This can be set to anything. Escape space characters with a backslash.
    stats realm Haproxy\ Statistics
    
    #This is the virtual URL to access the stats page
    stats uri /
    
    #The user/pass you want to use. Change this password!
    stats auth Username:Password

ブラウザから、http://HAProxyのIP:23451 へアクセス

ドキュメント

haproxy/install.1457422773.txt.gz · 最終更新: 2025/02/16 13:50 (外部編集)