MMM高可用性部署

MMM高可用性部署

MMM概述

MMM

MMM(Master-Master replication manager for MySQL,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。

MMM部署

实验环境

主机 IP 虚拟IP
Master主库服务器1 10.190.33.71 10.190.33.188
Master主库服务器2 10.190.33.72 待机预获mater01的VIP
Slave从库服务器01 10.190.33.73 10.190.33.189
Slave从库服务器02 10.190.33.74 10.190.33.190
Monitor服务器 10.190.33.75 *

实验拓扑图

数据库安装

MySQL安装教程

时间同步

所有服务器均需要进行配置(仅以Master服务器举例)

bash 复制代码
yum install -y chrony

vim /etc/chrony.conf 
	#注释原有ntp服务器,添加阿里ntp服务源
	server ntp.aliyun.com iburst
		
systemctl restart chronyd

chronyc sources -v

systemctl enable --now chronyd


搭建 MySQL 多主多从模式

修改MySQL配置文件

服务器均需要进行配置(仅以Master服务器1举例)

bash 复制代码
vim /etc/my.cnf
	······
##这里要改##
	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
	sync_binlog=1
	innodb_flush_log_at_trx_commit=1
	auto_increment_increment=2
	auto_increment_offset=1


systemctl restart mysqld

配置主主复制

Master服务器1、Master服务器2均需要进行配置

Master1
SQL 复制代码
grant replication slave on *.* to 'slave'@'10.190.33.%' identified by 'slave123';

show master status;
Master2
bash 复制代码
grant replication slave on *.* to 'slave'@'10.190.33.%' identified by 'slave123';

show master status;
配置复制
Sql 复制代码
####Master1服务器

change master to master_host='10.190.33.72',master_user='slave',master_password='slave123',master_log_file='mysql_bin.000001',master_log_pos=453;

start slave;

show slave status\G

####Master2服务器

change master to master_host='10.190.33.71',master_user='slave',master_password='slave123',master_log_file='mysql_bin.000001',master_log_pos=453;

start slave;

show slave status\G

配置主从复制

Slave服务器1、Slave服务器2均需要进行配置(仅以Slave服务器1举例)

Sql 复制代码
change master to master_host='10.190.33.71',master_user='slave',master_password='slave123',master_log_file='mysql_bin.000001',master_log_pos=453;

start slave;

show slave status\G

安装配置 MySQL-MMM

安装 MySQL-MMM

所有服务器均需要进行配置(仅以Monitor服务器举例)

bash 复制代码
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*

对 MySQL-MMM 进行配置

所有服务器均需要进行配置(仅以Monitor服务器举例)

bash 复制代码
cd /etc/mysql-mmm/

vim mmm_common.conf
		······
		##修改##
		<host default>
			cluster_interface       ens33
			......
			replication_user        slave
			replication_password    slave123
			agent_user              agent
			agent_password          agent123

		<host db1>
			ip      10.190.33.71
			mode    master
			peer    db2
		</host>

		<host db2>
			ip      10.190.33.72
			mode    master
			peer    db1
		</host>

		<host db3>
			ip      10.190.33.73
			mode    slave
		</host>

		##复制<host db3>开始的4行粘贴到这##

		<host db4>
			ip      10.190.33.74
			mode    slave
		</host>

		<role writer>
			hosts   db1, db2
			ips     10.190.33.188
			mode    exclusive
		</role>

		<role reader>
			hosts   db3, db4
			ips      10.190.33.189, 10.190.33.190
			mode    balanced
		</role>

修改代理配置文件

所有数据库服务器均需要进行配置(仅以Master服务器1举例)

bash 复制代码
vim /etc/mysql-mmm/mmm_agent.conf

	include mmm_common.conf
	······
	this db*
		#根据不同的主机分别修改为 db1,db2,db3,db4上文hosdb配置

修改监控配置文件

==monitor服务器需要进行配置=

bash 复制代码
vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf
<monitor>
.....
    ping_ips        	10.190.33.71,10.190.33.72,10.190.33.73,10.190.33.74
	auto_set_online		15
</monitor>

<host default>
    monitor_user        monitor
    monitor_password    monitor123
</host>

授权代理进程、监控进程

所有数据库服务器均需要进行配置(仅以Master服务器1举例)

bash 复制代码
grant super, replication client, process on *.* to 'agent'@'10.190.33.%' identified by 'agent123';


grant replication client on *.* to 'monitor'@'10.190.33.%' identified by 'monitor123';


flush privileges;

启动服务

bash 复制代码
##在所有服务器上启动 mysql-mmm-agent

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


##在 monitor 服务器上启动 mysql-mmm-monitor

systemctl enable mysql-mmm-monitor.service --now


测试

在 monitor 服务器

检测监控功能

bash 复制代码
mmm_control checks all

查看各节点的情况

bash 复制代码
mmm_control show

故障测试

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

## Master服务器1
systemctl stop mysqld


## monitor服务器查看
mmm_control show
相关推荐
YongCheng_Liang21 小时前
MySQL 高级特性深度解析:从索引优化到高可用架构
运维·数据库·mysql
<花开花落>21 小时前
MySQL 数据备份流程化
mysql·systemd
Coder_Boy_21 小时前
基于SpringAI的在线考试系统-考试模块前端页面交互设计及优化
java·数据库·人工智能·spring boot
dblens 数据库管理和开发工具1 天前
QueryNote V1.2 发布:从个人思考空间,迈向团队协作与内容交付
数据库·dblens
砚边数影1 天前
Java基础强化(三):多线程并发 —— AI 数据批量读取性能优化
java·数据库·人工智能·ai·性能优化·ai编程
RisunJan1 天前
Linux命令-jwhois(查询域名和IP地址注册信息)
linux·tcp/ip
coding者在努力1 天前
SQL使用NOT EXITS实现全称量词查询(数据库查询所有)详细讲解和技巧总结
网络·数据库·sql
内心如初1 天前
04_等保系列之云等保
网络安全·等保测评·等保测评从0-1·等保测评笔记
航Hang*1 天前
第3章:复习篇——第4节:创建、管理视图与索引---题库
网络·数据库·笔记·sql·学习·mysql·期末
李慕婉学姐1 天前
Springboot旅游景点管理系统2fj40iq6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端