【博文推荐】Microsoft Azure部署MYSQL-MMM过程详解

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

博文地址:http://lixun.blog.51cto.com/4198640/1629177

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。

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

  1. 角色 ip地址 主机名字 server-id  
  2.  
  3. monitoring      10.0.0.6            monitor        -  
  4.  
  5. master1         10.0.0.4            db1                1  
  6.  
  7. master2         10.0.0.5            db2                 2  
  8.  
  9. slave1          10.0.0.7            db3                 3 

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

  1. ip地址                 角色                描述  
  2.  
  3. 10.0.0.80           write                应用程序连接该ip对主库进行写请求  
  4.  
  5. 10.0.0.90           read                  应用程序连接该ip进行读请求  
  6.  
  7. 10.0.0.100          read                   应用程序连接该ip进行读请求 

部署架构如下图:

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


MySQL-MMM优缺点

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

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

#p#

具体的部署步骤如下:

(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服务

  1. # yum install mysql-server 

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

安装完成后重启MYSQL服务

  1. # service mysqld restart 

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

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

  1. # mysql -uroot 
  2.  
  3. use mysql 
  4.  
  5. update user set password=password('p@ssw0rd'where user='root'
  6.  
  7. flush privileges

 

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

select user,host,password from mysql.user

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

#p#

(2)配置Master-Master复制

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

  1. #vi /etc/my.cnf 
  2.  
  3. [mysqld] 
  4.  
  5. datadir=/var/lib/mysql 
  6.  
  7. socket=/var/lib/mysql/mysql.sock 
  8.  
  9. user=mysql 
  10.  
  11. #下面为新添加的内容 
  12.  
  13. default-storage-engine = innodb 
  14.  
  15. replicate-ignore-db = mysql 
  16.  
  17. binlog-ignore-db = mysql 
  18.  
  19. server-id = 1 #每台服务器不能相同 
  20.  
  21. log-bin = /var/log/mysql/mysql-bin.log 
  22.  
  23. log_bin_index = /var/log/mysql/mysql-bin.log.index 
  24.  
  25. relay_log = /var/log/mysql/mysql-bin.relay 
  26.  
  27. relay_log_index = /var/log/mysql/mysql-bin.relay.index 
  28.  
  29. expire_logs_days = 10 
  30.  
  31. max_binlog_size = 100M 
  32.  
  33. 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

#p#

(3)安装配置MYSQL-MMM

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

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

 Microsoft Azure部署MYSQL-MMM

在Monitor节点安装mysql-mmm-monitor

  1. # yum -y install mysql-mmm-monitor* 
  2.  
  3. # yum -y install perl-Time-HiRes* 

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

  1. # sudo vim /etc/mysql-mmm/mmm_common.conf 
  2.  
  3. active_master_role writer 
  4.  
  5. cluster_interface eth0 
  6.  
  7. pid_path /var/run/mysql-mmm/mmm_agentd.pid 
  8.  
  9. bin_path /usr/libexec/mysql-mmm/ 
  10.  
  11. replication_user replication 
  12.  
  13. replication_password replication 
  14.  
  15. agent_user mmm_agent 
  16.  
  17. agent_password agent 
  18.  
  19. ip 10.0.0.4 
  20.  
  21. mode master 
  22.  
  23. peer db2 
  24.  
  25. ip 10.0.0.5 
  26.  
  27. mode master 
  28.  
  29. peer db1 
  30.  
  31. ip 10.0.0.7 
  32.  
  33. mode slave 
  34.  
  35. hosts db1, db2 
  36.  
  37. ips 10.0.0.100 
  38.  
  39. mode exclusive 
  40.  
  41. hosts db2, db3 
  42.  
  43. ips 10.0.0.80, 10.0.0.90 
  44.  
  45. mode balanced 

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

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

  1. # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.5:/etc/mysql-mmm/ 
  2.  
  3. # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.7:/etc/mysql-mmm/ 
  4.  
  5. # 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。

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

 Microsoft Azure部署MYSQL-MMM

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

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

 

Microsoft Azure部署MYSQL-MMM

在db1、db2、db3启动agent服务

  1. # service mysql-mmm-agent start 

 

 

Microsoft Azure部署MYSQL-MMM

在monitor启动monitor服务


 

责任编辑:Ophira 来源: 51CTO
相关推荐

2014-12-12 10:46:55

Azure地缘组affinitygro

2015-03-16 13:44:34

Multi-Site site-2-site微软Azure

2015-04-17 11:15:01

Windows Azu虚拟机SCVMM

2014-12-22 11:04:30

Windows AzuiPhone虚拟机

2015-07-29 13:46:27

OpenStackIcehouse私有云实战部署

2015-12-10 10:13:22

2015-05-15 10:04:28

localhost

2015-05-27 09:17:50

AzureDocker

2015-04-21 09:58:09

Azure混合云实例级公共IP

2015-06-04 11:17:12

2015-06-17 09:34:09

软件定义存储 云存储

2015-07-01 10:25:07

Docker开源项目容器

2015-03-30 13:24:31

主从MariaDB实例部署

2015-05-25 09:51:55

Azure混合云平台VPN技术

2014-10-23 09:47:28

安全运维Iperf

2015-03-18 13:18:45

MySQLSQL优化

2015-06-15 13:06:23

项目项目经验

2015-09-29 10:26:51

pythonlogging模块

2015-06-02 16:16:17

mysql优化mysql读写分离mysql主从复制

2014-12-01 10:33:51

Python
点赞
收藏

51CTO技术栈公众号