Multi-Master Replication Manager for MySQL 安装

1.   MMM简介

介绍:MMM 是一套灵活的脚本程序,使用perl语言开发。

功能:

1.   用来监控各mysql数据库的状态,包括mysql服务器的状态、从库拷贝活动的状态等。

2.   用来在mysql服务器故障时,切换mysql服务器角色(通过在各mysql服务器上增减虚拟IP实现),

避免单mysql写服务器故障。

3.   当配置多个slave时,可配置多个虚拟读IP,配合第三方负载均衡软件(如LVS),提供负载均衡功能。

特点:配置简单,功能强大。

缺点:需要大量perl库支持,安装比较耗时,而且由于服务器(操作系统)环境不一样,所需的perl库和版本也不一样。

      在本次安装时,在网上搜索了N次,下载了二十几个rpm库,而且安装过程中有各种错误。

 

      由于只提供虚拟IP,来达到真正的读写分离。应用程序需根据一组特定的虚拟IP,来区分读写和读负载均衡。

 

2.   安装Mysql数据库

 

如果系统自带有数据库卸载掉

#yum -y remove mysql-server

#yum -y remove mysql-devel

#yum -y remove mysql-shared

#yum -y remove mysql-client

 

3.   MMM安装向导

这个安装向导描述了在Red Hat Enterprise Linux Server release 5.4( Linux Kernel 2.6.18-164.el5) 环境上安装MMM version 2。一个基本的安装至少包括2台数据库服务器和1台监控服务器,在这个向导里,使用了3台服务器,如下:

 

功能

IP

hostname

Server id

Monitoring host

192.168.2.157

Mon

-

Master1

192.168.2.190

db1

1

Master2

192.168.2.191

db2

2

 

 

使用如下虚拟IP,这些VIP只需在MMM配置文件中配置,然后通过MMM自动设置到各db1db2服务器上,不需手动设置。

 

IP

角色

描述

192.168.2.92

writer

应用程序应使用此IP,进行数据库写操作。

192.168.2.90

reader

应用程序应使用其中的一个IP,进行数据库查询。

192.168.2.90

 

3.1          MMM安装准备

在安装MMM前对db1db2做一些基本的配置,以满足mmm监控。

3.1.1 db1db2 的基本配置

 

在安装完mysql数据库后,编辑/etc/my.cnf(数据库的配置文件),增加或修改以下配置项:

log_bin             = /var/lib/mysql/mysql-bin.log          #master日志文件路径             

log_bin_index       = /var/lib/mysql/mysql-bin.log.index      #master 日志索引文件路径

relay_log           = /var/lib/mysql/mysql-relay-bin         #同步日志文件路径

relay_log_index     = /var/lib/mysql/mysql-relay-bin.index     #同步日志索引文件路径

 

binlog-do-db=issncoreswitch                  #master角色时,需向slave提供同步的数据库

binlog-ignore-db=mysql                      #master角色时,不允许slave同步的数据库

replicate-do-db=issncoreswitch                #slave角色时,需要从master同步的数据库

replicate-ignore-db=mysql                    #slave角色时,不充许从master同步的数据库

auto_increment_increment = 2                #设置master的数量

auto_increment_offset =1                    #在各个服务器上设置一个唯一值,此值不能大于auto_increment_increment

                                         #如果db1中设置为1,则db2中设置为2

expire_logs_days    = 10                    #日志保留的天数

max_binlog_size     = 100M              #日志最大容量

log_slave_updates   = 1

log_bin_trust_function_creators=1             #如果数据库中使用到事件,需设置如下两个值

event_scheduler=1

 

移除下面的配置项,因为bind-address不能指定具体的地址:

bind-address = 127.0.0.1

 

bind-address可指定0.0.0.0地址,表示任何地址。

bind-address = 0.0.0.0

 

配置完后,需重启mysql server.

3.1.2 db1db2上创建用户

现在创建3个不同用户

功能

描述

权限

monitor user

