mysql-mmm
MMM(Multi-Master Manager)多主管理
一 所需服务器及条件
1) 一台监控服务器
2) 两台互为主从的mysql服务器(配置方法不在这里详述了)
3)系统环境为centos4.8 x64,mysql-5.1.40
主机:
monitor 192.168.0.13
master1 192.168.0.17:3306(db7)
master2 192.168.0.18:3306(db8)
虚拟ip:
192.168.0.91 (Writer)
192.168.0.92 (Reader)
192.168.0.93 (Reader)
db8作为优先写,虚ip为192.168.0.91;读,虚ip为192.168.0.93
db7作为备份写(无虚ip);读,虚ip为192.168.0.92
二 安装配置
1) 监控机 monitor
安装
wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz -o mysql-mmm-2.2.1.tar.gz
tar -zxvf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install_common
make install_monitor
mmm采用perl编写,需要安装相关的perl模块才能使用,perl版本(v5.8.5),我采用的都是手动到cpan下载然后手动安装
不建议采用cpan -i之类的自动方式安装,以前做别的事采用此种方式安装,都不是很顺利,主观态度而已。
模块列表
Algorithm::Diff
Class::Singleton
DBI
DBD::mysql
File::Basename(下载的时候会直接定向到perl-5.12.2.tar.gz,我没有安装,mmm可以正常使用)
File::stat(下载的时候会直接定向到perl-5.12.2.tar.gz,我没有安装,mmm可以正常使用)
File::Temp
Log::Dispatch
Log::Log4perl
Mail::Send
Net::Ping
Proc::Daemon
Thread::Queue
Time::HiRes
配置
vi /etc/mysql-mmm/mmm_common.conf
active_master_role writer
cluster_interface eth0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user replm
replication_password replm
agent_user mmm_agent
agent_password mmm_agent
ip 192.168.0.18
mysql_port 3306
mode master
peer db7
ip 192.168.0.17
mysql_port 3306
mode master
peer db8
hosts db8, db7
ips 192.168.0.91
mode exclusive
prefer db8
hosts db8, db7
ips 192.168.0.92, 192.168.0.93
mode balanced
================================================================
vi /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
ip 192.168.0.13
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.0.17,192.168.0.18
monitor_user mmm_mon
monitor_password mmm_mon
debug 0
===============================================================
vi mmm_mon_log.conf (记录INFO日志,有FATAL报错,发送邮件通知)
log4perl.logger = INFO, MMMLog , MailFatal
log4perl.appender.MMMLog = Log::Log4perl::Appender::File
log4perl.appender.MMMLog.Threshold = INFO
log4perl.appender.MMMLog.filename = /var/log/mysql-mmm/mmm_mond.log
log4perl.appender.MMMLog.recreate = 1
log4perl.appender.MMMLog.layout = PatternLayout
log4perl.appender.MMMLog.layout.ConversionPattern = %d %5p %m%n
log4perl.appender.MailFatal = Log::Log4perl::Appender::File
log4perl.appender.MailFatal.Threshold = FATAL
log4perl.appender.MailFatal.mode = pipe (此处有几种方式,appends是默认追加文件;pipe方式是把filename看成可执行文件,了解详情参考Log::Log4perl::Appender::File手册)
log4perl.appender.MailFatal.filename = /var/log/mysql-mmm/mpipe
log4perl.appender.MailFatal.recreate = 1
log4perl.appender.MailFatal.buffered = 0
log4perl.appender.MailFatal.layout = PatternLayout
log4perl.appender.MailFatal.layout.ConversionPattern = %d %5p %m%n
====================================================================
vi /var/log/mysql-mmm/mpipe
#!/bin/bash
while read Message
do
/var/log/mysql-mmm/email.pl "$Message"
done;
=================================================================
vi /var/log/mysql-mmm/email.pl
#!/usr/bin/perl
use Mail::Sender;
my $mailto = "接收报警的邮箱";
my $mailfrom = '发送报警的邮箱';
my $content;
my $smtp_server = 'smtp服务器';
my $mailuser = '可以认证通过的user';
my $mailpasswd = '密码';
my $subject = MMM-Status;
chmod($subject);
$content.="$ARGV[0]";
&sendMail($smtp_server,$mailfrom,$mailto,$subject,$content,$mailuser,$mailpasswd);
exit();
sub sendMail{
my ($smtp_server,$from,$to,$title,$msg,$mailuser,$mailpasswd) = @_;
$sender = new Mail::Sender {smtp => $smtp_server, from => $from, to => $to};
if ($sender->MailMsg({
smtp => $smtp_server,
from => $from,
to => $to,
subject => $title,
msg => $msg,
encoding => "Quoted-printable",
charset => "GBK",
debug => 1,
auth => 'LOGIN',
authid => $mailuser ,
authpwd => $mailpasswd
}) < 0) {
# die "$Mail::Sender::Errorn";
$content="";
#next LINE;
}
$sender->Close;
print "Mail sent OK.n";
}
===================================================
这个脚本是采用Mail::Sender,具体使用查手册,权限是755。没有采用shell方式通过sendmail发送邮件,因为有的邮件商对于这种邮件是拒收的。(不管你加啥参数)
最后scp mmm_common.conf到所有agent server相应目录内
监控monitor至此安装配置完毕,先不要启动,待安装完成agent再来启动和检查。
2) 客户机 agent mysql db8
安装
tar -zxvf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install_common
make install_agent
安装Perl模块
Algorithm::Diff
DBI
DBD::mysql
File::Basename
File::stat
Log::Dispatch
Log::Log4perl
Mail::Send
Net::ARP
Proc::Daemon
Time::HiRes
Params::Validate
配置
vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db8
另外一台db7同法安装。
上面所涉及配置文件权限都需是640,否则启动服务会报错,权限太高。
3)建立mysql相关用户(db8和db7都建立)
grant super,replication client,process on *.* to mmm_agent@'%' identified by 'mmm_agent';
grant super,replication client,process on *.* to mmm_mon@'%' identified by 'mmm_mon';
GRANT REPLICATION SLAVE,file ON *.* TO replm@'%' IDENTIFIED BY 'replm';
启动agent进程
/etc/init.d/mysql-mmm-agent start
回到monitor主机启动监控进程
/etc/init.d/mysql-mmm-monitor start
执行
mmm_control show
db7(192.168.0.17) master/ONLINE. Roles: reader(192.168.0.92)
db8(192.168.0.18) master/ONLINE. Roles: reader(192.168.0.93), writer(192.168.0.91)
# Role writer is assigned to it's preferred host db8.
mmm_control checks
db8 ping [last change: 2010/12/14 15:48:25] OK
db8 mysql [last change: 2010/12/15 20:26:54] OK
db8 rep_threads [last change: 2010/12/14 15:49:46] OK
db8 rep_backlog [last change: 2010/12/14 15:49:46] OK: Backlog is null
db7 ping [last change: 2010/12/14 15:48:25] OK
db7 mysql [last change: 2010/12/14 15:48:25] OK
db7 rep_threads [last change: 2010/12/15 16:58:07] OK
db7 rep_backlog [last change: 2010/12/14 15:48:25] OK: Backlog is null
配置完毕。这是mmm的官方文档,配置和安装不明白的自行观看。http://mysql-mmm.org/mysql-mmm.html
切换测试也通过,需要关注mmm的日志和ip add 的信息,了解运行原理。
双主多从的配置也大致相同,不在记录。另外不建议监控服务安装到mysql实体机上,原因请自己体会。
思考
在生产环境适合用吗?需要每个dba或者维护人员都对此安装配置及运行原理甚是了解才行。
另外针对于采用连接池(长连接)方式的应用的话,如果ip漂移到新的server后,连接是否还可以使用,连接池是否会重建,需要和应用配合测试才可以知道,下一步会进行模拟生产环境的测试。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23721637/viewspace-1047124/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23721637/viewspace-1047124/