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
相关推荐
代码小鑫3 分钟前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
石牌桥网管5 分钟前
DNS Resolver解析服务器出口IP查询
运维·网络·tcp/ip·dns
湖南罗泽南11 分钟前
Windows C++ TCP/IP 两台电脑上互相传输字符串数据
c++·windows·tcp/ip
五味香12 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
天天要nx21 分钟前
D64【python 接口自动化学习】- python基础之数据库
数据库·python
精进攻城狮@1 小时前
Redis(value的数据类型)
数据库·redis
爪哇学长1 小时前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
网络安全-杰克1 小时前
助力网络安全发展,安全态势攻防赛事可视化
网络·安全·web安全
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
mybatisPlus打印sql配置
数据库·sql
弗拉唐2 小时前
将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
数据库·excel