Mmm monitor使用此用户来检测Mysql 服务器的健康状况

REPLICATION CLIENT

agent user

Mmm agent使用此用户来更改服务角色(读或写)

SUPER,REPLICATION CLIENT, PROCESS

relication user

从库使用此用户从master库同步数据。

REPLICATION SLAVE

 

执行以下命令,增加相应用户和用户权限

GRANT REPLICATION CLIENT                 ON *.* TO 'monitor'@'%' IDENTIFIED BY 'monitor';

GRANT SUPER, REPLICATION CLIENT, PROCESS   ON *.* TO 'agent'@'%'   IDENTIFIED BY 'agent';

GRANT REPLICATION SLAVE                  ON *.* TO 'replication'@'%' IDENTIFIED BY 'replication';

grant replication client,reload,super  on *.* to 'tools'@'%' identified by 'tools';

 

注意:在设置密码时,密码长度不能超过32个字符。

 

3.1.3 在数据库之间同步数据

假如db1已包含正确的数据。现有一个空库,需按刚才创建用户的步骤创建相应用户。

 

如果db1在线,首先确保数据库处于只读模式,需执行以下命令:

(db1) mysql>FLUSH TABLES WITH READ LOCK;

 

 

3.1.4 设置db1db2互为主从关系

1.1.1.1              db1设为db2的主服务器

1.        在master1上显示master的状态:

 

 2. Master2上将Master1设为自己的主服务器

mysql >change master to master_host='192.168.2.190',master_user='replication',

master_password='replication',master_log_file='mysql-bin.000040',master_log_pos=138655209;

  注:master_log_file须为上面显示的文件名,master_log_pos须为上面显示的位置。

 

 3.启动Master2的从服务。

   mysql > start slave;

 

 4.显示状态

   MySQL> show slave status\G

   若以下两项显示Yes,则代表同步正常。

   Slave_IO_Running: Yes

   Slave_SQL_Running: Yes

1.1.1.2              db2设为db1的主服务器

 

1.Master2上显示状态

 

 2.在Master1上将Master2设为自己的主服务器

mysql >change master to master_host='192.168.2.191',master_user=’replication’,

master_password='replication',master_log_file='mysql-bin.000017',master_log_pos=107;

  注:master_log_file须为上面显示的文件名,master_log_pos须为上面显示的位置。

 3.启动Master1的从服务。

   mysql > start slave;

 4.显示状态

   MySQL> show slave status\G

 

3.2          下载PerlMMM安装包

官方网站:http://mysql-mmm.org/

 

可在www.google.com.hk上搜索各rpm包并下载。

3.3          安装MMM

如果系统中有旧版本的 mysql-mmm

直接卸载  rpm -aq|grep mysql-mmm |xargs rpm -e –nodeps

卸载过程中会把

把相关的文件删掉

rm –rf /usr/share/mysql-mmm

rm –rf /usr/lib/mysql-mmm

rm –rf /usr/libexec/mysql-mmm

rm –rf /var/lib/mysql-mmm

rm –rf /var/log/mysql-mmm

rm –rf /var/run/mysql-mmm

rm –rf /etc/logrotate.d/mysql-mmm

rm –rf /etc/mysql-mmm

3.3.1 安装mmm依赖的包

rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

rpm -ivh libart_lgpl-2.3.17-4.x86_64.rpm

rpm -ivh perl-XML-Parser-2.34-6.1.2.2.1.x86_64.rpm

rpm -ivh perl-XML-RegExp-0.03-2.el5.noarch.rpm

rpm -ivh perl-Algorithm-Diff-1.1902-2.el5.noarch.rpm

rpm -ivh perl-Class-Singleton-1.4-6.el5.noarch.rpm

rpm -ivh perl-DateManip-5.44-1.2.1.noarch.rpm

rpm -ivh perl-IPC-Shareable-0.60-3.el5.noarch.rpm

rpm -ivh perl-TimeDate-1.16-5.el5.noarch.rpm

