MySQL(11)数据库实现高可用架构之MMM
文章目录
- 一、MySQL MMM介绍
- 1.1 什么是 MMM?
- 1.2 MMM的组成
- 2.1 MySQL M搭建的步骤(理论)
- 2.1.1 搭建步骤
- 2.1.2故障测试
- 2.2 MySQL M搭建具体操作步骤(实操)
- 2.2.1 搭建步骤
- 1.Master01、Master02、Slave1、Slave2 节点上安装 mysql5.7
- 2.Master01、Master02、Slave1、Slave2 节点上关闭防火墙
- 3.搭建 MySQL 多主多从模式
- 4.配置主主复制,两台主服务器相互复制,在两台主服务器上查看,记录日志文件名称和同步点
- 5.在 master01 上配置同步
- 6.在 master02 上配置同步
- 7.配置主从复制,在两台从服务器上做
- 8.测试主主、主从 同步情况
- 9.在所有服务器上安装 MySQL-MMM
- 10.在 master01 上对 MySQL-MMM 进行配置
- 11.修改所有数据库服务器的代理配置文件 mmm_agent.conf,
- 12.在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
- 13.在所有数据库上为 mmm_agent(代理进程)授权
- 14.在所有数据库服务器上启动 mysql-mmm-agent
- 15.在 monitor 服务器上启动 mysql-mmm-monitor
- 16.在 monitor 服务器上测试群集
- 2.3故障测试
- 1.停止 master01 确认 VIP 是否移动到 master02 上,注意:master01 主服务器恢复服务后,不会抢占
- 2.停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
- 3.在 master01 服务器上为 monitor 服务器地址授权登录
- 4.在 monitor 服务器上使用 VIP 登录
- 5.创建数据,测试同步情况
一、MySQL MMM介绍
MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器)
是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。
MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。
1.1 什么是 MMM?
MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。
1.2 MMM的组成
关于 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 搭建
环境准备
----------------------搭建 MySQL MMM--------------------------------
master01(db1) 192.168.80.20 mysql5.7、mysql-mmm
master02(db2) 192.168.80.30 mysql5.7、mysql-mmm
slave01(db3) 192.168.80.13 mysql5.7、mysql-mmm
slave02(db4) 192.168.80.14 mysql5.7、mysql-mmm
monitor 192.168.80.15 mysql-mmm
2.1 MySQL M搭建的步骤(理论)
2.1.1 搭建步骤
systemctl stop firewalld
setenforce 0
---------------------- 搭建 MySQL 多主多从模式 ----------------------
//修改 master01 配置文件
vim /etc/my.cnf
…
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1 #每台 Mysql 主机的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log #错误日志
general_log=ON #通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON #慢查询日志
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema #不需要同步的库名
log_bin=mysql_bin #开启二进制日志用于主从数据复制
log_slave_updates=true #允许slave从master复制数据时可以写入到自己的二进制日志
sync_binlog=1 #“双1设置”,MySQL 在每写一次二进制日志时都会同步到磁盘中去
innodb_flush_log_at_trx_commit=1 #“双1设置”,每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
auto_increment_increment=2 #自增字段一次递增多少
auto_increment_offset=1 #自增字段的起始值
//把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改
scp /etc/my.cnf root@192.168.80.30:/etc/
scp /etc/my.cnf root@192.168.80.13:/etc/
scp /etc/my.cnf root@192.168.80.14:/etc/
systemctl restart mysqld
//配置主主复制,两台主服务器相互复制
#在两台主服务器上都执行授予从的权限,从服务器上不需要执行
grant replication slave on . to ‘replication’@‘192.168.80.%’ identified by ‘123456’;
#在两台主服务器上查看,记录日志文件名称和同步点
show master status;
±------------------±---------±-------------±-----------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
±------------------±---------±-------------±-----------------+
| master-bin.000002 | 154 | | |
±------------------±---------±-------------±-----------------+
#在 master01 上配置同步
change master to master_host=‘192.168.80.30’,master_user=‘replication’,master_password=‘123456’,master_log_file=‘mysql_bin.000002’,master_log_pos=154;
start slave;
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#在 master02 上配置同步
change master to master_host=‘192.168.80.20’,master_user=‘replication’,master_password=‘123456’,master_log_file=‘mysql_bin.000002’,master_log_pos=154;
start slave;
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
//配置主从复制,在两台从服务器上做
change master to master_host=‘192.168.80.20’,master_user=‘replication’,master_password=‘123456’,master_log_file=‘mysql_bin.000002’,master_log_pos=154;
start slave;
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
//测试主主、主从 同步情况
create database db_test;
---------------------- 安装配置 MySQL-MMM ----------------------
//在所有服务器上安装 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*
//在 master01 上对 MySQL-MMM 进行配置
cd /etc/mysql-mmm/
vim mmm_common.conf
……
cluster_interface ens33
……
replication_user replication
replication_password 123456
agent_user mmm_agent
agent_password 123456
ip 192.168.80.20 mode master peer db2 ip 192.168.80.30 mode master peer db1 ip 192.168.80.13 mode slave ip 192.168.80.14 mode slave hosts db1, db2 ips 192.168.80.188 mode exclusive #只有一个 host 可以进行写操作模式 hosts db3, db4 ips 192.168.80.198, 192.168.80.199 mode balanced #多个 slave 主机可以进行读操作模式
//把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
scp mmm_common.conf root@192.168.80.30:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.13:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.14:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.15:/etc/mysql-mmm/
//修改所有数据库服务器的代理配置文件 mmm_agent.conf
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1 #根据不同的主机分别修改为 db1,db2,db3,db4
//在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
…
ping_ips 192.168.80.20,192.168.80.30,192.168.80.13,192.168.80.14 #指定所有数据库服务器的 IP
auto_set_online 10 #指定自动上线时间
monitor_user mmm_monitor #指定 mmm_monitor 的用户名 monitor_password 123456 #指定 mmm_monitor 的密码
//在所有数据库上为 mmm_agent(代理进程)授权
grant super, replication client, process on . to ‘mmm_agent’@‘192.168.80.%’ identified by ‘123456’;
//在所有数据库上为 mmm_moniter(监控进程)授权
grant replication client on . to ‘mmm_monitor’@‘192.168.80.%’ identified by ‘123456’;
flush privileges;
//在所有数据库服务器上启动 mysql-mmm-agent
systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service
//在 monitor 服务器上启动 mysql-mmm-monitor
systemctl start mysql-mmm-monitor.service
//在 monitor 服务器上测试群集
#查看各节点的情况
mmm_control show
db1(192.168.80.20) master/ONLINE. Roles: writer(192.168.80.188)
db2(192.168.80.30) master/ONLINE. Roles:
db3(192.168.80.13) slave/ONLINE. Roles: reader(192.168.80.198)
db4(192.168.80.14) slave/ONLINE. Roles: reader(192.168.80.199)
#检测监控功能是否都完善,需要各种OK
mmm_control checks all
#指定绑定 VIP 的主机
mmm_control move_role writer db2
2.1.2故障测试
mmm_control move_role writer db1
#停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占
mmm_control show
db1(192.168.80.20) master/HARD_OFFLINE. Roles:
db2(192.168.80.30) master/ONLINE. Roles: writer(192.168.80.188)
#停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
mmm_control show
//客户端测试
#在 master01 服务器上为 monitor 服务器地址授权登录
grant all on . to ‘testdba’@‘192.168.80.15’ identified by ‘123456’;
flush privileges;
#在 monitor 服务器上使用 VIP 登录
yum install -y mariadb-server mariadb
systemctl start mariadb.service
mysql -utestdba -p -h 192.168.235.188
#创建数据,测试同步情况
create database testdba;
2.2 MySQL M搭建具体操作步骤(实操)
2.2.1 搭建步骤
1.Master01、Master02、Slave1、Slave2 节点上安装 mysql5.7
2.Master01、Master02、Slave1、Slave2 节点上关闭防火墙
3.搭建 MySQL 多主多从模式
把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改,重启服务
4.配置主主复制,两台主服务器相互复制,在两台主服务器上查看,记录日志文件名称和同步点
5.在 master01 上配置同步
6.在 master02 上配置同步
7.配置主从复制,在两台从服务器上做
8.测试主主、主从 同步情况
9.在所有服务器上安装 MySQL-MMM
10.在 master01 上对 MySQL-MMM 进行配置
把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
11.修改所有数据库服务器的代理配置文件 mmm_agent.conf,
12.在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
13.在所有数据库上为 mmm_agent(代理进程)授权
在所有数据库上为 mmm_moniter(监控进程)授权
14.在所有数据库服务器上启动 mysql-mmm-agent
15.在 monitor 服务器上启动 mysql-mmm-monitor
16.在 monitor 服务器上测试群集
查看各节点的情况
检测监控功能是否都完善,需要各种Ok
指定绑定 VIP 的主机
2.3故障测试
1.停止 master01 确认 VIP 是否移动到 master02 上,注意:master01 主服务器恢复服务后,不会抢占
2.停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
3.在 master01 服务器上为 monitor 服务器地址授权登录
4.在 monitor 服务器上使用 VIP 登录
5.创建数据,测试同步情况
MySQL(11)数据库实现高可用架构之MMM相关推荐
- MySQL(10)数据库实现高可用架构之MHA
文章目录 一.MySQL MHA介绍 1.1 什么是 MHA? 1.2 MHA 的组成 1) MHA Node(数据节点) 2) MHA Manager(管理节点) 1.3 MHA 的特点 二.MyS ...
- 《MySQL性能优化和高可用架构实践》阅读总结
文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...
- 《MySQL性能优化和高可用架构实践》简介与推荐序
#好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...
- MySQL数据库的优化(下)MySQL数据库的高可用架构方案
[51CTO独家特稿]如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了,目前可行的方案有: 一.MySQL Cluster ...
- mysql性能优化和高可用架构实践pdf_实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF...
本篇的内容将会覆盖MySQL 5. 7数据库体系结构.InnoDB存储引擎.MySQL事务和锁.性能优化.服务器全面优化.性能监控.主从复制,以及PXC集群.MHA自动故障转移群集.MGR组复制.Ke ...
- mysql keepalived主从_mysql高可用架构之(一)基于自身主从复制&keepalived实现
系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster centos7.4 mysql5.7 192.168.1.42 mysqlSlave centos7.4 mysq ...
- lvs加MySQL读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ...
- 数据库MHA高可用架构实验配置及故障切换
文章目录 为什么要有MHA 什么是MHA MHA的组成 MHA的实验目的 实验拓扑图 实验步骤 搭建线网源与底层环境 Mysql 5.7安装过程 主从复制 安装 MHA 软件 验证配置 修复主机后如何 ...
- mysql-mmm高可用架构
一.说明 1.本文将介绍如何使用mysql-mmm搭建数据库的高可用架构,MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于 ...
最新文章
- ASP Win7旗舰版中的IIS配置asp.net的运行环境
- 关于REID的mAP指标
- 从S3获取数据在html表示,AWS Lambda从DynamoDB加载内容,以S3格式显示在HTML中(示例代码)...
- ReviewForJob(3)表、栈和队列
- 20155201 实验四《Java面向对象程序设计》实验报告
- centos 7 重设密码总是失败
- Linux NAT基本流程与实现技巧
- 王道考研数据结构笔记
- git可视化工具Sourcetree使用全攻略(包括各种git冲突解决)
- 800道Python习题,花了一个月终于整理出来了,挑战一下自己能做对多少题
- acfun json 弹幕 转换 bilibili xml 弹幕
- 软件测试用例.范文,软件测试用例模板范文.doc
- Contexts使用以及详细配置
- 大学计算机一级等级考试题,大学计算机一级考试试题.doc
- ESXi/ESX 链路聚合
- 什么是本地O2O 本地O2O有哪些细分领域?
- 20201225英语单词学习(仅供自己记录)
- 高考成绩等位分查询2021,2019高考等位分查询系统
- 2020年我国知识产权服务业市场现状分析,区域发展不平衡、地域性强「图」
- 韩剧TV APP案例分析
热门文章
- 华为手机鸿蒙2.0系统界面,华为鸿蒙2.0系统
- 有关数据库MySQL的演讲_有关Mysql数据库编程的文章推荐10篇
- 计算机类大一需要学什么原因,大一新生上大学要不要带电脑?我认为不论什么专业,电脑是必需品...
- Springboot 2.x上传文件大小限制
- 还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧
- 绝!关于pip的15个使用小技巧
- “你们对编程和头发一无所知。”
- python替换缺失值_详解Pandas 处理缺失值指令大全
- c语言send方法,高效编写代码的方法(九):了解objc_msgSend
- deepin安装node,npm