庭野 悟
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で 作る必要があるような気もしますが、やはりそうなりますでしょうか、、? 宜しくお願い致します。