MySQL集群高可用架构之MMM

目录

一、MMM概述

1.1 MMM 简介

1.2 MMM高可用架构

1.3 MMM工作原理

1.4 工作流程图

二、MMM高可用双主双从架构部署

1、架构:

2、搭建 MySQL 多主多从模式

3、安装配置 MySQL-MMM

4、故障测试


一、MMM概述


1.1 MMM 简介


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 复制的配置。

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 用户。

1.3 MMM工作原理


1)MMM 通过监控 MySQL master的状态来实现故障检测和自动故障转移。当一个master主节点发生故障时,MMM 会自动将VIP转到备master节点上,确保数据库的可用性。

2)MMM 还可以根据负载情况自动进行负载均衡。它可以根据每个节点的负载情况,将读操作分发到不同的节点上,从而提高系统的整体性能。

3)MMM 还提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作。

1.4 MMM故障切换流程
Monitor 检测到 Master1 连接失败

Monitor 发送 set_offline 指令到 Master1 的 Agent

Master1 Agent 如果存活,下线写 VIP,尝试把 Master1 设置为 read_only=1

Moniotr 发送 set_online 指令到 Master2

Master2 Agent 接收到指令,执行 select master_pos_wait() 等待同步完毕

Master2 Agent 上线写 VIP,把 Master2 节点设为 read_only=0

Monitor 发送更改同步对象的指令到各个 Slave 节点的 Agent

各个 Slave 节点向新 Master 同步数据
 

1.4 工作流程图

二、MMM高可用双主双从架构部署

1、架构:

master1 20.0.0.31

master2 20.0.0.32

slave1 20.0.0.33

slave2 20.0.0.34

mariadb 20.0.0.26

关闭防火墙和安全机制

systemctl stop firewalld

setenforce 0

2、搭建 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                                            

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                  

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

//配置主主复制,两台主服务器相互复制

#在两台主服务器上都执行授予从的权限,从服务器上不需要执行

grant replication slave on *.* to 'replication'@'20.0.0.%' identified by '123456';

#在两台主服务器上查看,记录日志文件名称和同步点

show master status;

在 master01 上配置同步

change master to master_host='20.0.0.32',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=613;

start slave;

show slave status\G

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

#在 master02 上配置同步

change master to master_host='20.0.0.32',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=758;

start slave;

show slave status\G

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

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

change master to master_host='20.0.0.31',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=758;

start slave;

show slave status\G

    Slave_IO_Running: Yes

Slave_SQL_Running: Yes

//测试主主、主从 同步情况

create database db_test;

3、安装配置 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*

//在 所有主机 上对 MySQL-MMM 进行配置

cd /etc/mysql-mmm/

vim mmm_common.conf

……

<host default>

    cluster_interface       ens33

    ……

    replication_user        replication

    replication_password    123456

    agent_user              mmm_agent

    agent_password          123456

<host db1>

    ip      20.0.0.31

    mode    master

    peer    db2

</host>

<host db2>

    ip      20.0.0.32

    mode    master

    peer    db1

</host>

<host db3>

    ip      20.0.0.33

    mode    slave

</host>

<host db4>

    ip      20.0.0.34

    mode    slave

</host>

<role writer>

    hosts   db1, db2

    ips     20.0.0.100

mode    exclusive           

</role>

<role reader>

    hosts   db3, db4

    ips     20.0.0.201, 20.0.0.200

mode    balanced            

</role>

其他几台配置文件一样

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

vim /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

this db1 #根据不同的主机分别修改为 db1,db2,db3,db4

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

先新开一个主机,安装mariadb

vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

<monitor>

.....

ping_ips         20.0.0.31,20.0.0.32,20.0.0.33,20.0.0.34

     auto_set_online 10

</monitor>

<host default>

    monitor_user        mmm_monitor

    monitor_password    123456          

</host>

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

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

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

grant replication client on *.* to 'mmm_monitor'@'20.0.0.%' 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

4、故障测试

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'@'20.0.0.26' 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;

看四个库是否同步:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络应用层协议之http/https

文章目录 目录 一、http协议 1.URL 2.http协议格式 3.http的方法 4.http的状态码 5.http常见header 6.实现一个http服务器 二、https协议 1.加密 2.为什么要加密 3.常见的加密方式 对称加密 非对称加密 4.https的工作过程探究 方案1 只使用对称加密 方案2 只使…

开发知识点-Git

团队协作-Git Giteegitee 创建仓库打开项目所在目录&#xff0c;右键选择Git Bush Here(你要确定电脑上已经安装了Git&#xff09;初始化本地仓库配置验证信息。 完美解决github访问速度慢介绍Git 与 SVN 区别IDEA 添加 gitee Gitee Git Gitee 大家都知道国内访问 Github 速度…

Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法&#xff0c;它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本&#xff0c;因此搜索引擎会匹配与查询最相似的矢量&#xff0c;而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…

DPDK系列之三十六报文转发

一、网络报文处理 学过网络通信的都知道&#xff0c;其实在网络的底层数据就是一包&#xff08;帧&#xff09;包的。换句话说&#xff0c;所有的网络设备转发的其实就是一包包的二进制流数据。对设备或者驱动来说&#xff0c;这些数据没有什么任何意义&#xff0c;它们只是负…

Web之HTML笔记

Web之HTML、CSS、JS Web标准一、HTML&#xff08;超文本标记语言&#xff09;HTML 基本结构标签常用标签1.font标签2.p标签3.注释4.h系列标题5.img6.超链接a7.列表8.表格9.表单 Web之CSS笔记 Web标准 结构标准用于对网页元素进行整理和分类(HTML)表现标准用于设置网页元素的版…