rpm -ivh perl-MailTools-1.77-1.el5.noarch.rpm

rpm -ivh perl-Mail-Sender-0.8.13-2.el5.1.noarch.rpm

rpm -ivh perl-Mail-Sendmail-0.79-9.el5.1.noarch.rpm

rpm -ivh perl-MIME-Lite-3.01-5.el5.noarch.rpm

rpm -ivh perl-Net-ARP-1.0.6-1.el5.rf.x86_64.rpm

rpm -ivh perl-Params-Validate-0.88-3.el5.x86_64.rpm

rpm -ivh perl-Path-Class-0.16-1.el5.rf.noarch.rpm

rpm -ivh perl-Proc-Daemon-0.03-1.el5.noarch.rpm

rpm -ivh rrdtool-1.2.27-3.el5.x86_64.rpm

rpm -ivh rrdtool-perl-1.2.27-3.el5.x86_64.rpm

rpm -ivh perl-XML-DOM-1.44-2.el5.noarch.rpm

rpm -ivh perl-DBI-1.620-1.el5.rfx.x86_64.rpm

rpm -ivh perl-Log-Dispatch-2.20-1.el5.noarch.rpm

rpm -ivh perl-Log-Dispatch-FileRotate-1.16-1.el5.noarch.rpm

rpm -ivh perl-Log-Log4perl-1.13-2.el5.noarch.rpm

rpm -ivh mysqlclient15-5.0.67-1.el5.remi.x86_64.rpm

rpm -ivh perl-DBD-MySQL-4.014-1.el5.rfx.x86_64.rpm

 

3.3.2 安装mmm

 

rpm -ivh mysql-mmm-2.2.1-1.el5.noarch.rpm                  #mmm公共安装包

rpm -ivh mysql-mmm-agent-2.2.1-1.el5.noarch.rpm             #mmm代理安装包

rpm -ivh mysql-mmm-monitor-2.2.1-1.el5.noarch.rpm           #mmm监控安装包

rpm -ivh mysql-mmm-tools-2.2.1-1.el5.noarch.rpm             #mmm工具安装包

 

3.3.3 安装后mmm文件

文件目录

描述

/usr/lib/perl5/vendor_perl/5.8.8/MMM

MMM使用的Perl模块

/usr/lib/mysql-mmm

MMM的脚本插件

/usr/sbin

MMM的命令保存路径

/var/log/myql-mmm

MMM的日志保存路径

/etc/mysql-mmm

MMM配置文件保存的路径

/etc/init.d/

Agentmonitor的启动停止脚本

 

配置文件介绍:

Mmm_agent.conf        :mmm_agent进程调用,作用是确定当前的节点名字。

  Mmm_common.conf     :monitoragent进程都调用,大部分配置都在里面。

  Mmm_mon.conf         :mmm_mon进程调用,monitor相关的配置。

3.4          配置MMM

所有通用的配置项放在 /etc/mysql-mmm/mmm_common.conf中,这个配置文件在各服务器是相同的。

3.4.1 mmm_common配置项

active_master_role      writer

 

<host default>

    cluster_interface        eth0                               #真实IP和虚拟IP所在网卡

    pid_path              /var/run/mmm_agentd.pid             #mmm

    bin_path              /usr/lib/mysql-mmm/                 #mmm执行程序所在的目录

    replication_user        replication                          #从库同步的用户

    replication_password    replication                          #从库同步的用户密码

 

    agent_user      agent                                    #代理的用户

    agent_password  agent                                    #代理用户的密码

</host>

 

<host db1>

        ip                                      192.168.2.190  #master1的真实IP

        mode                                   master        #模式,masterslave

        peer                                    db2          #另一个master

</host>

<host db2>

        ip                                      192.168.2.191

        mode                                   master

        peer                                    db1

</host>

<role writer>                                                  #写角色

        hosts                                   db1, db2      #写角色的服务器

        ips                                     192.168.2.92   #虚拟IP

        mode                                   exclusive      #排斥模式,即只允许同一时刻有一个写服务器

