2011年11月24日木曜日

HAProxy(1.4)でMySQLの自動フェイルオーバーにあわせて接続先を変更

スズキです。

下記で自動フェイルオーバーするMySQLができたので、
VPC上のEC2(CentOS 6.0)でDRBD(8.3)とHeartbeat(3.0)とMySQL(5.5)
次は、それに合わせて接続先を変更する仕組みを考えます。

EC2はVPCでも仮想IPアドレスが利用できないので、
まず、hostsファイルを変更したり、内部DNSをたて、DNSレコードを変更したりして、
自動フェイルオーバーに合わせた接続変更(接続ホスト名のIPアドレスを変更)を
行う方法を考えると思います。

ただ、上記の方法は、ミドルウェアのインストール&設定のみで完結せず、
多少の仕組みの作り込みが必要になってしまうはずです。

今回はMySQLに接続するサーバには必ずHAProxyをインストールし、
アプリケーションはlocalhostのMySQL(HAProxy)に接続し、
フェイルオーバーに伴う接続先変更はHAProxyに任せる方法を試してみました。

まずは、HAProxyのインストールです。
# yum -y install haproxy

"haproxy.cfg"は下記のようにしました。
# cat /etc/haproxy/haproxy.cfg 
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults
    mode                    tcp
    log                     global
    retries                 3
    timeout connect         10s
    timeout client          1m
    timeout server          1m
listen mysql
    bind 0.0.0.0:3306
    mode tcp
    option mysql-check
    balance roundrobin
    server mysql1 suz-lab-ha1:3306 check port 3306
    server mysql2 suz-lab-ha2:3306 check port 3306

ただし、このままだと、HAProxyからMySQLへのヘルスチェックで、
MySQLがHAProxyからの接続をブロックしてしまうので、
MySQLの設定を下記のようにしておきます。

# cat /etc/my.cnf
[mysqld]
...
max_connect_errors=999999999
...

上記のHAProxy経由でMySQLに接続すると、MySQL側をフェイルオーバーさせても、
数秒でHAProxyが接続先をフェイルオーバー後のMySQLに変更してくれ、
アプリケーションは問題なくMySQLに接続し続けることができるようになります。

そして、この方法なら、ミドルウェア(HAProxy)のインストール&設定で、
自動フェイルオーバーにあわせた接続先変更が可能です。

この方法が一番いいような...
--------
http://www.suz-lab.com

0 コメント: