2012年10月24日水曜日

mysqlfailoverを試した! が使えなかったorz

取り敢えずGTIDを使ってレプリケーションを組んだ記事と、
MySQL WorkbenchからMySQL Utilitiesだけを引っこ抜いてインストールした記事


mysqlfailoverの使い方自体は割と単純で、

$ mysqlfailover --master=root:root@localhost --candidate=root:root@cent22,root:root@cent23 --discover-slaves-login=root:root --log=/tmp/failover.log --rpl-user=repl:repl

MySQL Replication Failover Utility
Failover Mode = auto     Next Interval = Wed Oct 24 11:35:00 2012

Master Information
------------------
Binary Log File  Position  Binlog_Do_DB  Binlog_Ignore_DB
bin.000005       442

Replication Health Status
+------------+-------+---------+--------+------------+------------------------------------------+
| host       | port  | role    | state  | gtid_mode  | health                                   |
+------------+-------+---------+--------+------------+------------------------------------------+
| localhost  | 3306  | MASTER  | UP     | ON         | OK                                       |
| cent22     | 3306  | SLAVE   | UP     | ON         | OK                                       |
| cent23     | 3306  | SLAVE   | UP     | ON         | Slave has 1 transactions behind master.  |
+------------+-------+---------+--------+------------+------------------------------------------+


joeパスワードなのはご愛嬌。topみたいに画面が更新される様になる。

--masterにはマスターのユーザー名[:パスワード]@ホスト名[:ポート番号]を指定。
mysql.failover_consoleテーブルに書き込みをしたり
mysql.userテーブルから読み込みしたりするので、権限のあるユーザーで。

--candidateにはマスターに昇格できるスレーブの情報を指定。
ユーザー名[:パスワード]@ホスト名[:ポート番号],ユーザー名[:パスワード]@ホスト名[:ポート番号],..
複数指定する時は書いた順番で優先される。
↑のやつだと、
"localhostが転けた時はcent22をマスターに昇格、cent22も転けた時はcent23に昇格"
という意味合い。

--discover-slaves-loginには、
マスターにログインして"SHOW SLAVE HOSTS"を叩けるユーザーを指定する。
--slaves=user@host,user@host,.. で列挙する場合、このオプション要らない。

--rpl-userにはREPLICATION SLAVE権限のユーザーを記載する。
これ書いておかないと謎のユーザー(3306@cent23w)で昇格後の新マスターに
つなぎに行くようになった。
動作的にはmysql.slave_master_infoから読んでる様な気配がするんだけどなぜこうなった。。

で、mysqladmin shutdownで順番に殺してやると、たまにしか上手く行かない(´・ω・`)
マスターを落とした直後に、"ERROR: No candidate found for failover."と言われて
mysqlfailoverスクリプトが落ちる。
 ⇒再現条件はっきりしてない。ログにも
  "WARNING Candidate cent22:3306 does not meet the requirements."
  としか書いてくれないから困る。。


また時間が取れたらがんばる。
というか、GTIDベースのレプリケーションにかなりやられたので、
使う予定の人は今から使っておいた方が絶対に良いと思う。。

0 件のコメント :

コメントを投稿