VPC上のEC2(CentOS 6.0)でDRBD(8.3)とHeartbeat(3.0)とMySQL(5.5)の記事で自動フェイルオーバーするMySQLができたので、次は、それに合わせて接続先を変更する仕組みを考えます。
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)のインストールと設定で、自動フェイルオーバーにあわせた接続先変更が可能です。
この方法が一番いいような気がします。