mysql的高可用架构之mmm

news2024/11/18 18:26:28

目录

一、mmm的相关知识

1)mmm架构的概念 

2)MMM 高可用架构的重要组件

3)mmm故障切换流程 

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

实验设计

实验需求

实验组件部署 

具体实验步骤 

步骤一:  搭建 MySQL 多主多从模式

(1)二进制文件的相关配置 

(2)配置主主复制(master),主从复制(slave)

步骤二:安装配置 MySQL-MMM  

(1)下载配置mysql—mmm服务 

(2)修改相关的配置(全数据库服务器)

(3)启动monitor服务器的 mysql-mmm-monitor 

步骤三: monitor 服务器进行集群检测和备用master绑定

三、实验测试 

1)故障测试 

2)客户机测试  


一、mmm的相关知识

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

2)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 用户

3)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 同步数据

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

实验设计

实验需求

部署一个双主双从的高可用架构,master节点服务器用于数据库写操作,在出现故障时,能够切换到另一台服务器继续保持master服务器的工作,两台从服务器进行读的作用,具有读的负载均衡作用。 

实验组件部署 

节点服务器系统IP地址安装的工具及其服务VIP地址
monitor服务器centos7.4192.168.73.105  mysql-mmm
master01(db1)centos7.4192.168.73.106 mysql5.7、mysql-mmm

write

192.168.73.66

master02(db2)centos7.4192.168.73.107 mysql5.7、mysql-mmm

待机预获取

mater01的write VIP

slave01

(db3)

centos7.4192.168.73.109 mysql5.7、mysql-mmm

read

192.168.73.77

slave02

(db4)

centos7.4192.168.73.110 mysql5.7、mysql-mmm

read

192.168.73.88

具体实验步骤 

本实验省略mysql5.7.20的源码编译安装。。。。。。。。。。。。 

步骤一:  搭建 MySQL 多主多从模式

(1)二进制文件的相关配置 

//修改 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.73.107:/etc/
scp /etc/my.cnf root@192.168.73.109:/etc/
scp /etc/my.cnf root@192.168.73.110:/etc/
 
#将所有的mysql的服务器进行服务重启
systemctl restart mysqld

(2)配置主主复制(master),主从复制(slave)

#在两台主服务器上都执行授予从的权限,从服务器上不需要执行
grant replication slave on *.* to 'replication'@'192.168.73.%' identified by '123456';
 
#在两台主服务器上查看,记录日志文件名称和同步点
show master status;
 
 
#在 master01 上配置同步
change master to master_host='192.168.73.107',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',mastter_log_pos=460;
 
 
start slave;
 
 
 
#在 master02 上配置同步
change master to master_host='192.168.73.106',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=460;
 
start slave;
 
 
 
 
//配置主从复制,在两台从服务器上做
change master to master_host='192.168.73.106',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=460;
 
start slave;
 
show slave status\G
 
 
 

//测试主主、主从 同步情况
create database db_test;

步骤二:安装配置 MySQL-MMM  

(1)下载配置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.73.106
    mode    master
    peer    db1
</host>
 
<host db2>
    ip      192.168.73.107
    mode    master
    peer    db2
</host>
 
<host db3>
    ip      192.168.73.109
    mode    slave
</host>
 
<host db4>
    ip      192.168.73.110
    mode    slave
</host>
 
<role writer>
    hosts   db1, db2
    ips     192.168.73.66
    mode    exclusive           #只有一个 host 可以进行写操作模式
</role>
 
<role reader>
    hosts   db3, db4
    ips     192.168.73.77, 192.168.73.88
    mode    balanced            #多个 slave 主机可以进行读操作模式
</role>
 
//把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
scp mmm_common.conf root@192.168.73.107:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.73.109:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.73.110:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.73.105:/etc/mysql-mmm/
 

(2)修改相关的配置(全数据库服务器)

//修改所有数据库服务器的代理配置文件 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.73.106,192.168.73.107,192.168.73.109,192.168.73.110    #指定所有数据库服务器的 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.73.%' identified by '123456';
 
 
//在所有数据库上为 mmm_moniter(监控进程)授权
grant replication client on *.* to 'mmm_monitor'@'192.168.73.%' identified by '123456';
 
flush privileges;
 
 
//在所有数据库服务器上启动 mysql-mmm-agent
systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service

(3)启动monitor服务器的 mysql-mmm-monitor 

systemctl start mysql-mmm-monitor.service   

步骤三: monitor 服务器进行集群检测和备用master绑定

#查看各节点的情况
mmm_control show
 
#检测监控功能是否都完善,需要各种OK
mmm_control checks all
 
#指定绑定 VIP 的主机
mmm_control move_role writer db1

三、实验测试 

1)故障测试 

//故障测试
mmm_control move_role writer db2
 
#停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占
 
mmm_control show
 
 
#停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
mmm_control show

2)客户机测试  

#在 master01 服务器上为 monitor 服务器地址授权登录
grant all on *.* to 'testdba'@'192.168.73.107' identified by '123456';
flush privileges;
 
#在 monitor 服务器上使用 VIP 登录
#客户机若没有安装mysql服务,也可以通过安装mariadb进行
yum install -y mariadb-server mariadb
systemctl start mariadb.service
 
mysql -utestdba -p -h 192.168.73.66
 
#创建数据,测试同步情况
create database testdba;

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

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

相关文章

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…

泛微以低代码助力央企合规、案件管理数字化

近年来&#xff0c;国家出台一系列文件&#xff0c;不断强化央企国企合同、法务、合规、风控一体化管理&#xff0c;深化法治企业建设。 2022年&#xff0c;国资委印发《中央企业合规管理办法》&#xff0c;要求中央企业加强合规管理&#xff0c;切实防控风险&#xff0c;并指…

