MySQL高可用MMM架构的搭建
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,如何搭建MySQL高可用MMM架构?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。MMM高可用架构MMM(Master-Master replicati
千家信息网最后更新 2025年01月31日MySQL高可用MMM架构的搭建
如何搭建MySQL高可用MMM架构?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。
MMM高可用架构
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。对于那些对数据的一致性要求很高的业务,非常不建议采用MMM这种高可用架构。
MMM架构图:
MMM这种模式,master,slaver容易被控死,两个就两个
MHA模式,有高可扩展性,一主双备,一个区域。再扩展一主双备,一个区域
都要安装node
首先我们开五台虚拟机,做规划
主服务器1 192.168.136.191 db1
主服务器2 192.168.136.168 db2
从服务器1 192.168.136.185 db3
从服务器2 192.168.136.184 db4
监控服务器 192.168.136.135
配置阿里云源。每台服务器都要装
wget -O /etc/yum.repos.d/CentOS-Base.repo httP://mirrors.aliyun.com/repo/Centos-7.repo
安装epel-release源,每台服务器都要装
yum -y install epel-releaseyum clean all && yum makecache
搭建本地YUM源,所有服务器都要装,除了监控服务器
yum install mariadb-server mariadb -y`
修改主配置文件,出来监控服务器其他四台都要修改。复制,粘贴就行。
vim /etc/my.cnf9dd[mysqld]log_error=/var/lib/mysql/mysql.errlog=/var/lib/mysql/mysql_log.loglog_slow_queries=/var/lib/mysql_slow_queries.logbinlog-ignore-db=mysql,information_schemacharacter_set_server=utf8log_bin=mysql_binserver_id=1 #注意每台id都要是不一样的log_slave_updates=truesync_binlog=1auto_increment_increment=2auto_increment_offset=1
每台服务器都要关防火墙,增强功能,开启数据库
systemctl stop firewalld.service setenforce 0systemctl start mariadb.service
[root@localhost ~]# mysql #进入M1数据库 进入M1服务器查看日志文件的名称和位置值MariaDB [(none)]> show master status; #查看日志文件的名称和位置值+------------------+----------+--------------+--------------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+--------------------------+| mysql_bin.000003 | 245 | | mysql,information_schema |+------------------+----------+--------------+--------------------------+
进入M2服务器查看日志文件的名称和位置值
MariaDB [(none)]> show master status;+------------------+----------+--------------+--------------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+--------------------------+| mysql_bin.000003 | 245 | | mysql,information_schema |+------------------+----------+--------------+--------------------------+
两台主服务器都执行,给予权限
grant replication slave on *.* to 'replication'@'192.168.136.%' identified by '123456';`
M1服务器指向M2的服务器,地址,日志文件名称,位置参数
change master to master_host='192.168.136.168',master_user='relication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
M2服务器指向M1的服务器,地址,日志文件名称,位置参数
change master to master_host='192.168.136.167',master_user='relication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;#两台服务器都执行开启同步数据MariaDB [(none)]> slave start;#两台主服务器都执行,查看同步数据的状态MariaDB [(none)]> show slave status\G;#看到下面的IO线程和状态都是YES就是正确了 Slave_IO_Running: Yes Slave_SQL_Running: Yes#我们测试一下两个主服务器是否能同步数据M1创建数据一个数据库MariaDB [(none)]> create database myschool;Query OK, 1 row affected (0.00 sec)M2MariaDB [(none)]> show databases; +--------------------+| Database |+--------------------+| information_schema || myschool || mysql || performance_schema || test |+--------------------+5 rows in set (0.00 sec)
------------------------------------------从服务器同步数据---------------------------------------
#s1和s2从服务器[root@localhost ~]# mysql#都指向M1主服务器的地址,日志文件和参数MariaDB [(none)]> change master to master_host='192.168.136.191',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;#在M1创建一个数据库MariaDB [(none)]> create database school;Query OK, 1 row affected (0.00 sec)#其他三台服务器都有这个数据库MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || school || test |+--------------------+#所有服务器都要装mmm源码包yum -y install mysql-mmm*#到第一台主服务器开始配置[root@localhost ~]# cd /etc/mysql-mmm/[root@localhost mysql-mmm]# lsmmm_agent.conf mmm_common.conf mmm_mon.conf mmm_mon_log.conf mmm_tools.conf[root@localhost mysql-mmm]# vim mmm_common.conf cluster_interface ens33 #网卡是ens33 pid_path /run/mysql-mmm-agent.pid bin_path /usr/libexec/mysql-mmm/ replication_user replication #用户 replication_password 123456 #我们设置的密码 agent_user mmm_agent agent_password 123456 #代理密码 ip 192.168.136.191 #主服务器1地址 mode master peer db2 ip 192.168.136.168 #主服务器2地址 mode master peer db1 ip 192.168.136.185 #从服务器1地址 mode slave ip 192.168.136.184 #从服务器2地址 mode slave hosts db1, db2 ips 192.168.136.200 #主服务的虚拟地址,可以漂移 mode exclusive hosts db3, db4 ips 192.168.136.210, 192.168.136.220 #从服务器1和2的虚拟地址 mode balanced
用scp把文件传给其他服务器
scp mmm_common.conf root@192.168.136.168:/etc/mysql-mmm/scp mmm_common.conf root@192.168.136.185:/etc/mysql-mmm/scp mmm_common.conf root@192.168.136.184:/etc/mysql-mmm/scp mmm_common.conf root@192.168.136.135:/etc/mysql-mmm/
配置监控服务器账号
[root@localhost mysql-mmm]# vim mmm_mon.conf ping_ips 192.168.136.191,192.168.136.168,192.168.136.185,192.168.136.184 输入你所有的地址 auto_set_online 10 #自带上线时间为10smonitor_password 123456 #修改密码为123456在所有数据库给mmm_agent授权grant super, replication client, process on *.* to 'mmm_agent'@'192.168.136.%' identified by '123456';grant replication client on *.* to 'mmm_monitor'@'192.168.136.%' identified by '123456';
对应着修改配置文件(M2,S1,S2)
[root@localhost mysql-mmm]# vim mmm_agent.confthis db2this db3this db4systemctl start mysql-mmm-agent.service systemctl enable mysql-mmm-agent.service#回到监控服务器systemctl start mysql-mmm-monitor.service
查看各节点的情况
[root@localhost mysql-mmm]# mmm_control show db1(192.168.136.191) master/ONLINE. Roles: writer(192.168.136.200) db2(192.168.136.168) master/ONLINE. Roles: db3(192.168.136.185) slave/ONLINE. Roles: reader(192.168.136.220) db4(192.168.136.184) slave/ONLINE. Roles: reader(192.168.136.210)#更改绑定的虚拟地址[root@localhost mysql-mmm]# mmm_control move_role writer db2#测试监控服务器功能是否完善[root@localhost mysql-mmm]# mmm_control checks alldb4 ping [last change: 2019/11/25 16:38:25] OKdb4 mysql [last change: 2019/11/25 16:38:25] OKdb4 rep_threads [last change: 2019/11/25 16:38:25] OKdb4 rep_backlog [last change: 2019/11/25 16:38:25] OK: Backlog is nulldb2 ping [last change: 2019/11/25 16:38:25] OKdb2 mysql [last change: 2019/11/25 16:38:25] OKdb2 rep_threads [last change: 2019/11/25 16:38:25] OKdb2 rep_backlog [last change: 2019/11/25 16:38:25] OK: Backlog is nulldb3 ping [last change: 2019/11/25 16:38:25] OKdb3 mysql [last change: 2019/11/25 16:38:25] OKdb3 rep_threads [last change: 2019/11/25 16:38:25] OKdb3 rep_backlog [last change: 2019/11/25 16:38:25] OK: Backlog is nulldb1 ping [last change: 2019/11/25 16:38:25] OKdb1 mysql [last change: 2019/11/25 16:38:25] OKdb1 rep_threads [last change: 2019/11/25 16:38:25] OKdb1 rep_backlog [last change: 2019/11/25 16:38:25] OK: Backlog is null[root@localhost mysql-mmm]# mmm_control move_role writer db1OK: Role 'writer' has been moved from 'db2' to 'db1'. Now you can wait some time and check new roles info![root@localhost mysql-mmm]# mmm_control show db1(192.168.136.191) master/ONLINE. Roles: writer(192.168.136.200) db2(192.168.136.168) master/ONLINE. Roles: db3(192.168.136.185) slave/ONLINE. Roles: reader(192.168.136.220) db4(192.168.136.184) slave/ONLINE. Roles: reader(192.168.136.210)#第一台主服务器关闭数据库模拟故障[root@localhost mysql-mmm]# systemctl stop mariadb.service#回到监控服务器测试,虚拟网址就变更了[root@localhost mysql-mmm]# mmm_control show db1(192.168.136.191) master/HARD_OFFLINE. Roles: db2(192.168.136.168) master/ONLINE. Roles: writer(192.168.136.200) db3(192.168.136.185) slave/ONLINE. Roles: reader(192.168.136.220) db4(192.168.136.184) slave/ONLINE. Roles: reader(192.168.136.210)#再把第一台主服务器开启数据库[root@localhost mysql-mmm]# systemctl start mariadb.service#在回到监控服务器查看主服务器状态[root@localhost mysql-mmm]# mmm_control show db1(192.168.136.191) master/ONLINE. Roles: db2(192.168.136.168) master/ONLINE. Roles: writer(192.168.136.200) db3(192.168.136.185) slave/ONLINE. Roles: reader(192.168.136.220) db4(192.168.136.184) slave/ONLINE. Roles: reader(192.168.136.210)#监控服务器[root@localhost mysql-mmm]# yum install mariadb-server mariadb -y#再M1服务器为监控器地址授权登录MariaDB [(none)]> grant all on *.* to 'testba'@'192.168.136.135' identified by '123456';MariaDB [(none)]> flush privileges;
回到监控服务器测试一下能不能登录
mysql -utestdba -p -h 192.168.136.200Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 2562Server version: 5.5.64-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>
创建一个表格再去其他服务器查看数据有没有被同步
MariaDB [(none)]> create database chen;Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || chen || mysql || performance_schema || school || test |+--------------------+6 rows in set (0.01 sec)
到此为止,MySQL高可用MMM架构就搭建成功了,如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道。
服务
服务器
数据
监控
地址
文件
数据库
同步
配置
日志
架构
位置
故障
脚本
功能
测试
管理
一致
一致性
业务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全行业十四五规划
电话语音服务器
农业局网络安全工作
靖江进口网络技术价格表格
网络安全知多少手抄报怎么写
发那科a06b服务器报9
区块链和数据库技术是什么
金蝶财务管理软件开发
数据库操作记录
网络技术post什么意思
软件开发岗位角色sa
工厂管理服务器
杭州计算机网络技术
网络安全法应该做什么
廊坊网络安全问题集中约谈会议
数据库技术试题与答案
网络安全两类密码体制
阳江微信小程序软件开发
go语言网络安全
数据库 复制列
医疗器械网络安全模板
树莓派数据上传数据库
京东金融网络安全吗
金蝶数据库保存pdf文件
厦门网络技术代理方法
服务器跑包
目录搜索引擎有数据库吗
阿里云dns服务器异常
达尼亚网络技术有限公司
未来之役服务器列表