スズキです。
インストールの次は設定です。
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