</role>

<role reader>

        hosts                                   db1, db2                #读角色的服务器

        ips                                     192.168.2.90, 192.168.2.91  #虚拟IP

        mode                                   balanced

</role>

 

配置完后,把此文件拷贝到所有服务器,包括监控服务器。

 

3.4.2 mmm_agent配置项

在数据库服务器上编辑 /etc/mysql-mmm/mmm_agent.conf.

在服务器db1上配置内容如下:

include mmm_common.conf

# The 'this' variable refers to this server.  Proper operation requires

# that 'this' server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this db1                 #db2服务器上,此项配置为db2

debug 0

 

3.4.3 mmm_mon配置项

在监控服务器上编辑/etc/mysql-mmm/mmm_mon.conf

 

include mmm_common.conf

<monitor>

        ip                   127.0.0.1

        pid_path             /var/run/mmm_mond.pid

        bin_path             /usr/lib/mysql-mmm/                    #mmm程序所在的路径

        status_path           /var/lib/misc/mmm_mond.status

        ping_ips             192.168.2.190, 192.168.2.191              #mmm_agent服务器的真实IP

</monitor>

 

<host default>

        monitor_user          monitor                              #mmm监控服务器所用的用户

        monitor_password      monitor                              #mmm监控服务器所用的用户密码

</host>

debug 0

4.1.1 启动和停止 MMM Agent

设置服务器重启后,mmm agent自启动

chkconfig mysql-mmm-agent  on

 

启动

[root@localhost bin]# /etc/init.d/mysql-mmm-agent start

Starting MMM Agent Daemon:

 

停止

[root@localhost bin]# /etc/init.d/mysql-mmm-agent stop

 

4.1.2 启动和停止MMM Monitor

设置服务器重启后,mmm monitor自启动

chkconfig  mysql-mmm-monitor  on

 

启动

[root@localhost ~]# /etc/init.d/mysql-mmm-monitor start

Daemon bin: '/usr/sbin/mmm_mond'

Daemon pid: '/var/run/mmm_mond.pid'

Starting MMM Monitor daemon: Ok

 

停止

[root@localhost ~]# /etc/init.d/mysql-mmm-monitor stop

 

5.   配置一台monitir监控多组服务器

 

添加一组数据库服务器服务器各种配置同上

IP

角色

描述

192.168.2.253

writer

应用程序应使用此IP,进行数据库写操作。

192.168.2.250

reader

应用程序应使用其中的一个IP,进行数据库查询。

192.168.2.251

 

5.1.1 mmm_mon_log_test1.conf配置

在目录/etc/mysql-mmm/下,复制mmm_mon_log.conf 为 mmm_mon_log_test1.conf并修改为如下配置:

说明:(如果没有mmm_mon_log.conf文件就不需配置)

MailFatal为邮件报警模块

perl日志级别,由低到高:INFO,WARN,ERROR,FATAL

log4perl.logger = FATAL, MMMLog, MailFatal

#log4perl.logger = FATAL, MMMLog

 

log4perl.appender.MMMLog = Log::Log4perl::Appender::File

log4perl.appender.MMMLog.Threshold = INFO

log4perl.appender.MMMLog.filename = /var/log/mysql-mmm/mmm_mond_test1.log

log4perl.appender.MMMLog.recreate = 1

log4perl.appender.MMMLog.layout = PatternLayout

log4perl.appender.MMMLog.layout.ConversionPattern = %d %5p %m%n

 

log4perl.appender.MailFatal = Log::Dispatch::Email::MailSender

log4perl.appender.MailFatal.Threshold = ERROR

log4perl.appender.MailFatal.from = mmm@example.com

log4perl.appender.MailFatal.to = root

log4perl.appender.MailFatal.buffered = 0

log4perl.appender.MailFatal.subject = FATAL error in mysql-mmm-monitor

