千家信息网

MySQL+MMM 高可用集群部署(一)

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,一、MMM的功能特点MMM 即(Master-Master replication manager for MySQL)的简称,它是一套支持双主故障切换和双主日常管理的脚本程序,而MMM是用 Perl
千家信息网最后更新 2024年11月24日MySQL+MMM 高可用集群部署(一)

一、MMM的功能特点

MMM 即(Master-Master replication manager for MySQL)的简称,它是一套支持双主故障切换和双主日常管理的脚本程序,而MMM是用 Perl 语言所开发,其主要功能是:

第一、用来监控和管理 MySQL 数据库 主主复制(Master-Master),虽然是主主结构,但是由于数据库自身特性,在业务逻辑中,同一时刻,仅允许有一个主库写入,而另一个主库充当备份角色,一旦当前所使用的主库出现故障,将立马切换到另一个主库

第二、用来监控和管理 MySQL 数据库 主从复制(Master-Slave),而这里的主从复制,首先、从库的主要作用是进行 Read 负载均衡,其次,也充当备份角色。

MMM的优点:

1、开源免费、从产品面世到成型,经历了很长一段时间,有前辈们的成熟的技术支持

2、来源于 MySQL 内部,属于MySQL自己的技术

3、使用脚本控制管理,简单方便,易于理解

4、功能比较完善,自带各种牛X工具及套件

MMM的缺点:

1、由于 MMM 自身建构的局限性,只能有一个写入点,其扩展性在大型企业中将会是一个瓶颈。

2、对于读写分离、Read 负载均衡,其不能通过自身完成,需要企业自己手动处理,或者借助第三方软件完成。

二、MMM 架构解析

如上图拓扑

1、箭头方向代表数据流向

2、对于主主结构,我们需要在两台主数据库(主A 和 主B)中配置互为主从,当其中任意一台主库(比如主A)处于可写入状态时,另外一台主库(比如主B)将同步到它(主A)刚写入的数据,反之亦然。

3、对于主从结构,当前,主B属于主库,则需要配置 从A 和 从B 两台数据库做为 主B 的从库即可,无论是 主A 还是 主B ,有数据写入时,都会同步到 从A 和 从B 。如果,当前,主A 处于可写入状态,它首先会向 主B 进行数据同步,再由 主B 向 从A 和 从B 进行数据同步。这种结构在进行数据同步时,如果数据量较大(大型企业),将可能存在一定延时。

4、由 Monitor 监控服务器同时对 主A、主B、从A、从B 4台数据库进行监控及管理,这里指的是监控4台数据库的状态(服务可达、服务不可达状态,在生产环境中,数据库一旦出现故障,那将是灾难性的,影响企业命运的。所以,生产环境中,假如有4台数据库服务器:双主双从,4台数据库服务器不可能同时出现故障,亦或者说2台主数据库同样不可能同时出现故障。),如果说,当前正在写入的主数据库(主A)由于硬件故障或者服务奔溃出现故障,Monitor 服务器将会立马将虚拟 IP 192.168.20.254 切换到另外一台主数据库(主B),这期间的时间,十分短暂,客户基本不会有任何察觉,从库亦是如此。

5、对于读写分离,我们在进行应用服务部署过程中,会进行手动配置(或者借助第三方软件实现),虚拟写 IP :192.168.20.254,在单独配置虚拟 读IP:192.168.20.252、192.168.20.253,做读写分离,其主要目的是负载均衡,降低服务器压力。

三、主从同步配置详解

1、环境安装

a、数据库规划,这里我们安装4台MySQL数据库和1台Monitor服务器,配置如下:

b、虚拟IP规划:

c、修改服务器 hosts 文件,将下面的内容粘贴进去(注意,每台服务器都要添加):

192.168.20.134 masterA

192.168.20.128 masterB

192.168.20.129 slaveA

192.168.20.130 slaveB

192.168.20.131 cluster-proxy

[root@cluster-mysqla ~]# vim /etc/hosts

d、关闭firewalld:

[root@cluster-mysqla ~]# systemctl stop firewalld

[root@cluster-mysqla ~]# systemctl disable firewalld

e、关闭selinux

[root@cluster-mysqla ~]# setenforce 0

f、配置yum源和epel源

根据自己的需要进行配置,这里不进行赘述

g、服务器做时间同步

同步网络时间或者自己的时间服务器,这里不进行赘述

2、安装MySQL

关于MySQL的安装,请参考小弟我的另一篇文章:https://blog.51cto.com/4746316/2313577

3、配置MySQL

[root@cluster-mysqla ~]# vim /etc/my.cnf

[mysqld]

basedir = /usr/local/mysql
datadir = /wdata/mysql/data
tmpdir = /wdata/mysql/temp
plugin-dir = /usr/local/mysql/plugin
server_id = 1
socket = /wdata/mysql/data/mysql.sock
pid-file = /wdata/mysql/data/mysql.pid
explicit_defaults_for_timestamp = true
lower_case_table_names = 1
open_files_limit = 65535
event_scheduler = 1
log_slave_updates = 1

[root@cluster-mysqlb ~]# vim /etc/my.cnf

[mysqld]

