Multi-Master Replication Manager for MySQL をFreeBSDで使ってみた
Multi-Master Replication Manager for MySQL をFreeBSDで使ってみた
公式サイト:http://mysql-mmm.org/
基本的にはインストールガイドやドキュメントに書いてあるようにすればよさそうなのですが、FreeBSDで動かすのがちょっと面倒だったのでメモ。
lib/Agent/Agent.pm にパッチをあてる
Unix::Uptimeを使うようになってるのだけど、おかしいような気がしたので修正。
diff -ur mysql-mmm-2.1.0/lib/Agent/Agent.pm mysql-mmm-2.1.0a/lib/Agent/Agent.pm --- mysql-mmm-2.1.0/lib/Agent/Agent.pm 2010-02-19 00:49:25.000000000 +0900 +++ mysql-mmm-2.1.0a/lib/Agent/Agent.pm 2010-02-26 13:39:38.000000000 +0900 @@ -14,7 +14,7 @@ eval { no warnings 'once'; require Unix::Uptime; - *uptime = *Unix::Uptime->uptime; + *uptime = sub { Unix::Uptime->uptime }; }; if ($EVAL_ERROR) { require MMM::Common::Uptime;
こうしないとダメな気がするんだけど。気のせい?
Makefileとかも書き換える
FreeBSDで標準的なパスにインストールするように修正。
(ただ、FreeBSDの標準的なパスがこれで合っているかは未確認)
diff -ur mysql-mmm-2.1.0/Makefile mysql-mmm-2.1.0a/Makefile --- mysql-mmm-2.1.0/Makefile 2010-02-19 00:49:25.000000000 +0900 +++ mysql-mmm-2.1.0a/Makefile 2010-03-01 12:57:24.000000000 +0900 @@ -1,41 +1,42 @@ ifndef INSTALLDIR -INSTALLDIR = installvendorlib +INSTALLDIR = sitelib endif -MODULEDIR = $(DESTDIR)$(shell eval "`perl -V:${INSTALLDIR}`"; echo "$$${INSTALLDIR}")/MMM -BINDIR = $(DESTDIR)/usr/lib/mysql-mmm -SBINDIR = $(DESTDIR)/usr/sbin -LOGDIR = $(DESTDIR)/var/log/mysql-mmm -ETCDIR = $(DESTDIR)/etc +MODULEDIR = $(shell eval "`perl -V:${INSTALLDIR}`"; echo "$$${INSTALLDIR}")/MMM +BINDIR = /usr/local/libexec/mysql-mmm +SBINDIR = /usr/local/sbin +LOGDIR = /var/log/mysql-mmm +ETCDIR = /usr/local/etc CONFDIR = $(ETCDIR)/mysql-mmm install_common: - mkdir -p $(DESTDIR) $(MODULEDIR) $(BINDIR) $(SBINDIR) $(LOGDIR) $(ETCDIR) $(CONFDIR) $(ETCDIR)/init.d/ - cp -r lib/Common/ $(MODULEDIR) + mkdir -p $(DESTDIR) $(MODULEDIR) $(BINDIR) $(SBINDIR) $(LOGDIR) $(ETCDIR) $(CONFDIR) $(ETCDIR)/rc.d/ + cp -r lib/Common $(MODULEDIR) [ -f $(CONFDIR)/mmm_common.conf ] || cp etc/mysql-mmm/mmm_common.conf $(ETCDIR)/mysql-mmm/ install_agent: install_common mkdir -p $(BINDIR)/agent/ - cp -r lib/Agent/ $(MODULEDIR) + cp -r lib/Agent $(MODULEDIR) cp -r bin/agent/* $(BINDIR)/agent/ - cp -r etc/init.d/mysql-mmm-agent $(ETCDIR)/init.d/ + cp -r etc/init.d/mysql-mmm-agent $(ETCDIR)/rc.d/ cp sbin/mmm_agentd $(SBINDIR) [ -f $(CONFDIR)/mmm_agent.conf ] || cp etc/mysql-mmm/mmm_agent.conf $(ETCDIR)/mysql-mmm/ install_monitor: install_common mkdir -p $(BINDIR)/monitor/ - cp -r lib/Monitor/ $(MODULEDIR) + cp -r lib/Monitor $(MODULEDIR) cp -r bin/monitor/* $(BINDIR)/monitor/ - cp -r etc/init.d/mysql-mmm-monitor $(ETCDIR)/init.d/ + cp -r etc/init.d/mysql-mmm-monitor $(ETCDIR)/rc.d/ cp sbin/mmm_control sbin/mmm_mond $(SBINDIR) [ -f $(CONFDIR)/mmm_mon.conf ] || cp etc/mysql-mmm/mmm_mon.conf $(ETCDIR)/mysql-mmm/ install_tools: install_common mkdir -p $(BINDIR)/tools/ - cp -r lib/Tools/ $(MODULEDIR) + cp -r lib/Tools $(MODULEDIR) cp -r bin/tools/* $(BINDIR)/tools/ cp sbin/mmm_backup sbin/mmm_clone sbin/mmm_restore $(SBINDIR) [ -f $(CONFDIR)/mmm_tools.conf ] || cp etc/mysql-mmm/mmm_tools.conf $(ETCDIR)/mysql-mmm/ install: install_agent install_monitor install_tools +
この変更で設定ファイルは /usr/lcoal/etc 以下に配置するようにしたので、設定ファイルを読み込んでいるところも修正する。
diff -ur mysql-mmm-2.1.0/lib/Common/Config.pm mysql-mmm-2.1.0a/lib/Common/Config.pm --- mysql-mmm-2.1.0/lib/Common/Config.pm 2010-02-19 00:49:25.000000000 +0900 +++ mysql-mmm-2.1.0a/lib/Common/Config.pm 2010-02-26 13:40:03.000000000 +0900 @@ -245,7 +245,7 @@ my $file = shift; $file .= '.conf' unless ($file =~ /\.conf$/); - my @paths = qw(/etc /etc/mmm /etc/mysql-mmm); + my @paths = qw(/etc /etc/mmm /etc/mysql-mmm /usr/local/etc/mysql-mmm); my $fullname; foreach my $path (@paths) {
あと、gmakeが必要。いつも忘れる。
Perlのモジュールをインストールする、他
基本的にはRequirememtsにあるモジュールを入れればいいのだけれど、(現時点で)列挙されていないモジュールとしては
がある(どちらもnodes向け)。
あと、モニタリングホストで動かすperlはスレッドを有効にしてないといけないのがちょっと面倒だった。
設定ファイルの修正
環境に合わせて修正するものなのであれですが、FreeBSDで使う場合の注意点としては
- mmm_common.confやmmm_mon.confのbin_pathを修正する(上記のMakefileなら/usr/local/libexec/mysql-mmm)
- mmm_common.confにあるcluster_interfaceはdefaultではなく各hostのところに書いたほうがよさそう
――あたりでしょうか。