[Linux-ha-jp] Heartbeat + Pacemaker + MHA を用いたMySQLマスター冗長化について

アーカイブの一覧に戻る

庭野 悟 niwan****@showt*****
2011年 12月 8日 (木) 14:12:52 JST


はじめまして。庭野と申します。

初投稿となります。
どうぞ宜しくお願いします。

MySQLのマスターノードを冗長化すべく構成検討を行っています。
候補としては以下です。

 1. Heartbeat + Pacemaker + DRBD + MySQL
 2. Heartbeat + Pacemaker + MySQL + MHA

マスターノードは Act/Stb 状態で2台準備し、Act側には仮想IPが
割り当てられていて、更新クエリのみ受け付けるような構成に
なっています。

上記[1]の構成は過去に構築した経験もあるのですが、巷で話題の
MHAも検証してみようと思い[2]のような構成を考えました。
※MHAの付属スクリプトでIPフェイルオーバーを行ってくれる
 サンプルがあるのですが、Perlで書かれていて私には理解できずで。。
上記の[2]のような構成で冗長化を行っている経験者は
いらっしゃいませんでしょうか?

私はまだ検証段階ではありますが、今のところ以下のような設定で
一応は正常に動いていることを確認できています。

ha.cf ※抜粋
 keepalive 2
 deadtime 20
 warntime 15
 initdead 60
 udpport        694
 bcast   eth1            # Linux
 watchdog /dev/watchdog
 node   mha-db01
 node   mha-db02
 respawn root /usr/lib64/heartbeat/ifcheckd
 pacemaker on

crm configure
 property no-quorum-policy="ignore"
 property stonith-enabled="false"
 property startup-fencing="false"
 property stonith-timeout="740s"

 rsc_defaults resource-stickiness="INFINITY" \
 migration-threshold="1"

 primitive res_ip ocf:heartbeat:IPaddr2 \
 params ip="192.168.1.1" nic="eth0" cidr_netmask="24" \
 op start interval="0s" timeout="60s" on-fail="restart" \
 op monitor interval="10s" timeout="60s" on-fail="restart" \
 op stop interval="0s" timeout="60s" on-fail="restart"

 primitive res_mysql ocf:heartbeat:mysql \
 params binary="/usr/bin/mysqld_safe" config="/etc/my.cnf"
datadir="/var/lib/mysql" \
 user="mysql" group="mysql" pid="/var/lib/mysql/mha-db.pid"
socket="/var/lib/mysql/mysql.sock" \
 op start interval="0s" timeout="120s" on-fail="ignore" \
 op monitor interval="10s" timeout="60s" on-fail="ignore" \
 op stop interval="0s" timeout="120s" on-fail="ignore"

 primitive prmPingd ocf:pacemaker:pingd \
 params name="default_ping_set" host_list="192.168.1.254"
multiplier="100" dampen="0" \
 meta migration-threshold="3" \
 op start interval="0s" timeout="60s" on-fail="restart" \
 op monitor interval="10s" timeout="60s" on-fail="restart" \
 op stop interval="0s" timeout="60s" on-fail="block"

 primitive prmDiskd ocf:pacemaker:diskd \
 params name="diskcheck_status" device="/dev/sda" interval="10" \
 meta migration-threshold="3" \
 op start interval="0s" timeout="60s" on-fail="restart" \
 op monitor interval="10s" timeout="60s" on-fail="restart" \
 op stop interval="0s" timeout="60s" on-fail="block"

 group grpMhaDb res_ip res_mysql

 clone clnPingd prmPingd \
 meta clone-max="2" clone-node-max="1"
 clone clnDiskd prmDiskd \
 meta clone-max="2" clone-node-max="1"

 location location-grpMhaDb-1 grpMhaDb \
 rule 200: #uname eq mha-db01 \
 rule 100: #uname eq mha-db02 \
 rule -INFINITY: defined default_ping_set and default_ping_set lt 100 \
 rule -INFINITY: defined diskcheck_status and diskcheck_status eq ERROR \
 rule -INFINITY: defined diskcheck_status_internal and
diskcheck_status_internal eq ERROR

 colocation colocation-grpMhaDb-clnPingd-1 INFINITY: grpMhaDb clnPingd
 colocation colocation-grpMhaDb-clnDiskd-2 INFINITY: grpMhaDb clnDiskd

 order order-clnPingd-grpMhaDb-1 0: clnPingd grpMhaDb symmetrical=false
 order order-clnDiskd-grpMhaDb-2 0: clnDiskd grpMhaDb symmetrical=false

まず動作の前提条件として
 「Act/Stb両方にてMySQLが起動」
  かつ
 「StbはActとレプリケーション中」
があります。
処理の流れは、
 Act側でMySQLダウンを検知したら、crm内のres_mysqlがfailとなり、
 処理を停止(ignore)し、IPフェイルオーバーを行う。
となります。

この設定以外でもっとスマートな方法をご存じな方は
いらっしゃいませんでしょうか。

※今回の場合、MySQLは両サーバーで上がっている必要があるのでCloneで
 作る必要があるような気もしますが、やはりそうなりますでしょうか、、?

宜しくお願い致します。





Linux-ha-japan メーリングリストの案内
アーカイブの一覧に戻る