MMM高可用配置

news/2024/7/4 16:32:32/文章来源:https://www.cnblogs.com/zsy828/p/18274698

目录
  • 1.MMM的概述
  • 2.MMM的工作原理
  • 3.如何实现主主复制

1.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。

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

2.MMM的工作原理

MMM 通过监控 MySQL 实例的状态来实现故障检测和自动故障转移。当一个主节点发生故障时,MMM 会自动将其中一个从节点提升为新的主节点,确保数据库的可用性。
MMM 还可以根据负载情况自动进行负载均衡。它可以根据每个节点的负载情况,将读操作分发到不同的节点上,从而提高系统的整体性能。
MMM 还提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作

3.如何实现主主复制

1)时间同步:确保两台服务器的时间同步
2)配置文件修改:在两台服务器的MySQL配置文件中启用二进制日志和主从复制相关参数。
3)创建复制用户:在两台服务器上分别创建用于复制的用户,并授予必要权限
4)互为主从配置:在服务器A上设置服务器B为从库;在服务器B上设置服务器A为从库
5)启动复制:在两台服务器上分别执行 START SLAVE
6)检查状态:使用 SHOW SLAVE STATUS\G 查看复制状态,确保无错误

1)MMM 方案(单主)
MMM 通过监控 MySQL 实例的状态来实现故障检测和自动故障转移。当一个主节点发生故障时,MMM 会自动将其中一个从节点提升为新的主节点,确保数据库的可用性。
MMM 还可以根据负载情况自动进行负载均衡。它可以根据每个节点的负载情况,将读操作分发到不同的节点上,从而提高系统的整体性能。
MMM 还提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作。

优点:
高可用性:MMM 通过自动故障检测和故障转移机制,可以快速将一个从节点提升为新的主节点,从而实现数据库的高可用性,减少系统的停机时间。
负载均衡:MMM 可以根据节点的负载情况,将读操作分发到不同的节点上,从而实现负载均衡,提高系统的整体性能。
简单易用:MMM 提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作,使得系统的管理和维护变得简单易用。

缺点:
数据一致性:由于 MMM 采用的是异步复制机制,主节点和从节点之间存在一定的延迟,可能导致数据的不一致。在某些场景下,可能需要额外的措施来确保数据的一致性。
单点故障:虽然 MMM 可以自动进行故障转移,但在故障转移过程中,可能会存在一段时间的数据库不可用。如果 MMM 本身发生故障,可能会导致整个系统的不可用。
配置复杂性:MMM 的配置相对复杂,需要对 MySQL 的复制机制和 MMM 的工作原理有一定的了解。在配置过程中,需要注意各个节点的配置一致性和正确性。

搭建 MySQL MMM
1)Master1节点服务器20.0.0.140
2)Master2 节点服务器20.0.0.150
3)Slave1节点服务器20.0.0.170
4)Slave2节点服务器20.0.0.180
5)monitor 20.0.0.110

systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/configdisabled##修改 Master、Slave1、Slave2、MHA manager节点的主机名
hostnamectl set-hostname mysql1     ##Master1
hostnamectl set-hostname mysql2     ##Master2
hostnamectl set-hostname mysql3     ##Slave1
hostnamectl set-hostname mysql4     ##Slave2
hostnamectl set-hostname monitor    ##monitorbash






1)Master1节点服务器20.0.0.140

##修改 master1 配置文件
vim /etc/my.cnf······/usr/local/mysqldatadir = /usr/local/mysql/dataport = 3306character_set_server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket = /usr/local/mysql/mysql.sock
##这里要改##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##把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改
scp /etc/my.cnf root@<主MySQL服务器2​IP>:/etc/
scp /etc/my.cnf root@<从MySQL服务器1​IP>:/etc/
scp /etc/my.cnf root@<从MySQL服务器2​IP>:/etc/


2)Master2 节点服务器20.0.0.150
3)Slave1节点服务器20.0.0.170
4)Slave2节点服务器20.0.0.180

vim /etc/my.cnfserver-id = *systemctl restart mysqld







1)Master1节点服务器20.0.0.140
2)Master2 节点服务器20.0.0.150
配置主主复制,两台主服务器相互复制,在两台主服务器上,从服务器上不需要执行.

