2010年3月16日火曜日

CentOS で「Multi-Master Replication Manager for MySQL」(設定&起動編)

スズキです。

インストールの次は設定です。
http://blog.suz-lab.com/2010/03/centosmulti-master-replication-manager.html

今回は、2台の MySQLがインストールされたマシンを用意し、
以下のようにIPアドレスをふるようにします。

mysql-1: 192.168.11.11 (実マシンとして)
mysql-2: 192.168.11.12 (実マシンとして)
writer-0: 192.168.11.20 (マスタへの仮想IPアドレス)
reader-1: 192.168.11.21 (読み取り専用の仮想IPアドレス)
reader-2: 192.168.11.22 (読み取り専用の仮想IPアドレス)

ということで、マシンが二つとも正常な場合は、
例えば、各マシンに下記のようにIPアドレスがふられます。

MySQL1: 192.168.11.11 192.168.11.21 192.168.11.21
MySQL2: 192.168.11.12 192.168.11.22

そして、MySQL1が故障した場合は、仮想IPアドレスが下記のようにふりなおされます。

MySQL2: 192.168.11.12 192.168.11.22 192.168.11.21 192.168.11.21

ですので、writer-0, reader-1, reader-2、に対してアクセスしていれば、
どちらかのマシンが故障しても、自動でフェイルオーバーされることになります。

早速、設定に関してですが、MMMでは以下の二つのサービスプログラムを起動します。

【/etc/init.d/mysql-mmm-monitor】
稼動してるMySQLを監視するプログラムです。適当なマシンで一つ動作しておればよく、
故障を検知したときの、ファイルオーバーの決定なども行います。

【/etc/init.d/mysql-mmm-agent】
こちらは、MySQLがインストールされているマシン、一台一台で動作させる必要があります。
おそらく、"monitor"からの指示(フェイルオーバーなど)を実際に実行する
プログラムだと思います。

ですので、MySQLでは、上記二つのプログラムが利用するユーザーを、
下記のように作成する必要があります。("monitor"は"mysql-1"で起動しています)

【MySQL1】

GRANT REPLICATION CLIENT ON *.*
TO 'mon'@'mysql-1' IDENTIFIED BY 'mon!23';

GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.*
TO 'agent'@'mysql-1' IDENTIFIED BY 'agent!23';

【MySQL2】

GRANT REPLICATION CLIENT ON *.*
TO 'mon'@'mysql-1' IDENTIFIED BY 'mon!23';

GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.*
TO 'agent'@'mysql-2' IDENTIFIED BY 'agent!23';

ユーザーができたら、今度は設定ファイルの調整です。

まずは、共通設定ファイル(/etc/mysql-mmm/mmm_common.conf)です。
上記の仕込を設定ファイルに反映した感じになっているので、
直感的にわかるのでは、と思っています。

--------【mmm_common.conf 】--------
active_master_role writer

<host default>
  cluster_interface eth0
  pid_path /var/run/mysql-mmm/mmmd_agent.pid
  bin_path /usr/libexec/mysql-mmm/
  replication_user repl
  replication_password repl!23
  agent_user agent
  agent_password agent!23
</host>

<host mysql-1>
  ip 192.168.11.11
  mode master
  peer mysql-2
</host>

<host mysql-2>
  ip 192.168.11.12
  mode master
  peer mysql-1
</host>

<role writer>
  hosts mysql-1, mysql-2
  ips 192.168.11.20
  mode exclusive
</role>

<role reader>
  hosts mysql-1, mysql-2
  ips 192.168.11.21, 192.168.11.22
  mode balanced
</role>
--------

次に、"monitor"の設定ファイル(/etc/mysql-mmm/mmm_mon.conf))です。
といっても雛形に対して、上記で設定(定義)した、IPアドレスと
MySQLのユーザー/パスワードを書き込むだけですが...

--------【mmm_mon.conf】--------
include mmm_common.conf

<monitor>
ip 127.0.0.1
pid_path /var/run/mysql-mmm/mmmd_mon.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmmd_mon.status
ping_ips 192.168.11.1, 192.168.11.11, 192.168.11.12
auto_set_online 60
</monitor>

<host default>
monitor_user mon
monitor_password mon!23
</host>

debug 0
--------
※ "ping_ips"の"192.168.11.1"はデフォルトゲートウェイもチェックするってことです。

最後に、"agent"の設定ファイル(/etc/mysql-mmm/mmm_agent.conf)です。
"this"に対して、自分"mysql-1"を定義しています。
(当然、"mysql-2"上での設定なら、"mysql-2"を定義します)

--------【mmm_agent.conf】--------
include mmm_common.conf

this mysql-1
--------

※ 上記設定の詳しい内容は下記より参照できます。
http://mysql-mmm.org/mmm2:guide#configure_mmm

ここまで設定できたら、以下のようにサービスを起動します。

【mysql-1】
# /etc/init.d/mysql-mmm-agent start
# /etc/init.d/mysql-mmm-monitor start

【mysql-2】
# /etc/init.d/mysql-mmm-agent start

少し時間がたってから、"mysql-1"で下記コマンドを実行すると、
当初の想定どおり、IPアドレスが割り振られていることがわかります。

# mmm_control show
mysql-1(192.168.11.11) master/ONLINE. Roles: reader(192.168.11.22),
writer(192.168.11.20)
mysql-2(192.168.11.12) master/ONLINE. Roles: reader(192.168.11.21)

そして、"mysql-1"のMySQLを停止して、再度、同様のコマンドを実行すると、
下記のように、フェールオーバーされることも確認できます。

# /etc/init.d/mysqld stop
# mmm_control show
mysql-1(192.168.11.11) master/HARD_OFFLINE. Roles:
mysql-2(192.168.11.12) master/ONLINE. Roles: reader(192.168.11.21),
reader(192.168.11.22), writer(192.168.11.20)

"mmm_mon_CLUSTER.conf"って何だろう?("monitor"もクラスタにできる?)

--------
http://www.suz-lab.com

0 コメント: