MySQL的MMM高可用

news2024/11/18 16:50:07

MySQL的MMM高可用

  • 一、MMM简介
  • 二、搭建MySQL的MMM高可用
    • 1、准备环境
    • 2、 搭建 MySQL 多主多从模式
    • 3、安装配置 MySQL-MMM
    • 4、故障测试
    • 5、客户端测试

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

关于 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、准备环境

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



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                                               #每台 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;

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*

//在 master01 上对 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      192.168.80.20
    mode    master
    peer    db2
</host>

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

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

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

<role writer>
    hosts   db1, db2
    ips     192.168.80.188
    mode    exclusive           #只有一个 host 可以进行写操作模式
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.80.198, 192.168.80.199
    mode    balanced            #多个 slave 主机可以进行读操作模式
</role>

//把配置文件复制到其它 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
<monitor>
.....
    ping_ips        	192.168.80.20,192.168.80.30,192.168.80.13,192.168.80.14    #指定所有数据库服务器的 IP
	auto_set_online		10				#指定自动上线时间
</monitor>

<host default>
    monitor_user        mmm_monitor		#指定 mmm_monitor 的用户名
    monitor_password    123456          #指定 mmm_monitor 的密码
</host>


//在所有数据库上为 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

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

5、客户端测试

#在 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;

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

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

相关文章

访问学者申请英语口语怎样顺利通关

想要成功申请成为访问学者&#xff0c;英语口语的流利表达是非常重要的。下面知识人网小编整理的一些帮助你顺利通关的建议&#xff1a; 1. 提前准备&#xff1a;在面试之前&#xff0c;充分准备各种常见问题的回答。练习口语表达&#xff0c;加强词汇和语法的掌握。可以通过与…

如何学习PHP语法和基本概念? - 易智编译EaseEditing

学习PHP语法和基本概念是成为一个合格的PHP开发者的第一步。以下是一些学习PHP语法和基本概念的建议&#xff1a; 官方文档&#xff1a; PHP官方提供了详细的文档&#xff0c;包括语言参考、函数参考和示例等。阅读官方文档是学习PHP语法和基本概念的最佳途径。你可以访问PHP…

企业如何数字化转型?企业数字化转型面临哪些挑战?

一文看懂&#xff1a;传统企业数字化转型会面临哪些困难与挑战&#xff1f;如何有效解决&#xff1f; 目前&#xff0c;数字技术的发展已经从互联网、大数据&#xff0c;迈入了AI人工智能时代。而企业也如逆水行舟、不进则退&#xff0c;如果不进行数字化转型&#xff0c;企业…

AI芯片的基础

前置基础 AI芯片其实就是AI算法的专用处理器&#xff0c;像CPU的话是一个通用处理器&#xff0c;CPU按照逻辑可以分为三个模块&#xff1a;控制模块&#xff0c;运算模块&#xff0c;存储模块&#xff1b;其中控制单元有指令寄存器和指令译码器&#xff0c;根据用户预先编译好…

关于Apache Dubbo反序列化漏洞(CVE-2023-23638)的预警提示与对应的Zookeeper版本

公司在升级dubbo过程中因zookeeper版本不匹配&#xff0c;导致服务注册和调用出现异常 一、漏洞详情 Apache Dubbo是一款高性能、轻量级的开源Java服务框架。 Apache官方发布安全公告&#xff0c;修复了Apache Dubbo中的一个反序列化漏洞&#xff08;CVE-2023-23638&#xff…

系统架构设计师 5:软件工程

一、软件工程 1 软件过程模型 软件要经历从需求分析、软件设计、软件开发、运行维护&#xff0c;直至被淘汰这样的全过程&#xff0c;这个全过程称为软件的生命周期。 为了使软件生命周期中的各项任务能够有序地按照规程进行&#xff0c;需要一定的工作模型对各项任务给予规…

不会设计也能轻松制作商品宣传海报图片,只要跟着这个教程走

促销活动是商家吸引顾客的重要方式之一&#xff0c;而宣传海报则是促销活动中的主要宣传工具之一。好的宣传海报可以让顾客对活动产生兴趣&#xff0c;提高产品的曝光率。然而&#xff0c;对于小型商家来说&#xff0c;往往没有专业的设计人员&#xff0c;如何制作出符合自己需…

项目开发中的安全问题怎么处理?

