一、概念

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. Xmind-xss漏洞复现并上线Coblat-strike

    前言:本漏洞由WebRay烽火台实验室发现,Xmind2020存在xss漏洞,并且可以进行任意代码执行,目前官方还未进行补丁修复,所以请目前Xmind用户警惕Xmind文件. 本博客讲复现漏洞及上线到 ...

  2. Python正则表达式re库的初次使用入门

    正则表达式常用操作符: 操作符 说明 实例 . 表示任何单个字符,不包括换行符 [] 字符集,对单个字符给出取值范围 [abc]表示a.b.c,[a-z]表示a到z单个字符 [^ ] 非字符集 [^a ...

  3. [.NET大牛之路 007] 详解 .NET 程序集

    .NET大牛之路 • 王亮@精致码农 • 2021.07.13 上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前 ...

  4. 【笔记】Jupyter notebook 高级 魔法命令

    魔法命令 %run 可以调用自己编写的代码 代码内容 使用结果 测试时间有%timeit,%time %timeit 测试时间(生成表达式的逻辑) 测试次数是可以不定义的,有系统自己决定 算法复杂度可 ...

  5. CTF--[BJDCTF2020]Cookie is so stable 1(SSTI)

    从hint.php可以找到提示,要求观察cookies 打开flag.php可以看到需要输入用户名,多次试验后发现输入的用户名会以cookies的方式储存 使用dirsearch扫描没有发现什么有用的 ...

  6. 题解 Omeed

    传送门 差了一点没想到正解-- 首先单次询问的 \(O(n)\) 写法很好想,考虑如何优化 首先基础分区间求和即可 然后那个连击分的话,是一个关于 \(f_i\) 和 \(f_{i-1}\) 的柿子 ...

  7. Groovy+Spock单元测试

    一.导入依赖 Spock是基于JUnit的单测框架,提供一些更好的语法,结合Groovy语言,可以写出更为简洁的单测. <!-- groovy依赖 --> <dependency&g ...

  8. SpringDataJpa使用原生sql(EntityManager)动态拼接,分页查询

    SpringDataJpa Spring Data JPA是较大的Spring Data系列的一部分,可轻松实现基于JPA的存储库.该模块处理对基于JPA的数据访问层的增强支持.它使构建使用数据访问技 ...

  9. 8、二进制安装K8s之部署CIN网络

    二进制安装K8s之部署CIN网络 部署CIN网络可以使用flannel或者calico,这里介绍使用calico ecd 方式部署. 1.下载calico二进制安装包 创建所需目录 mkdir -p ...

  10. 用宏实现HEX到ASCII ,ASCII 到HEX

    #define HEX2ASCII(value, data)  do{  \            value = (value > 0x09)?(value+0x7):value; \     ...