grant replication slave on *.* to '<主从用户名>'@'<登录网段>%' identified by '<主从密码>';show master status;


1)Master1节点服务器20.0.0.140
在 主MySQL服务器1​ 上配置同步

change master to master_host='<主MySQL服务器2​IP>',master_user='<主从用户名>',master_password='<主从密码>',master_log_file='<主MySQL服务器2二进制日志文件名>',master_log_pos=<偏移量>;start slave;
show slave status\G

2)Master 节点服务器20.0.0.150
在 主MySQL服务器2 上配置同步

change master to master_host='<主MySQL服务器1​IP>',master_user='<主从用户名>',master_password='<主从密码>',master_log_file='<主MySQL服务器1二进制日志文件名>',master_log_pos=<偏移量>;start slave;
show slave status\G

3)Slave1节点服务器20.0.0.170
4)Slave2节点服务器20.0.0.180
在两台从服务器上,主服务器上不需要执行,配置主从复制,在两台从服务器上做

change master to master_host='<主MySQL服务器1​IP>',master_user='<主从用户名>',master_password='Admin@123',master_log_file='<主MySQL服务器1二进制日志文件名>',master_log_pos=<偏移量>;start slave;
show slave status\G


##授权配置错误修正
STOP SLAVE;
RESET SLAVE;

1)Master节点服务器20.0.0.140
测试主主、主从 同步情况

show databases;
create database mydb;
show databases;