basedir = /usr/local/mysql
datadir = /wdata/mysql/data
tmpdir = /wdata/mysql/temp
plugin-dir = /usr/local/mysql/plugin
server_id = 2
socket = /wdata/mysql/data/mysql.sock
pid-file = /wdata/mysql/data/mysql.pid
explicit_defaults_for_timestamp = true
lower_case_table_names = 1
open_files_limit = 65535
event_scheduler = 1
log_slave_updates = 1

[root@cluster-mysqlc ~]# vim /etc/my.cnf

[mysqld]

basedir = /usr/local/mysql
datadir = /wdata/mysql/data
tmpdir = /wdata/mysql/temp
plugin-dir = /usr/local/mysql/plugin
server_id = 3
socket = /wdata/mysql/data/mysql.sock
pid-file = /wdata/mysql/data/mysql.pid
explicit_defaults_for_timestamp = true
lower_case_table_names = 1
open_files_limit = 65535
event_scheduler = 1
log_slave_updates = 1

[root@cluster-mysqld ~]# vim /etc/my.cnf

[mysqld]

basedir = /usr/local/mysql
datadir = /wdata/mysql/data
tmpdir = /wdata/mysql/temp
plugin-dir = /usr/local/mysql/plugin
server_id = 4
socket = /wdata/mysql/data/mysql.sock
pid-file = /wdata/mysql/data/mysql.pid
explicit_defaults_for_timestamp = true
lower_case_table_names = 1
open_files_limit = 65535
event_scheduler = 1
log_slave_updates = 1


切记,在修改配置文件时,一定要加入级联复制选项(即:log_slave_updates = 1)

4、重启4台服务器的MySQL数据库

[root@cluster-mysqla ~]# service mysqld restart

5、配置MySQL主从同步

a、配置主主结构

在mastera、masterb数据库中创建主从同步所需要的用户

mysql> grant replication slave on *.* to slaveuser@"192.168.20.%" identified by "123456";

mastera

(1)、查看master状态

mysql> show master status;

(2)、设置主数据库信息,包括主数据库IP、主数据库用户名、主数据库密码、主数据库日志文件、主数据库日志文件偏移量

mysql> change master to master_host="192.168.20.128",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000007",master_log_pos=3766631;

(3)、启动从库

mysql> start slave;

(4)、查看从库状态

mysql> show slave status\G;

说明:

1、master_host:主数据库IP地址,这里设置问masterb的IP地址

2、master_log_file:主数据库的日志文件名称,通过在 masterb 中使用 show master status; 查询获得。

3、master_log_file:著数据库的日志文件偏移量,也通过在 masterb 中使用 show master status; 查询获得。

masterb

(1)、查看master状态

mysql> show master status;

(2)、设置主数据库信息,包括主数据库IP、主数据库用户名、主数据库密码、主数据库日志文件、主数据库日志文件偏移量

mysql> change master to master_host="192.168.20.134",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000005",master_log_pos=3766317;

(3)、启动从库

mysql> start slave;

(4)、查看从库状态

mysql> show slave status\G;

说明:

在执行完 show slave status\G; 命令时,我们会看到从库当前的详细信息,但是又三个地方需要特别注意,如下图:

1、Slave_IO_Running 和 Slave_SQL_Running 的值必须为 Yes ,否则将无法进行主从同步

Slave_IO_Running:I/O线程监控

Slave_SQL_Running:SQL线程监控

2、Master_UUID:这个值必须是唯一的,主数据库、从数据库的UUID不能相同,如果是克隆的服务器,这个UUID的值应该是相同的,此时,需要在MySQL数据目录下修改 auto.cnf 中的内容即可(不知 道怎么修改的,可随便改一位就行),如图:

[root@cluster-mysqlc data]# vim auto.cnf

3、Slave_SQL_Running_State 记录SQL线程的状态,一般当SQL线程为 NO 或者 Connecting 时,这里会提示出详细的错误原因,可根据这里的提示,进行排错。

4、Slave_IO_Running 值为 NO 时,一般为主数据库的 IP地址,用户名、密码设置有误,重新设置并重启 slave 可恢复正常。而 Slave_SQL_Running 值为 NO 或者为 Connecting 时,其出错原因比较丰富, 需要根据提示进行排错。

b、配置主从结构

按照前面主主结构的配置模式,分别在 slavea 和 slaveb 中MySQL命令行中执行下面语句:

mysql> change master to master_host="192.168.20.128",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000007",master_log_pos=3766631;

mysql> start slave;

mysql> show slave status\G;


c、验证主从同步

1、在 mastera 中创建games数据库,在其他数据库服务器中查看是否存在。

mysql> create database games;

2、在其他三台服务器中查看刚创建的数据库是否存在

masterb

slavea

slaveb

上三图表示,由mastera向其他三台数据库同步正常

3、在masterb 中创建用户mmmagent、monitor、discuz,在其他三台数据库服务器中查看是否存在

mysql> grant all privileges on *.* to mmmagent@"192.168.20.%" identified by "123456";

mysql> grant all privileges on *.* to monitor@"192.168.20.%" identified by "123456";

4、在其他三台服务器中查看刚创建的账号是否存在

mastera

slavea

slaveb

上三图表示,由masterb向其他三台数据库同步正常

主从同步到此,部署完成,下期,我们开始本章核心环节,MMM配置。


未完待续,下期再见,敬请期待。。。。。。




0