目录 1.客户的数据不可信 2. 客户端提交的参数需要校验 3.请求头里的内容出现错误 1.客户的数据不可信 PostMapping("/order") public void wrong(RequestBody Order order) {this.createOrder(order); } 对应的实体类如下&#xff1a; Data public class Order …

[框架]MyBatis框架

关于MyBatis框架 MyBatis框架的主要作用&#xff1a;实现并简化数据库编程。 MyBatis框架的依赖项 MyBatis框架的依赖项是&#xff1a;mybatis&#xff0c;但&#xff0c;通常还应该再添加&#xff1a;mybatis-spring、spring-jdbc、mysql或其它数据库的依赖项、数据库连接池…

FreeRTOS_列表和列表项

目录 1. 什么是列表和列表项&#xff1f; 1.1 列表 1.2 列表项 1.3 迷你列表项 2. 列表和列表项初始化 2.1 列表初始化 2.2 列表项初始化 3. 列表项插入 3.1 列表项插入函数分析 3.2 列表项插入过程图示 3.2.1 插入值为 40 的列表项 3.2.2 插入值为 60 的列表项 3…

c++ while(i--) 的执行顺序

问&#xff1a;while (i--) {语句B} 的执行顺序是什么&#xff1f; 首先执行i--,再执行 while ,再执行语言B. 一个案例&#xff1a; 案例中count 的初始值为-3. 第一个打出的为-2&#xff0c; 证明的之前的判断流程。 附录&#xff1a; while(条件){//语句A} 的执行逻辑&…

聊聊PCIe协议的BDF

[摘要]&#xff1a;本文主要介绍 PCIe 协议中 Bus、Device 和 Function 的基本定义。 PCIe 总线的拓扑结构就像一颗葡萄树&#xff1a;树根相当于 PCIe Root Complex&#xff0c;树干和树枝相当于 PCIe Bus&#xff0c;一整串葡萄相当于 PCIe Device&#xff0c;一颗葡萄相当于…

c++构造基类

c构造基类 c构造基类采用初始化列表 基类的成员变量由基类的构造函数初始化 派生类的成员变量由派生类的构造函数初始化 基类&#xff1a; 派生类: 调用

微信扫码对接

微信扫码对接&#xff0c;如果刚开始没有资源进行对接。 可以选择先申请微信公众测试平台进行测试&#xff0c;地址如下 微信公众平台 申请步骤等等简单的就不说了&#xff0c;本文主要说一下需要注意的坑。 1.首先需要一个外网地址&#xff0c;做本地映射&#xff0c;否则…

掌握这些容易被忽略的Vue组件细节,提升开发效率,事半功倍!

组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。 组件在日常开发的重要性不言而喻&#xff0c;掌握下述细则&#xff0c;可以让你在开发中事半功倍&#xff01; Props defineProps() 宏中的参数不可以访问 <script setup&…

mysql的高可用架构之mmm

目录 一、mmm的相关知识 1&#xff09;mmm架构的概念 2&#xff09;MMM 高可用架构的重要组件 3&#xff09;mmm故障切换流程 二、mmm高可用双主双从架构部署 实验设计 实验需求 实验组件部署 具体实验步骤 步骤一&#xff1a; 搭建 MySQL 多主多从模式 &#…

Uniapp中简单弹出层的使用

图示 思路 当派工单这个输入框获取到焦点后&#xff0c;弹出弹出层选择数据。 1、定义这个输入框 <view class"cu-form-group"><view class"title"><text class"text-red">*</text>派工单号: </view><input…

Mysql查询语句优化方法

查询优化 小表驱动大表 优化原则&#xff1a;对于MySQL数据库而言&#xff0c;永远都是小表驱动大表。 /** * 举个例子&#xff1a;可以使用嵌套的for循环来理解小表驱动大表。 * 以下两个循环结果都是一样的&#xff0c;但是对于MySQL来说不一样&#xff0c; * 第一种可以理解…

第1章-Java语言概述

Java基础知识图解 1. Java语言概述 1.1 Java简史 是SUN(Stanford University Network&#xff0c;斯坦福大学网络公司 ) 1995年推出的一门高级编程语言。是一种面向Internet的编程语言。 Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。 这些Java程序被称为Java小…

DepthAI API详解

目录 DepthAI的整体架构Device 对象通过标识连接到指定设备定义输入/输出队列Device对象的常用方法addLogCallback()方法close()方法getInputQueue()方法getOutputQueue()方法 PipelinePipeline常用的方法create()方法createColorCamera()方法createMonoCamera()方法createNeur…