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

Back to archive index

庭野 悟 niwan****@showt*****
2011年 12月 9日 (金) 11:00:40 JST


松島様

庭野です。
ご返信有り難う御座います。
こちらこそどうぞ宜しくお願い致します。

> MHAについて無知なので的外れかもしれませんが、この設定ですとActive/Standbyなので
> MHAの強みを生かせないかと思います。
松島様の仰るとおり先日貼らせていただいた設定だと
Active/Standby構成になってしまいます。
MySQLが落ちたかどうかだけを監視したかったので
>>  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"
と設定を入れていましたが、あまり実用的ではないようでした。

> Cloneで立ち上げてしまうと、すべてのノードで同じ条件になってしまいます。
> MHAがそのあたりは調整してくれるのでしょうか??
私自身MHAを勉強し始めたばかりですのでそれほど詳しくはないのですが、
MHAはマスターノードとそれに付随するスレーブノード(マスターと
レプリケーション実施)があったと仮定し、マスターノードが落ちると
自動的にスレーブノードがマスターノードに昇格してくれます。
 ※Linux-haの話題から逸れてしまいそうなので
  細かいところについては省略させていただきます。
  申し訳ありません。
ですので、Heartbeat + Pacemaker側から見たAct/Stbノード両方で
MySQLが起動している必要があります。
そこ視点からCloneで立ち上げる必要があるのではという考えに至りました。

お出しする情報が前後し申し訳ありませんが、今回実現したいことは
 1. Active(Master)ノードでMySQL障害が起きた場合にStanby(Slave)ノード
   がMHAにより自動的にActive(Master)ノードに昇格する。
 2. Heartbeat + Pacemakerが上記[1]の切り替わり監視し、IPフェイル
   オーバーを行う。
   ただし、Heartbeat + PacemakerでのMySQLのフェイルオーバーは
   行わない。※MHAが行うため。

という一連の動作となります。

なお、ご指摘いただいた
> ・orderでsymmetrical=falseにしているのはなぜでしょうか
> ・orderとcolocationを2行に分けているのはなぜでしょうか
についてですが、
> ・orderでsymmetrical=falseにしているのはなぜでしょうか
どこかのサイトから拾ってきたままの設定にしていました。
特別な理由がない限り普通は「true」ですね・・・。
ご指摘感謝します。
> ・orderとcolocationを2行に分けているのはなぜでしょうか
ご指摘されるまで気がつきませんでした。
よくよく考えたらclnPingdもgrpMhaDbもclnDiskdもすべて同居で
起動順番も1行で書けましたね。
colocation colocation-grpMha-1 INFINITY: grpMhaDb clnPingd clnDiskd
order order-grpMhaDb 0: clnPingd clnDiskd grpMhaDb symmetrical=true

いろいろとどうも有り難う御座います。
とても勉強になります。

以上、宜しくお願い致します。

(2011/12/09 10:08), Takehiro Matsushima wrote:
> 庭野 様
> 
> はじめまして、松島と申します。
> よろしくお願いいたします。
> 
> 私の勤め先ではHeartbeat + Pacemaker + MySQL(Async. Repl)の構成で運用しています。
> MHAについて無知なので的外れかもしれませんが、この設定ですとActive/Standbyなので
> MHAの強みを生かせないかと思います。
> 
> Cloneで立ち上げてしまうと、すべてのノードで同じ条件になってしまいます。
> MHAがそのあたりは調整してくれるのでしょうか??
> 
> もし、MHAにそのような機能が無いのでしたらMySQLをCloneではなく
> Master/Slaveにされてはいかがでしょうか。
> 
> 私自身、しっかりと勉強していないので設定についてご教授いただければと思います
> ・orderでsymmetrical=falseにしているのはなぜでしょうか
> ・orderとcolocationを2行に分けているのはなぜでしょうか
> 
> よろしくお願いいたします。
> 
> ----
> Takehiro Matsushima
> 
> 
> 
> 2011年12月8日14:12 庭野 悟<niwan****@showt*****>:
>> はじめまして。庭野と申します。
>>
>> 初投稿となります。
>> どうぞ宜しくお願いします。
>>
>> 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 mailing list
>> Linux****@lists*****
>> http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan
> 
> _______________________________________________
> Linux-ha-japan mailing list
> Linux****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan
> 





Linux-ha-japan メーリングリストの案内
Back to archive index