一、概念

MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器)
是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。

MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。

MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。

关于 MMM 高可用架构的说明如下:

  • ●mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监控主机上运行。
  • ●mmm_agent:运行在每个MySQL服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。
  • ●mmm_control:一个简单的脚本,提供管理 mmm_mon 进程的命令。
  • ●mysql-mmm 的监管端会提供多个虚拟 IP(VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。

在整个监管过程中,需要在 MySQL 中添加相关授权用户,以便让 MySQL 可以支持监控主机的维护。 授权的用户包括一个 mmm_monitor 用户和一个 mmm_agent 用户。

二、搭建 MySQL-MMM

1、环境准备

 1 master01(db1)            192.168.91.5               mysql5.7、mysql-mmm
2 master02(db2) 192.168.91.10 mysql5.7、mysql-mmm
3 slave01(db3) 192.168.91.15 mysql5.7、mysql-mmm
4 slave02(db4) 192.168.91.20 mysql5.7、mysql-mmm
5 monitor 192.168.91.25 mysql-mmm
6
7
8
9 systemctl stop firewalld
10 setenforce 0

2、搭建 MySQL 多主多从模式

(1)修改 master01 配置文件

 1 vim /etc/my.cnf
2 ......
3 [mysqld]
4 user = mysql
5 basedir = /usr/local/mysql
6 datadir = /usr/local/mysql/data
7 port = 3306
8 character_set_server=utf8
9 pid-file = /usr/local/mysql/mysqld.pid
10 socket = /usr/local/mysql/mysql.sock
11 server-id = 1 #每台 Mysql 主机的 server-id 不能相同
12 log-error=/usr/local/mysql/data/mysql_error.log #错误日志
13 general_log=ON #通用查询日志
14 general_log_file=/usr/local/mysql/data/mysql_general.log
15 slow_query_log=ON #慢查询日志
16 slow_query_log_file=mysql_slow_query.log
17 long_query_time=5
18 binlog-ignore-db=mysql,information_schema #不需要同步的库名
19 log_bin=mysql_bin #开启二进制日志用于主从数据复制
20 log_slave_updates=true #允许slave从master复制数据时可以写入到自己的二进制日志
21 sync_binlog=1 #"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去
22 innodb_flush_log_at_trx_commit=1 #"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
23 auto_increment_increment=2 #自增字段一次递增多少
24 auto_increment_offset=1 #自增字段的起始值

(2)把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改

scp /etc/my.cnf root@192.168.91.10:/etc/
scp /etc/my.cnf root@192.168.91.15:/etc/
scp /etc/my.cnf root@192.168.91.20:/etc/

systemctl restart mysqld

(3)配置主主复制,两台主服务器相互复制

 1 #在两台主服务器上都执行授予从的权限,从服务器上不需要执行
2 grant replication slave on *.* to 'sdy'@'192.168.91.%' identified by '411526';
3
4 #在两台主服务器上查看,记录日志文件名称和同步点
5 show master status;
6 +-------------------+----------+--------------+------------------+
7 | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
8 +-------------------+----------+--------------+------------------+
9 | master-bin.000001 | 452 | | |
10 +-------------------+----------+--------------+------------------+
11
12 #在 master01 上配置同步
13 change master to master_host='192.168.91.10',master_user='sdy',master_password='411526',master_log_file='mysql_bin.000001',master_log_pos=452;
14
15 start slave;
16
17 show slave status\G
18 Slave_IO_Running: Yes
19 Slave_SQL_Running: Yes
20
21 #在 master02 上配置同步
22 change master to master_host='192.168.91.5',master_user='sdy',master_password='411526',master_log_file='mysql_bin.000001',master_log_pos=452;
23
24 start slave;
25
26 show slave status\G
27 Slave_IO_Running: Yes
28 Slave_SQL_Running: Yes

(4)配置主从复制,在两台从服务器上做

change master to master_host='192.168.91.5',master_user='replication',master_password='411526',master_log_file='mysql_bin.000001',master_log_pos=452;

start slave;

show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

(5)测试主主、主从 同步情况

create database db_test;

3、安装配置 MySQL-MMM

(1)在所有服务器上安装 MySQL-MMM

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum -y install mysql-mmm*

(2)在 master01 上对 MySQL-MMM 进行配置

 1 cd /etc/mysql-mmm/
2 vim mmm_common.conf
3 ……
4 <host default>
5 cluster_interface ens33
6 ……
7 replication_user sdy
8 replication_password 411526
9 agent_user mmm_agent
10 agent_password 411526
11
12 <host db1>
13 ip 192.168.91.5
14 mode master
15 peer db2
16 </host>
17
18 <host db2>
19 ip 192.168.91.10
20 mode master
21 peer db1
22 </host>
23
24 <host db3>
25 ip 192.168.91.15
26 mode slave
27 </host>
28
29 <host db4>
30 ip 192.168.91.20
31 mode slave
32 </host>
33
34 <role writer>
35 hosts db1, db2
36 ips 192.168.91.100
37 mode exclusive #只有一个 host 可以进行写操作模式
38 </role>
39
40 <role reader>
41 hosts db3, db4
42 ips 192.168.91.122, 192.168.91.123
43 mode balanced #多个 slave 主机可以进行读操作模式
44 </role>

(3)把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的

scp mmm_common.conf root@192.168.91.10:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.91.15:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.91.20:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.91.25:/etc/mysql-mmm/

(4)修改所有数据库服务器的代理配置文件 mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1 #根据不同的主机分别修改为 db1,db2,db3,db4

(5)在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf

 1 vim /etc/mysql-mmm/mmm_mon.conf
2 include mmm_common.conf
3 <monitor>
4 .....
5 ping_ips 192.168.91.5,192.168.91.10,192.168.91.15,192.168.91.20 #指定所有数据库服务器的 IP
6 auto_set_online 10 #指定自动上线时间
7 </monitor>
8
9 <host default>
10 monitor_user mmm_monitor #指定 mmm_monitor 的用户名
11 monitor_password 411526 #指定 mmm_monitor 的密码
12 </host>

(6)在所有数据库上为 mmm_agent(代理进程)授权

grant super, replication client, process on *.* to 'mmm_agent'@'192.168.91.%' identified by '411526';

(7)在所有数据库上为 mmm_moniter(监控进程)授权

grant replication client on *.* to 'mmm_monitor'@'192.168.91.%' identified by '411526';

flush privileges;

(8)在所有数据库服务器上启动 mysql-mmm-agent

systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service

(9)在 monitor 服务器上启动 mysql-mmm-monitor

systemctl start mysql-mmm-monitor.service

(10)在 monitor 服务器上测试群集

#查看各节点的情况
mmm_control show
db1(192.168.91.5) master/ONLINE. Roles: writer(192.168.91.100)
db2(192.168.91.10) master/ONLINE. Roles:
db3(192.168.91.15) slave/ONLINE. Roles: reader(192.168.91.122)
db4(192.168.91.20) slave/ONLINE. Roles: reader(192.168.91.123) #检测监控功能是否都完善,需要各种OK
mmm_control checks all #指定绑定 VIP 的主机
mmm_control move_role writer db2

4、故障测试

 1 mmm_control move_role writer db1
2
3 #停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占
4
5 mmm_control show
6 db1(192.168.91.5) master/HARD_OFFLINE. Roles:
7 db2(192.168.91.10) master/ONLINE. Roles: writer(192.168.91.100)
8
9 #停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
10 mmm_control show

停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占

5、客户端测试

 1 #在 master01 服务器上为 monitor 服务器地址授权登录
2 grant all on *.* to 'sdy'@'192.168.91.25' identified by '411526';
3 flush privileges;
4
5 #在 monitor 服务器上使用 VIP 登录
6 yum install -y mariadb-server mariadb
7 systemctl start mariadb.service
8
9 mysql -utestdba -p -h 192.168.91.100
10
11 #创建数据,测试同步情况
12 create database testdba;

  

  

  

  

  

  

  

  

  

  

  

部署MySQL主主复制管理器的更多相关文章

  1. MySQL高可用复制管理工具 —— Orchestrator介绍

    背景 在MySQL高可用架构中,目前使用比较多的是Percona的PXC,Galera以及MySQL 5.7之后的MGR等,其他的还有的MHA,今天介绍另一个比较好用的MySQL高可用复制管理工具:O ...

  2. MySQL高可用复制管理工具 —— Orchestrator使用

    背景 在上一篇「MySQL高可用复制管理工具 —— Orchestrator介绍」中大致介绍了Orchestrator的功能.配置和部署,当然最详细的说明可以查阅官方文档.本文开始对Orchestra ...

  3. mysql的主主复制详解

    Mysql双主部署 解释: 所谓双主备份,其实也就是互做主从复制,每台master既是master,又是另一台服务器的slave.这样,任何一方所做的变更,都会通过复制应用到另外一方的数据库中. 要求 ...

  4. centos6.6部署mysql mmm高可用架构

    一.环境简述 1.工作逻辑图 2.MySQL-MMM优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性. 缺点:Monitor节点是 ...

  5. MySQL复制环境(主从/主主)部署总结性梳理

    Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...

  6. keeplived + mysql双主复制部署 --原创

    环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux ...

  7. Linux下Redis主从复制以及SSDB主主复制环境部署记录

    前面的文章已经介绍了redis作为缓存数据库的说明,本文主要说下redis主从复制及集群管理配置的操作记录: Redis主从复制(目前redis仅支持主从复制模式,可以支持在线备份.读写分离等功能.) ...

  8. redis主从复制以及SSDB主主复制环境部署记录(四)

    redis配置主从和ssdb主主复制 参考:散尽浮华Linux下Redis主从复制以及SSDB主主复制环境部署记录 只做自己查阅. 环境要求:三台虚拟机一台做主,两台做从. 通过SSDB在redis做 ...

  9. MySQL集群(二)之主主复制

    前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节 ...

随机推荐

  1. 大学同学做Java开发比我多5K,八年老Android只会crud该转Java吗?

    最近在网上看到这样一个帖子: 做了八年Android开发,感觉这块做着也挺没意思,日常工作就是做一些架构优化,质量数据监控,改一改构建脚本,最主要的是业务负责人没有一个是做客户端的,都是后端的人. 最 ...

  2. 别再用CSV了,更高效的Python文件存储方案

    CSV无可厚非的是一种良好的通用文件存储方式,几乎任何一款工具或者编程语言都能对其进行读写,但是当文件特别大的时候,CSV这种存储方式就会变得十分缓慢且低效.本文将介绍几种在Python中能够代替CS ...

  3. JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite)(转载)

    1.JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite) 摘要 本文主要介绍快速输入输出, 文中提到了几个IO类,这里推荐使用Buffered ...

  4. BaiduSpider:爬取百度的利器

    视频链接:https://www.zhihu.com/zvideo/1272864710321516544 BaiduSpider是一个能够爬取百度搜索结果的Python爬虫,轻量但强大.目前支持百度 ...

  5. 更好地使用Atom支持基于Jupyter的Python开发

    有关于使用Atom进行Python开发的网上资料比较少,最近发现使用Atom结合Hydrogen插件进行Python开发,尤其是数据挖掘相关的工作,整体体验要好于Vscode,Vscode虽然说也有连 ...

  6. IDM-下载工具

    下载所需要的工具 1.IDM下载地址 链接:https://pan.baidu.com/s/1bHXA0pUYBOAC5f_2Iqvl_g 提取码:lsha 2.IDM破解包下载地址 链接:https ...

  7. 直流电机、减速器、编码器与TB6612FNG知识整理

    之前把MPU6050的相关知识了解了一下,可以做到测量欧拉角,在平衡小车的开发中需要测量小车的倾角来调整小车姿态.接下来该学习小车的电机驱动部分了,这里整理一下直流电机.减速器.编码器以及TB6612 ...

  8. Do you want to continue? [Y/n] Abort.

    当出现这个后命令终止,无法选择 y这时候 ,在输入命令时候提前加入 -y udo apt install sysv-rc-conf -y

  9. ffmpeg第6篇:滤镜语法

    前言 哈哈,回来继续填坑了,前段时间较忙没时间写,现在继续~ 简介 滤镜是ffmpeg的一个很强大的功能,它支持许多有用的视频处理功能,常见的滤镜如:缩放.旋转.水印.裁剪等 一个比较经典的滤镜使用方 ...

  10. .static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。

    static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量. 1)内存中的位置:静态存储区 2)初始化:局部的静态变量只能被初始化一次, ...