MySQL高可用 MMM

news2024/11/16 23:41:19

MySQL高可用 MMM

  • 一、MMM
    • 1.1 MMM介绍
    • 1.2 关于 MMM 高可用架构的说明
  • 二、搭建 MySQL MMM
    • 2.1 环境准备
    • 2.2 搭建 MySQL 多主多从模式
    • 2.3 安装配置 MySQL-MMM

一、MMM

1.1 MMM介绍

  • Master-Master replication manager for MvSQL,MySQL 主主复制管理器。
    1、是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。
    2、MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。
    3、MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。

1.2 关于 MMM 高可用架构的说明

1、mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监控主机上运行。
2、mmm_agent:运行在每个MySQL服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。
3、mmm_control:一个简单的脚本,提供管理 mmm_mon 进程的命令。
4、mysql-mmm 的监管端会提供多个虚拟 IP(VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。

在整个监管过程中,需要在 MySQL 中添加相关授权用户,以便让 MySQL 可以支持监控主机的维护。 授权的用户包括一个 mmm_monitor 用户和一个 mmm_agent 用户。

二、搭建 MySQL MMM

2.1 环境准备

master01(db1)			192.168.119.10                 mysql5.7、mysql-mmm
master02(db2)			192.168.119.20                 mysql5.7、mysql-mmm
slave01(db3)			192.168.119.30                 mysql5.7、mysql-mmm
slave02(db4)			192.168.119.40                 mysql5.7、mysql-mmm
monitor					192.168.119.50                 mysql-mmm

systemctl disable --now firewalld 
setenforce 0

2.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;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.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


//故障测试
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;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

vue3如何使用vant中IndexBar索引栏?

目录 1、为什么要使用IndexBar索引栏&#xff1f;2、引入3、基础使用4、处理后端返回的数据5、渲染页面 1、为什么要使用IndexBar索引栏&#xff1f; 在我们开发移动端的时候&#xff0c;有时候会遇到制作通讯录或者城市索引栏&#xff0c;这种时候我们就可以使用vant中快捷方…

warp框架教程2-log模块,addr模块和header模块

log , addr 和 header 从本文开始&#xff0c;我们将介绍 warp 中 Filter 的核心模块。在文档中有 filter 相关模块的介绍&#xff0c; 本文来介绍其中的 addr&#xff0c;header 和 log addr 模块 addr 模块非常简单&#xff0c;它是用来获取远程客户端的地址的。使用起来…

高性能计算学习教程,从入门到精通

学习高性能计算需要一定的计算机科学和数学基础。以下是一个详细的学习路线&#xff0c;从入门到精通高性能计算的步骤&#xff1a; 阶段一&#xff1a;基础知识学习 计算机科学基础&#xff1a;了解计算机体系结构、操作系统、数据结构和算法。学习编程语言如C/C、Python等。 …

苹果手机没法访问Fildder代理服务怎么办

浏览器输入http://ip:port进入可下载证书页面 异常情况&#xff1a; 浏览器访问http://ip:port后无响应&#xff0c;白屏&#xff0c;或有“无法使用跳转网络”的提示 解决方法&#xff1a; 1. PC重新下载fiddle证书并重启 Fildder4--Tools--Options--HTTPS--Actions--"…

【2022吴恩达机器学习课程视频翻译笔记】2.5无监督学习-part-2

2.5无监督学习-part-2 In the last video, you saw what is unsupervised learning, and one type of unsupervised learning called clustering. Let’s give a slightly more formal definition of unsupervised learning and take a quick look at some other types of uns…

ruoyi-vue版本(三十)Spring Security 安全框架中token的生成与解析

目录 1 使用2 写工具类3 使用工具类 1 使用 1 项目里面添加依赖 <!-- Token生成与解析--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>2 写工具类 package com.ruoyi.framework.we…

【MQ】消息队列的简介以及常见问题的解决方案

MQ MQ的基本概念 MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;实在消息的传输过程中保存消息的容器。多用于分布式系统之间的通信。 分布式系统的两种通信方式&#xff1a;直接调用、借助第三方间接完成 发送者成为生产者&#xff0c;接受者称为消费者…

想要用独立站打造跨境电商品牌吗?这些方法学起来吧!

随着互联网的发展&#xff0c;越来越多的跨境电商卖家开始考虑在独立站上打造自己的品牌。相比于在第三方平台上经营&#xff0c;拥有独立站不仅能够提高品牌认知度和形象&#xff0c;还能够更好地控制产品质量、维护顾客关系&#xff0c;以及获取更多的利润。而要打造一个成功…

CSS盒模型

目录 盒子区域包含块/containing block包含块的确定包含块的影响 行盒/line-boxes行盒的特性vertical-align BFCFCBFC的创建BFC的作用 关于BFC解决margin折叠问题关于设置overflow:auto解决浮动塌陷问题BFC解决塌陷问题的两个条件BFC计算高度规则 盒子区域 浏览器在展示每一个…

N-121基于微信小程序网上书城系统

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatisredis 本系统分微信小程序和管理后台两部分&a…

(23)目标检测算法之YOLOv6 (1)全流程指南:环境安装、模型配置、训练及推理

目标检测算法之YOLOv6 (1)全流程指南&#xff1a;环境安装、模型配置、训练及推理 本文向将介绍 YOLOv6 的整体框架&#xff0c;并提供详细的教程链接。官方论文 ☞ YOLOv6: A Single-Stage Object Detection Framework for Industrial Applicationsv3.0版本论文更新 ☞ YOLOv…

综合评价算法 | Matlab实现基于AHP层次分析法的综合评价算法

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 综合评价算法 | Matlab实现基于AHP层次分析法的综合评价算法 研究内容 AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因 素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作…

测试四—测试分类

一、按测试对象划分 1.1 界面测试 界面测试&#xff08;简称UI测试)&#xff0c;指按照界面的需求&#xff08;一般是UI设计稿&#xff09;和界面的设计规则&#xff0c;对我们软件界面所展示的全部内容进行测试和检查&#xff0c;一般包括如下内容&#xff1a; 验证界面内容…

解决:在微服务中一个服务访问另一个服务的类或方法出现的问题

我的需求&#xff1a; 我需要在用户模块使用公共模块的service和mapper和实体类&#xff0c;出现以下错误 ​ springboot启动错误如下&#xff1a; 报错结果&#xff1a;需要一个类型为“com.buba.yka.mapper.salesmanMapper”的bean&#xff0c;但找不到该bean Error starti…

接口自动化面试题【思路分享】

文末免费领资料 接口自动化流程怎么做的&#xff0c;框架怎么搭建的&#xff1f; 流程&#xff1a; 1、分析需求&#xff0c;确定测试范围 2、搭建自动化测试环境、准备相关测试数据 3、工具选型&#xff0c;搭建测试框架 4、编写用例 5、执行用例&#xff0c;生成测试报…

记录好项目D19

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个网上商城管理系统 一、系统介绍 需求设计主要参考天猫商城的购物流…

【Linux】—— 进程的环境变量

序言&#xff1a; 在上期我们已经对进程PCB以及进程状态进行了详细的解释说明。今天&#xff0c;我将带领大家学习的是关于进程的环境变量的问题。 目录 &#xff08;一&#xff09;孤儿进程 1、基本介绍 2、代码演示 &#xff08;二&#xff09;环境变量 1、基本概念 2…

使用git管理matlab代码

matlab使用git管理代码 设置 Git 源代码管理 - MATLAB & Simulink - MathWorks 中国 在 R2020b 之前&#xff0c;必须安装命令行 Git 客户端&#xff0c;才能使用 Git 合并 MATLAB 中的分支。有关详细信息&#xff0c;请参阅安装命令行 Git 客户端。 1.在 Git 中注册二进…

Groovy系列三 Java SpringBoot 整合 Groovy

目录 一、概述 一、在Java中使用Groovy&#xff1a; 二、在Groovy中使用Java&#xff1a; 三、几种范式的不同、优缺点 Java调用Groovy的类和方法&#xff1a; Groovy调用Java的类和方法&#xff1a; 使用GroovyShell执行Groovy脚本&#xff1a; 使用GroovyClassLoader加…

4.0ORBSLAM3之局部建图线程概述

1.简介 局部建图线程是ORBSLAM3的核心线程之一&#xff0c;在初始化SLAM系统时被创建和启动&#xff0c;主要作用是为跟踪线程(跟踪局部地图)以及回环检测线程(回环检测)服务&#xff0c;并进行局部地图优化以及时消除轨迹的累计误差。局部建图线程主要维护一个由共视图Covisi…