Microsoft Azure部署MYSQL-MMM过程详解

MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写 入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实 现数据备份、节点之间重新同步功能的脚本。

MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。

MMM项目来自 Google:http://code.google.com/p/mysql-master-master

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

MMM主要功能由下面三个脚本提供

  • l mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除等等

  • l mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点

  • l mmm_control 通过命令行管理mmm_mond进程

在两个节点的master-master环境下,MMM使用5个IP。每个单独的节点使用一个固定IP,这个固定IP永远不会变化。

2个reader IPs(read-only)和一个writer IP(updates),后面三个IP(2个reader IP和一个Writer IP)在两个节点之间迁移,如何迁移取决于节点的可用性。

正 常情况下(没有复制失败,没有复制延迟等)活动的master有两个虚拟ip(reader和writer),备用的master有一个虚拟 ip(reader),如果活动的master失败了,那么所有的reader和writer虚拟IP都会被分配给备用的master。

具体的配置信息如下所示:

角色               ip地址               主机名字               server-id   monitoring      10.0.0.6            monitor             -   master1         10.0.0.4            db1                 1   master2         10.0.0.5            db2                 2   slave1          10.0.0.7            db3                 3

业务中的服务ip信息如下所示:

ip地址                 角色                描述   10.0.0.80           write                 应用程序连接该ip对主库进行写请求   10.0.0.90           read                  应用程序连接该ip进行读请求   10.0.0.100          read                   应用程序连接该ip进行读请求

部署架构如下图:

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL


MySQL-MMM优缺点

优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。

缺点:Monitor节点是单点,可以结合Keepalived实现高可用。


具体的部署步骤如下:

(1)主机配置

在Azure中创建一个虚拟网络,然后在库中创建虚拟机,选择基于CENTOS Openlogic 6.5

PS:由于MMM的监控机制需要检查PING,请确保所有虚拟机在一个VNET下。

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

同时完成四台虚拟机的创建,分别是master1、master2、slave、monitor,如下图:

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

使用那个Xshell连接到VM

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

首先获取root权限并修改root密码,如下操作

Sudo su -

输入密码

Passwd root

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

在每一台服务器上用yum命令安装MYSQL服务

# yum install mysql-server

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

安装完成后重启MYSQL服务

# service mysqld restart

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

连接到mysql,修改mysql root密码,如下操作:

# mysql -uroot  use mysql  update user set password=password('p@ssw0rd') where user='root';  flush privileges;


Microsoft Azure部署MYSQL-MMM(1)安装MYSQL

select user,host,password from mysql.user

Microsoft Azure部署MYSQL-MMM(1)安装MYSQL


(2)配置Master-Master复制

在db1(master1)、db2(master2)、db3(slave)上编译my.conf

#vi /etc/my.cnf  [mysqld]  datadir=/var/lib/mysql  socket=/var/lib/mysql/mysql.sock  user=mysql  #下面为新添加的内容  default-storage-engine = innodb  replicate-ignore-db = mysql  binlog-ignore-db = mysql  server-id = 1 #每台服务器不能相同  log-bin = /var/log/mysql/mysql-bin.log  log_bin_index = /var/log/mysql/mysql-bin.log.index  relay_log = /var/log/mysql/mysql-bin.relay  relay_log_index = /var/log/mysql/mysql-bin.relay.index  expire_logs_days = 10  max_binlog_size = 100M  log_slave_updates = 1

Microsoft Azure部署MYSQL-MMM

注意:

1)server-id在每台服务器上的值都是不一样,在这里依次为1、2、3、4。

2) 因为在这里把log文件配置到了/var/log/mysql下,而mysql默认的目录是在/var/lib/mysql,所以首先要新建mysql文 件夹,Mkdir /var/log/mysql,然后用chown -R mysql.mysql /var/log/mysql mysql命令将mysql的所有者修改为用户mysql。其次要保证,mysql文件夹的权限755(即-rwxr-xr-x)。

如果没 有修改权限和所有者,重启服务时就会在错误日志中出现找不到mysql-bin.log或者mysql-bin.log.index的错误(/usr /libexec/mysqld: File '/var/log/mysql/mysql-bin.log.index' not found (Errcode: 13))。

完成编译后重启MYSQL服务

Microsoft Azure部署MYSQL-MMM

检查复制状态,如下图:

show master status;

Microsoft Azure部署MYSQL-MMM

检查日志是否生成道新目录,如下

# ls /var/log/mysql

Microsoft Azure部署MYSQL-MMM

使用mysql-mmm时一共需要三个用户: replication、mmm_agent和mmm_monitor(管理服务器上用来监控cluster状态的用户,所以可以限定只能从管理服务器登录)。使用下面三条命令新建这三个用户并分配相应的权限

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

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

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

接下来再db1和db2分别执行下面命令修改复制账户和密码。并启动SLAVE进程。

change master to master_host='10.0.0.4', master_port=3306, master_user='replication', master_password='replication';start slave;

change master to master_host='10.0.0.5', master_port=3306, master_user='replication', master_password='replication';start slave;

Microsoft Azure部署MYSQL-MMM

检查复制状态,如下图:

show slave status\G

Microsoft Azure部署MYSQL-MMM


(3)安装配置MYSQL-MMM

在db1、db2、db3安装MMM所需要的Perl模块(所有服务器)执行该脚本,然后 yum -y install mysql-mmm-agent来安装MMM :

# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  # yum -y install mysql-mmm-agent

Microsoft Azure部署MYSQL-MMM

在Monitor节点安装mysql-mmm-monitor

# yum -y install mysql-mmm-monitor*  # yum -y install perl-Time-HiRes*

编译DB1上的mmm_common.conf配置agent:

# sudo vim /etc/mysql-mmm/mmm_common.conf  active_master_role writer  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 mmm_agent  agent_password agent  ip 10.0.0.4  mode master  peer db2  ip 10.0.0.5  mode master  peer db1  ip 10.0.0.7  mode slave  hosts db1, db2  ips 10.0.0.100  mode exclusive  hosts db2, db3  ips 10.0.0.80, 10.0.0.90  mode balanced

其中 replication_user 用于检查复制的用户, agent_user 为agent的用户, mode 标明是否为主或者备选主,或者从库。 mode exclusive 主为独占模式,同一时刻只能有一个主, 中hosts表示目前的主库和备选主的真实主机ip或者主机名, ips 为对外提供的虚拟机ip地址, 中hosts代表从库真实的ip和主机名, ips 代表从库的虚拟ip地址。

完成编译后通过scp复制到db2、db3、monitor节点:

# scp /etc/mysql-mmm/mmm_common.conf 10.0.0.5:/etc/mysql-mmm/  # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.7:/etc/mysql-mmm/  # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.6:/etc/mysql-mmm/

Microsoft Azure部署MYSQL-MMM

分别在db1,db2,db3三台主机的/etc/mysql-mmm配置mmm_agent.conf文件,分别用不同的字符标识,注意这三台机器的this db1这块要想,比如本环境中,db1要配置this db1,db2要配置为this db2,而db3要配置为this db3。

# sudo vim /etc/mysql-mmm/mmm_agent.conf

Microsoft Azure部署MYSQL-MMM

在monitor节点编译monitor配置文件,添加ping_ips中的内容

# sudo vim /etc/mysql-mmm/mmm_mon.conf


Microsoft Azure部署MYSQL-MMM

在db1、db2、db3启动agent服务

# service mysql-mmm-agent start



Microsoft Azure部署MYSQL-MMM

在monitor启动monitor服务


你可能感兴趣的:(Microsoft)