log4perl.appender.MailFatal.layout = PatternLayout

log4perl.appender.MailFatal.layout.ConversionPattern = %d %m%n

5.1.2  mmm_common_test1.conf配置

active_master_role      writer

 

<host default>

    cluster_interface       eth0

    pid_path                /var/run/mysql-mmm/mmm_agentd.pid

    bin_path                /usr/libexec/mysql-mmm/

    replication_user        replication

    replication_password    replication

    agent_user              agent

    agent_password          agent

</host>

 

<host db1>

    ip      192.168.2.208

    mode    master

    peer    db2

</host>

 

<host db2>

    ip      192.168.2.133

    mode    master

    peer    db1

</host>

 

#<host db3>

#    ip      192.168.100.51

#    mode    slave

#</host>

 

<role writer>

    hosts   db1, db2

    ips     192.168.2.253

    mode    exclusive

</role>

 

<role reader>

    hosts   db1, db2

    ips     192.168.2.250, 192.168.2.251

    mode    balanced

</role>

 

5.1.3  mmm_mon_test1.conf配置

 

    include mmm_common_test1.conf

 

<monitor>

    ip                  127.0.0.1

    port                9981   (可配置其他端口)

    pid_path            /var/run/mysql-mmm/mmm_mond_test1.pid

    bin_path            /usr/libexec/mysql-mmm

    status_path         /var/lib/mysql-mmm/mmm_mond_test1.status

    ping_ips            192.168.2.208, 192.168.2.133

  #  auto_set_online     60

  

    # The kill_host_bin does not exist by default, though the monitor will

    # throw a warning about it missing.  See the section 5.10 "Kill Host

    # Functionality" in the PDF documentation.

    #

    # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host

    #

</monitor>

 

<host default>

    monitor_user        monitor

    monitor_password    monitor

</host>

 

debug 0

5.1.4 mysql-mmm-monitor_test1执行文件

 

复制一份可执行文件

 cp /etc/init.d/mysql-mmm-monitor /etc/init.d/mysql-mmm-monitor_test1

 

修改 /etc/init.d/mysql-mmm-monitor_test1如下:

 

CLUSTER='test1'

LOCKFILE='/var/lock/subsys/mysql-mmm-monitor_test1'

prog='MMM Monitor Daemon'

 

if [ "$CLUSTER" != "" ]; then

        MMMD_MON_BIN="/usr/sbin/mmm_mond @$CLUSTER"

        MMMD_MON_PIDFILE="/var/run/mysql-mmm/mmm_mond-$CLUSTER.pid"

else

        MMMD_MON_BIN="/usr/sbin/mmm_mond"

        MMMD_MON_PIDFILE="/var/run/mysql-mmm/mmm_mond.pid"

fi

 

==================================================================================

设置服务器重启后,mmm agent自启动

chkconfig mysql-mmm-monitor_test1  on

 

启动

[root@localhost bin]# /etc/init.d/mysql-mmm-agent start

Starting MMM Agent Daemon:

 

查看状态mmm_control @test1 show

 db1(192.168.2.208) master/ONLINE. Roles: reader(192.168.2.250), writer(192.168.2.253)

 db2(192.168.2.133) master/ONLINE. Roles: reader(192.168.2.251)

 

[root@BOMPIS mysql-mmm]# mmm_control @test1 checks;

db2  ping         [last change: 2012/10/22 15:09:13]  OK

db2  mysql        [last change: 2012/10/22 15:09:13]  OK

db2  rep_threads  [last change: 2012/10/22 15:09:13]  OK

db2  rep_backlog  [last change: 2012/10/22 15:09:13]  OK: Backlog is null

db1  ping         [last change: 2012/10/22 15:09:13]  OK

db1  mysql        [last change: 2012/10/22 15:09:13]  OK

db1  rep_threads  [last change: 2012/10/22 15:09:13]  OK

db1  rep_backlog  [last change: 2012/10/22 15:09:13]  OK: Backlog is null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值