新手小白学JAVA_IDEA修改主题 设置背景图片

很多小白在刚刚使用IDEA的时候还不是很熟练 本文主要给大家提供一些使用的小技巧&#xff0c;希望能帮助到你 1.修改IDEA默认主题 IDEA的默认主题是黑色的&#xff0c;其实也可以选择其他的主题 我们一起来试一试吧~ 2.修改IDEA背景图片 IDEA的背景图片也是可以自定义的 我们…

arcgis波段提取--多波段合成

1、打开软件&#xff0c;导入彩色栅格影像&#xff0c;如下&#xff1a; 上图有RGB三个波段&#xff0c;在左侧图层下可以看到波段情况。 2、在菜单栏中选择"窗口"--"影像分析"&#xff0c;如下&#xff1a; 点击影像分析功能&#xff0c;打开如下界面&am…

移除flyway,手动进行数据库的迁移

国产数据库如达梦、金仓数据库&#xff0c;开源数据迁移工具貌似支持的很少&#xff0c;手写工具类进行数据库脚本的迁移&#xff0c;主要有2个类如下&#xff1a; /*** 模拟flyway进行sql迁移*/ Component Slf4j public class SqlInitialize implements InitializingBean, Ord…

Java【String字符串不可变】

字符串不可变&练习 字符串不可变1. 字符串设置为不可变的原因2. 如何修改字符串内容3 StringBuilder类的具体使用4. 面试题 字符串不可变 1. 字符串设置为不可变的原因 方便实现字符串常量池&#xff0c;若String对象可变&#xff0c;常量池中的内容就会随时变化&#xf…

Linux SVN提交日志校验

#!/bin/bash export LANG"en_US.UTF-8" #确保中文日志显示正常&#xff0c;便于统计日志 REPOS"$1" TXN"$2" #限制日志长度 LENGTH20 #exit 0SVNLOOK"/usr/bin/svnlook" BLACKLIST".* *.o *.chw *.pck ~\$*"function error_…

五、菜单管理

云尚办公系统&#xff1a;菜单管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&#x…

【Linux系统编程】Linux基本指令详解(二)

文章目录 前言1. cp 指令&#xff08;重要&#xff09;2. mv 指令&#xff08;重要&#xff09;3. cat 指令echo 命令输出重定向追加重定向wc 命令输入重定向 4. more 指令5. less指令&#xff08;重要&#xff09;6. head指令7. tail指令8. 命令行管道&#xff08;了解&#x…

《AVL树》

文章目录 一、AVL树的基本概念二、AVL树的结点定义三、AVL树的插入四、AVL树的旋转1. 右单旋2. 左单旋3. 右左双旋4. 左右双旋 五、AVL树的验证六、AVL树的性能七、源代码 一、AVL树的基本概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将…

Mysql+ETLCloud CDC+Doris实时数仓同步实战

业务需求及其痛点 很多大型企业需要对各种销售及营销数据进行实时同步分析&#xff0c;例如销售订单信息&#xff0c;库存信息&#xff0c;会员信息&#xff0c;设备状态信息等等&#xff0c;这些统计分析信息可以实时同步到Doris中进行分析和统计&#xff0c;Doris作为分析型…

《深入浅出SSD:固态存储核心技术、原理与实战》----学习记录(一)

前言 传统数据存储介质有磁带、光盘等&#xff0c;但更多的是硬盘(HDD)。随着数据呈爆炸式增长&#xff0c;对数据存储介质在速度上、容量上有更高的要求。时势造英雄&#xff0c;固态硬盘(Solid State Disk&#xff0c;SSD)横空出世。SSD使用电子芯片存储数据&#xff0c;没有…

数学建模算法(基于matlab和python)之 改进的欧拉方法与四阶L-K方法(4/10)

实验目的及要求&#xff1a; 1、熟悉各种初值问题的算法&#xff0c;编出算法程序&#xff1b; 2、明确各种算法的精度寓所选步长有密切关系&#xff1b; 3、熟悉在Matlab平台上直接求解常微分方程初值问题。 实验内容&#xff1a; 1、编写改进的欧拉公式通用子程序&#xff0…

禽流感病毒防治VR模拟实训教学效率高-深圳华锐视点

对于临床兽医学实训而言&#xff0c;学生在实验教学中依托传统的教学方式已经无法满足学生的学习效率&#xff0c;理论知识和实验教学无法完美结合。 随着互联网数字化的飞速发展&#xff0c;数字化虚拟仿真教学兴起&#xff0c;有效的提升了传统教学的质量&#xff0c;学生在实…

Blender骨骼绑定

演示视频参考连接:Blender骨骼绑定教程3&#xff1a;清除绑定 & Deform & 权重修改_哔哩哔哩_bilibili 对给定人体Mesh建立骨骼的操作步骤&#xff1a; 在Blender中打开人体Mesh模型&#xff0c;并确保该模型处于object模式。或者使用快捷键“Shift A”并选择“骨骼…

【FFmpeg实战】视频容器

原文地址&#xff1a;https://alphahinex.github.io/2020/03/12/video-container/ 视频容器 我们常见的视频格式有 avi 或 mp4 等&#xff0c;这些所谓的视频格式&#xff0c;实际上指的只是视频容器的格式。就像 zip 格式的压缩包里面可以放置任意类型的文件一样&#xff0c;…

【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解

文章目录 前言一、生成 Docker 镜像1.编写Dockerfile2.构建镜像 二、启动容器1.运行服务2.测试 三、jar包映射部署1.更新Dockerfile文件2.构建镜像3.创建&启动容器 总结 前言 本文将为您详细介绍如何在Docker容器中部署Spring Boot服务。 首先&#xff0c;您需要为您的Sp…