在所有服务器上安装 MySQL-MMM
1)Master节点服务器20.0.0.140
2)Master 节点服务器20.0.0.150
3)Slave1节点服务器20.0.0.170
4)Slave2节点服务器20.0.0.180
5)monitor服务器20.0.0.110

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repocd /etc/yum.repos.d/
rz -E 上传  epel.repo
vim epel.repogpgcheck=0cd /opt/
mkdir /opt/yumcache
cd /etc/yum.repos.d
mv repo.bak/* ./
mv local.repo repo.bak
cd /opt/yumcacheyum install -y epel-release
yum -y install mysql-mmm*






在 主MySQL服务器1 上对 MySQL-MMM 进行配置
1)Master节点服务器20.0.0.140

cd /etc/mysql-mmm/
cp mmm_common.conf mmm_common.conf.bak
vim mmm_common.conf         ······##修改##<host default>cluster_interface       <网卡名>       ens33……replication_user        <主从用户名>      replicationreplication_password    <主从密码>       replication123agent_user              <MMM代理用户名>    mmm_agent       agent_password          <MMM代理密码>     mmm_agent123<host db1>ip      <主MySQL服务器1​IP>   20.0.0.140mode    masterpeer    db2</host><host db2>ip      <主MySQL服务器2​IP>   20.0.0.150mode    masterpeer    db1</host><host db3>ip      <从MySQL服务器1​IP>   20.0.0.170mode    slave</host>##复制<host db3>开始的4行粘贴到这##<host db4>ip      <从MySQL服务器2​IP>   20.0.0.180mode    slave</host><role writer>hosts   db1, db2ips     <主虚拟IP>    20.0.0.66   ##设定写VIPmode    exclusive   #只有一个 host 可以进行写操作模式</role><role reader>hosts   db3, db4ips      <从虚拟IP1>, <从虚拟IP2>   20.0.0.88, 20.0.0.99  ##设定读VIPmode    balanced    ##多个 slave 主机可以进行读操作模式</role>##把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
scp mmm_common.conf root@<主MySQL服务器2​IP>:/etc/mysql-mmm/
scp mmm_common.conf root@<从MySQL服务器1​IP>:/etc/mysql-mmm/
scp mmm_common.conf root@<从MySQL服务器2​IP>:/etc/mysql-mmm/
scp mmm_common.conf root@<节点服务器1​IP>:/etc/mysql-mmm/



修改所有数据库服务器的代理配置文件 mmm_agent.conf
1)Master节点服务器20.0.0.140
2)Master 节点服务器20.0.0.150
3)Slave1节点服务器20.0.0.170
4)Slave2节点服务器20.0.0.180

vim /etc/mysql-mmm/mmm_agent.confinclude mmm_common.conf······this db*#根据不同的主机分别修改为 db1,db2,db3,db4上文hosdb配置




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

vim /etc/mysql-mmm/mmm_mon.confinclude mmm_common.conf
<monitor>
.....                   ping_ips        	<主MySQL服务器1​IP>,<主MySQL服务器2​IP>,<从MySQL服务器1​IP>,<从MySQL服务器2​IP>auto_set_online		<10~60之间任选一个数字>    
</monitor><host default>monitor_user        <MMM监控用户名>  monitor	   monitor_password    <MMM监控密码>    monitor123
</host>

在所有数据库上为 mmm_agent(代理进程)、 mmm_moniter(监控进程)授权
1)Master节点服务器20.0.0.140
2)Master 节点服务器20.0.0.150
3)Slave2节点服务器20.0.0.170
4)Slave1节点服务器20.0.0.180

grant super, replication client, process on *.* to '<MMM代理用户名>'@'<登录网段>%' identified by '<MMM代理密码>';
grant replication client on *.* to '<MMM监控用户名>'@'<登录网段>%' identified by '<MMM监控密码>';
flush privileges;

在所有数据库服务器上启动 mysql-mmm-agent
1)Master节点服务器20.0.0.140
2)Master 节点服务器20.0.0.150
3)Slave1节点服务器20.0.0.170
4)Slave2节点服务器20.0.0.180

systemctl enable mysql-mmm-agent.service --now  ##在所有数据库服务器上启动 mysql-mmm-agent

5)monitor 20.0.0.110

systemctl start mysql-mmm-monitor.service   ##在 monitor 服务器上启动 mysql-mmm-monitor

在 monitor 服务器上测试,查看各节点的情况
5)monitor 20.0.0.110

mmm_control show  ##检测监控功能是否都完善,需要各种OK
mmm_control move_role writer db2  ##指定绑定 VIP 的主机##故障测试
mmm_control move_role writer db1#停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占
systemctl stop mysqld
mmm_control show




#停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
systemctl stop mysqld
mmm_control show

客户端测试
在 master01 服务器上为 monitor 服务器地址授权登录

grant all on *.* to 'testdba'@'<节点服务器1​IP>' identified by 'Admin@123';
flush privileges;

在 monitor 服务器上使用 VIP 登录

yum install -y mariadb-server mariadb
systemctl start mariadb.servicemysql -utestdba -p -h <主VIP>mysql -utestdba -p -h 20.0.0.66 #创建数据,测试同步情况
create database testdba;
show databases;



同步

注意启动错误

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

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

相关文章

《Programming from the Ground Up》阅读笔记:p1-p18

《Programming from the Ground Up》学习第1天,p1-18总结,总计18页。 一、技术总结 1.fetch-execute cycle p9, The CPU reads in instructions from memory one at a time and executes them. This is known as the fetch-execute cycle。 2.general-purpose vs special-pu…

SpringMVC-02-什么是SpringMVC

1、概述Spring MVC是Spring Framework的Web开发部分,是基于Java实现MVC的轻量级Web框架。官方文档:https://docs.spring.io/spring-framework/docs/4.3.24.RELEASE/spring-framework-reference/html/ 中文官方文档:https://www.w3cschool.cn/spring_mvc_documentation_lines…

视图控制器UINavigationController的介绍与基本使用

UINavigationController 是 iOS 中用于管理视图控制器层次结构的一个重要组件,通常用于实现基于堆栈的导航。它提供了一种用户界面,允许用户在视图控制器之间进行层次化的导航,例如从列表视图到详细视图。 UINavigationController 的主要功能管理视图控制器堆栈:使用一个堆…

拉普拉斯网格变形实现

因为课题需要,除了RBF还做了一个Laplace网格变形,其他大佬已经把原理写的很详细了,我就简单介绍一下公式,主要还是写写实现过程。过程同样参考了大佬的部分代码,而且实现的时候刚开始敲代码不久,所以有点乱QAQ。 首先,计算离散拉普拉斯坐标,网格上的点vi的拉普拉斯坐标…

文本三剑客之grep和awk

文本三剑客之grep和awk 目录文本三剑客之grep和awk 一、grep命令 grep命令的语法:grep[选项]...查找条件 目标文件命令 作用-m数字 多个匹配只取第一个-v 取反-i 忽略大小写-n 显示匹配的行号-c 统计匹配的行数-o 仅显示匹配到的字符串-A 数字 匹配后几行-B 数字 匹配前几行-C…

shell之条件测试语句

shell之条件测试语句 目录shell之条件测试语句一、test命令或[]中括号判断1、test命令2、[]中括号2.1 整数值比较[]2.2 实例操作2.2.1 查看系统内存是否超出预定值2.2.2 比较两个数的大小2.3 字符串比较2.3.1 案例:判断字符串是否相同2.3.2 案例:判断字符串是否为空2.4 逻辑测…

ikbc poker 2说明书

Poker II电子版说明书这是带6个dip开关,type-c接口,背后有理线槽支持侧向出线的一款poker。背后的金属铭牌型号为Poker Ⅱ。ikbc官网已经没有poker相关的内容了,说明书固件都无从下载。这份电子版说明书是找客服要的,这里存一下以作备份。原文档链接:ikbc_poker_II_说明书…

Django数据库

一、MySQL驱动程序安装 我们使用Django来操作MySQL,实际上底层还是通过python来操作的。因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序。在Python3中,驱动程序有多种选择。比如pymysql以及mysqlclient等。这里我们就使用mysqlclient来操作。mysqlclient安装…

最后两次oop作业总结

1.前言 最后两次作业(即第七八次作业)大题目都是家居强电电路模拟程序,每次作业分别给了一个礼拜的时间去完成,题量较少,难度逐渐升高,以下为依次对两周题目集的知识点,题量和难度进行概述:第六次作业: 第六次作业只有一道题 家居强电电路模拟程序3,题目大概是输入设…

日志采集/分析

目录EFK1. 日志系统2. 部署ElasticSearch2.1 创建handless服务2.2 创建sts3. 部署kibana4. 部署ilogtail(docker-compose)4.1 编写docker-compose4.2 配置ilogtail采集4.3 查看容器采集的日志4.4 采集容器标准输出日志(可选)4.5 查看采集的容器日志5. 部署kafka5.1 kafka介绍…

AOD始终显示时间和信息(Dream)简析

AOD始终显示时间和信息(Dream)简析DreamManagerService启动在SystemServer的startOtherServices方法中会启动DreamManagerService服务这里是调用SystemServiceManager的startService方法显然,在SystemServiceManager的startService方法中首先将要启动的系统服务添加到其mSer…

操作系统——学习笔记(2)CPU虚拟化

学习黑皮书的一些呆瓜行为hhhhh

免费的攻击面管理平台-森罗

产品简介 森罗是有安科技推出的一款全新综合网络安全攻击面管理平台,集网络空间测绘与漏洞扫描于一体。森罗自带万象漏洞扫描器,与Nessus和Nuclei等许多产品一样,但它更现代,具有免等待的OOB测试策略、高级漏洞PoC IDE和强大的VDSL(漏洞域特定语言)引擎,使您能够轻松快速…

Fake权限验证小例子

前言 关于本地测试如何进行Fake权限验证 正文 在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验证吧。上图可能是我们本地测试的时候需要填写的一个token位置,本地测试不方便。 那么…

41、linux-yum源管理-阿里云仓库配置

yum的管理1、清理原有的yum配置 把本地或者官方的/etc/yum.repos.d/路径下的所有repo配置文件移走确保/etc/yum.repos.d/这里没有其它文件2、下载配置阿里巴巴开源镜像站官网配置:https://developer.aliyun.com/mirror/在这个位置/etc/yum.repos.d/下载阿里云的yum源文件登陆…

vim基础使用

五、vim编辑器的使用 所有的Linux系统都默认有vi编译器,它就相当于Windows的记事本,当然,你也可以选择更好用的vim编译器,需要下载 yum install vim -y vim 有三种模式 使用vim filename wq!之后 这个命令如果filename不存在则 创建文件 [root@bogon opt]# vim zhanghaow…