LoRa模块空中唤醒功能原理和物联网应用

LoRa模块是一种广泛应用于物联网领域的无线通信模块&#xff0c;支持低功耗、远距离和低成本的无线通信。 其空中唤醒功能是一项重要的应用&#xff0c;可以实现设备的自动唤醒&#xff0c;从而在没有人工干预的情况下实现设备的远程监控和控制。 LoRa模块空中唤醒功能的原理…

HTTPS加密为什么能保证网络安全?

随着互联网的普及和发展&#xff0c;网络安全问题日益严重。为了保护用户的隐私和数据安全&#xff0c;许多网站都采用了HTTPS加密技术。那么&#xff0c;HTTPS加密为什么可以保证网络安全呢&#xff1f; 原因是HTTP协议采用的是数据明文传输方式。用户从客户端浏览器提交数据…

SHELL中的数组及其相关操作

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;博主会及时修改&#xff09; 数组 在shell中&#xff0c;可以使用数组来存储和操作一组数据。数组是由一个或多个元素组成的有序集合&am…

springboot生成PDF,并且添加水印

/*** 导出调查问卷*/ApiLog("导出调查问卷")PostMapping("/print/{id}")ApiOperationSupport(order 23)ApiOperation(value "导出报告", notes "导出报告")public void print(PathVariable Long id, HttpServletResponse response…

CentOS7设置 redis 开机自启动

CentOS7设置 redis 开机自启动 步骤1.创建redis.service文件2.重新加载所有服务3.设置开机自启动4.自由地使用linux系统命令4.1.启动 Redis 服务4.2.查看 Redis 状态(-l:查看完整的信息)4.3.停止 Redis 服务4.4.重启 Redis 服务 步骤 如果你傲娇&#xff0c;不想拷贝&#xff0…

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因&#xff0c;您可能想要将 PDF 转换为 HTML。例如&#xff0c;您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中&#xff0c;您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…

虹科示波器 | 汽车免拆检修 | 2015款奔驰G63AMG车发动机偶尔自动熄火

一、故障现象 一辆2015款奔驰G63AMG车&#xff0c;搭载157发动机&#xff0c;累计行驶里程约为9.4万km。车主反映&#xff0c;该车低速行驶时&#xff0c;发动机偶尔会自动熄火&#xff0c;故障大概1个星期出现1次。 二、故障诊断 接车后路试&#xff0c;故障未能再现。用故障检…

机器人制作开源方案 | 智能快递付件机器人

一、作品简介 作者&#xff1a;贺沅、聂开发、王兴文、石宇航、盛余庆 单位&#xff1a;黑龙江科技大学 指导老师&#xff1a;邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响&#xff0c;大学校园内都采取封闭式管理来降低传染的风险&#xff0c;导致学生不能外出&#xff0c…

GNU gold链接器 - target.cc 实现特定目标架构的支持

一、Target::do_is_local_label_name(const char* name) const 1. object.cc 中 调用target().is_local_label_name(name) 这段代码是在链接器中用于决定是否应该丢弃本地符号的部分。它包含了一些逻辑&#xff0c;以便在满足特定条件时丢弃本地符号。下面是关键部分的解释&…

SpringCloud微服务:Nacos和Eureka的区别

目录 配置&#xff1a; 区别&#xff1a; ephemeral设置为true时 ephemeral设置为false时&#xff08;这里我使用的服务是order-service&#xff09; 1. Nacos与eureka的共同点 都支持服务注册和服务拉取 都支持服务提供者心跳方式做健康检测 2. Nacos与Eu…

【git】一些容易混淆的操作

git clone vs git init: git clone&#xff1a;用于从现有的 Git 仓库复制一个副本到本地。这通常是参与一个已存在项目的起始步骤。git init&#xff1a;用于在本地创建一个新的 Git 仓库。这是开始一个全新项目的第一步。 git add vs git commit: git add&#xff1a;将更改…

在服务器导出kafka topic数据

使用Kafka自带的工具&#xff1a;Kafka提供了一个命令行工具kafka-console-consumer&#xff0c;可以用来消费指定Topic的数据并将其打印到控制台。 1.打印到控制台 命令如下&#xff1a; kafka-console-consumer.sh --bootstrap-server $kafkaHost --topic $topicName --from-…

【广州华锐互动】VR可视化政务服务为公众提供更直观、形象的政策解读

虚拟现实&#xff08;VR&#xff09;技术正在逐渐应用于政务服务领域&#xff0c;为公众提供更加便捷、高效和个性化的服务体验。通过VR眼镜、手机等设备&#xff0c;公众可以在虚拟环境中参观政务服务中心&#xff0c;并根据自己的需求选择不同的办事窗口或事项进行咨询和办理…

06-流媒体-YUV数据在SDL控件显示

整体方案&#xff1a; 采集端&#xff1a;摄像头采集&#xff08;YUV&#xff09;->编码&#xff08;YUV转H264&#xff09;->写封装&#xff08;&#xff28;264转FLV&#xff09;->RTMP推流 客户端&#xff1a;RTMP拉流->解封装&#xff08;FLV转H264&#xff09…

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)

LEFT JOIN LEFT JOIN 同样用于关联两个表&#xff0c;ON 关键字后指定两个表共有的字段作为匹配条件&#xff0c;与 INNER JOIN 不同的地方在于匹配不上的数据行&#xff0c;INNER JOIN 对两表匹配不上的数据行不返回结果&#xff0c;而 LEFT JOIN 只对右表&#xff08;table2…