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这种高可用架构。

实验环境

主服务器1:192.168.52.135   db1     writer VIP:192.168.52.200
主服务器2:192.168.52.133   db2

从服务器1:192.168.52.134   db3     reader VIP:192.168.52.210,192.168.52.220
从服务器2:192.168.52.148   db4

监控服务器:192.168.52.150

实验操作

一、分别在四台MySQL服务器上安装mariadb服务

1、配置本地yum源(四台服务器上分别进行相同操作)

[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#配置aliyun源
--2019-11-25 09:51:39--  http://mirrors.aliyun.com/repo/Centos-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 124.14.2.219, 124.14.2.218, 124.14.2.234, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|124.14.2.219|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2523 (2.5K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/CentOS-Base.repo”

100%[====================================================================================>] 2,523       --.-K/s 用时 0s      

2019-11-25 09:51:39 (225 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])

[[email protected] ~]# yum -y install epel-release   #安装epel-release源
.......................//省略过程
[[email protected] ~]# yum clean all && yum makecache   #清除缓存旧的缓存,同步现在服务器的缓存
........................//省略过程

2、在主服务器1上安装mariadb(MySQL服务的一种)服务

[[email protected] ~]# hostnamectl set-hostname db1    #修改主机名
[[email protected] ~]# su   #切换bash环境
[[email protected] ~]#
[[email protected] ~]# yum install mariadb-server mariadb -y   #安装服务
....................//省略过程
[[email protected] ~]# vim /etc/my.cnf   #修改配置文件
[mysqld]
log_error=/var/lib/mysql/mysql.err
log=/var/lib/mysql/mysql_log.log
log_slow_queries=/var/lib/mysql_slow_queris.log
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=1
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
[[email protected] ~]# systemctl stop firewalld.service    #关闭防火墙
[[email protected] ~]# setenforce 0   #关闭增强性安全功能
[[email protected] ~]# systemctl start mariadb.service    #开启服务
[[email protected] ~]# netstat -ntap | grep 3306   #查看端口
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      4601/mysqld
[[email protected] ~]#

3、在主服务器2上安装mariadb服务

[[email protected] ~]# hostnamectl set-hostname db2
[[email protected] ~]# su
[[email protected] ~]#
[[email protected] ~]# yum install mariadb-server mariadb -y
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/mysql.err
log=/var/lib/mysql/mysql_log.log
log_slow_queries=/var/lib/mysql_slow_queris.log
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=2
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0
[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# netstat -ntap | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      50643/mysqld
[[email protected] ~]# 

4、在从服务器1上安装mariadb服务

[[email protected] ~]# hostnamectl set-hostname db3
[[email protected] ~]# su
[[email protected] ~]#
[[email protected] ~]# yum install mariadb-server mariadb -y

[[email protected] ~]# vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/mysql.err
log=/var/lib/mysql/mysql_log.log
log_slow_queries=/var/lib/mysql_slow_queris.log
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=11
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0
[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# netstat -ntap | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      50578/mysqld
[[email protected] ~]#

5、在从服务器2上安装mariadb服务

[[email protected] ~]# hostnamectl set-hostname db4
[[email protected] ~]# su
[[email protected] ~]#
[[email protected] ~]# yum install mariadb-server mariadb -y

[ro[email protected] ~]# vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/mysql.err
log=/var/lib/mysql/mysql_log.log
log_slow_queries=/var/lib/mysql_slow_queris.log
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=22
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0
[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# netstat -ntap | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      39804/mysqld
[[email protected] ~]# 

二、配置MySQL多主多从模式

1、分别查看主服务器1和主服务器2的log_bin日志和pos值的位置

主服务器1:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> show master status;   #查看状态
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000003 |      245 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)
主服务器2:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> show master status;   #查看状态
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000003 |      245 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)

2、主服务器1与主服务器2互相提升访问权限

主服务器1:
MariaDB [(none)]> grant replication slave on *.* to ‘replication‘@‘192.168.52.%‘ identified by ‘123456‘;
#提权
Query OK, 0 rows affected (0.01 sec)

主服务器2:
MariaDB [(none)]> grant replication slave on *.* to ‘replication‘@‘192.168.52.%‘ identified by ‘123456‘;
#提权
Query OK, 0 rows affected (0.01 sec)
主服务器1:
MariaDB [(none)]> change master to master_host=‘192.168.52.133‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;
#指定同步服务器的具体信息
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> start slave;   #开启同步
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show slave status\G;   #查看状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.52.133
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql_bin.000003
          Read_Master_Log_Pos: 575
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 694
        Relay_Master_Log_File: mysql_bin.000003
             Slave_IO_Running: Yes   #确认开启
            Slave_SQL_Running: Yes   #确认开启

             Master_Server_Id: 2
1 row in set (0.00 sec)

ERROR: No query specified
主服务器2:
MariaDB [(none)]> change master to master_host=‘192.168.52.135‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;
#指定同步服务器的具体信息
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> start slave;   #开启同步
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show slave status\G;   #查看状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.52.135
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql_bin.000003
          Read_Master_Log_Pos: 575
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 694
        Relay_Master_Log_File: mysql_bin.000003
             Slave_IO_Running: Yes   #确认开启
            Slave_SQL_Running: Yes   #确认开启

             Master_Server_Id: 1
1 row in set (0.00 sec)

ERROR: No query specified

3、测试主主同步

主服务器1:
MariaDB [(none)]> create database school;   #创建数据库school
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |   #创建成功
| test               |
+--------------------+
5 rows in set (0.00 sec)
主服务器2:
MariaDB [(none)]> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |    #同步成功
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> drop database school;   #删除数据库school
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show databases;   #查看数据库(删除成功)
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]>
主服务器1:
MariaDB [(none)]> show databases;   #查看数据库(同步成功)
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 

4、配置从服务器1、2作为主服务器1的从库

从服务器1:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> change master to master_host=‘192.168.52.135‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]>
从服务器2:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> change master to master_host=‘192.168.52.135‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000003‘,master_log_pos=245;
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> 

5、测试多主多从模式

主服务器1:
MariaDB [(none)]> create database myschool;   #创建数据库myschool
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myschool           |        #创建成功
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#
主服务器2:
MariaDB [(none)]> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myschool           |          #同步成功
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#
从服务器1:
MariaDB [(none)]> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myschool           |         #同步成功
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#
从服务器2:
MariaDB [(none)]> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myschool           |         #同步成功
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#

三、安装配置MySQL-MMM

1、四台MySQL服务器分别安装MMM


[[email protected] ~]# yum -y install mysql-mmm*
........//省略过程
[[email protected] ~]#

[[email protected] ~]# yum -y install mysql-mmm*
.......//省略过程
[[email protected] ~]# 

[[email protected] ~]# yum -y install mysql-mmm*
........//省略过程
[[email protected] ~]# 

[[email protected] ~]# yum -y install mysql-mmm*
.........//省略过程
[[email protected] ~]#

2、修改/etc/mysql-mmm/mmm_common.conf 配置文件

[[email protected] ~]# vim /etc/mysql-mmm/mmm_common.conf
<host default>
    cluster_interface       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
</host>

<host db1>
    ip      192.168.52.135
    mode    master
    peer    db2
</host>

<host db2>
    ip      192.168.52.133
    mode    master
    peer    db1
</host>

<host db3>
    ip      192.168.52.134
    mode    slave
</host>

<host db4>
    ip      192.168.52.148
    mode    slave
</host>

<role writer>
    hosts   db1, db2
    ips     192.168.52.200
    mode    exclusive
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.52.210, 192.168.52.220
    mode    balanced
</role>

3、将/etc/mysql-mmm/mmm_common.conf配置文件,推送到其它三个服务器

[[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]‘s password:
mmm_common.conf                                                                             100%  837     1.1MB/s   00:00
[[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]‘s password:
mmm_common.conf                                                                             100%  837     1.1MB/s   00:00
[[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]‘s password:
mmm_common.conf                                                                             100%  837   951.0KB/s   00:00    

4、在监控服务器monitor上配置本地yum源

[[email protected] ~]# hostnamectl set-hostname monitor
[[email protected] ~]# su
[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
--2019-11-25 11:40:39--  http://mirrors.aliyun.com/repo/Centos-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 124.14.2.222, 124.14.2.218, 124.14.2.234, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|124.14.2.222|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2523 (2.5K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/CentOS-Base.repo”

100%[====================================================================================>] 2,523       --.-K/s 用时 0s      

2019-11-25 11:40:39 (663 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])

[[email protected] ~]#
[[email protected] ~]# yum -y install epel-release
..........//省略过程
[[email protected] ~]# yum clean all && yum makecache
.........//省略过程
[[email protected] ~]# yum -y install mysql-mmm*
.........//省略过程

5、在主服务器1,将配置文件/etc/mysql-mmm/mmm_common.conf推送到monitor

[[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]‘s password:
mmm_common.conf                                                                             100%  837     1.4MB/s   00:00
[[email protected] ~]#

6、修改配置文件/etc/mysql-mmm/mmm_mon.conf

[[email protected] ~]# vim /etc/mysql-mmm/mmm_mon.conf
    ping_ips            192.168.52.135,192.168.52.133,192.168.52.134,192.168.52.148   #监控服务器IP
    auto_set_online     10
<host default>
    monitor_user        mmm_monitor   #用户名
    monitor_password    123456    #密码
</host>

7、分别在四台MySQL服务器授权monitor访问

主服务器1:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#
主服务器2:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#
从服务器1:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#
从服务器2:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.52.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye
[[email protected] ~]#

8、分别修改MySQL服务器的/etc/mysql-mmm/mmm_agent.conf文件

主服务器1:
[[email protected] ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires
# that ‘this‘ server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
this db1   #根据不同主机修改
[[email protected] ~]# systemctl start mysql-mmm-agent.service    #开启服务
[[email protected] ~]# systemctl enable mysql-mmm-agent.service   #开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql-mmm-agent.service to /usr/lib/systemd/system/mysql-mmm-agent.service.
[[email protected] ~]# 
主服务器2:
[[email protected] ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires
# that ‘this‘ server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
this db2   #根据不同主机修改
[[email protected] ~]# systemctl start mysql-mmm-agent.service    #开启服务
[[email protected] ~]# systemctl enable mysql-mmm-agent.service   #开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql-mmm-agent.service to /usr/lib/systemd/system/mysql-mmm-agent.service.
[[email protected] ~]#
从服务器1:
[[email protected] ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires
# that ‘this‘ server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
this db3   #根据不同主机修改
[[email protected] ~]# systemctl start mysql-mmm-agent.service    #开启服务
[[email protected] ~]# systemctl enable mysql-mmm-agent.service   #开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql-mmm-agent.service to /usr/lib/systemd/system/mysql-mmm-agent.service.
[[email protected] ~]#
从服务器2:
[[email protected] ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires
# that ‘this‘ server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
this db4   #根据不同主机修改
[[email protected] ~]# systemctl start mysql-mmm-agent.service    #开启服务
[[email protected] ~]# systemctl enable mysql-mmm-agent.service   #开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql-mmm-agent.service to /usr/lib/systemd/system/mysql-mmm-agent.service.
[[email protected] ~]#

四、测试MMM高可用

1、开启mysql-mmm-monitor.service

[[email protected] ~]# systemctl stop firewalld.service    #关闭防火墙
[[email protected] ~]# setenforce 0   #关闭增强性安全功能
[[email protected] ~]# systemctl start mysql-mmm-monitor.service    #开启服务
[[email protected] ~]# mmm_control show   #测试群集
  db1(192.168.52.135) master/ONLINE. Roles: writer(192.168.52.200)
  db2(192.168.52.133) master/ONLINE. Roles:
  db3(192.168.52.134) slave/ONLINE. Roles: reader(192.168.52.220)
  db4(192.168.52.148) slave/ONLINE. Roles: reader(192.168.52.210)

2、检查群集(全部ok)

[[email protected] ~]# mmm_control checks all
db4  ping         [last change: 2019/11/25 12:15:00]  OK
db4  mysql        [last change: 2019/11/25 12:15:00]  OK
db4  rep_threads  [last change: 2019/11/25 12:15:00]  OK
db4  rep_backlog  [last change: 2019/11/25 12:15:00]  OK: Backlog is null
db2  ping         [last change: 2019/11/25 12:15:00]  OK
db2  mysql        [last change: 2019/11/25 12:15:00]  OK
db2  rep_threads  [last change: 2019/11/25 12:15:00]  OK
db2  rep_backlog  [last change: 2019/11/25 12:15:00]  OK: Backlog is null
db3  ping         [last change: 2019/11/25 12:15:00]  OK
db3  mysql        [last change: 2019/11/25 12:15:00]  OK
db3  rep_threads  [last change: 2019/11/25 12:15:00]  OK
db3  rep_backlog  [last change: 2019/11/25 12:15:00]  OK: Backlog is null
db1  ping         [last change: 2019/11/25 12:15:00]  OK
db1  mysql        [last change: 2019/11/25 12:15:00]  OK
db1  rep_threads  [last change: 2019/11/25 12:15:00]  OK
db1  rep_backlog  [last change: 2019/11/25 12:15:00]  OK: Backlog is null

[[email protected] ~]#

3、切换writer为db2

[[email protected] ~]# mmm_control move_role writer db2
OK: Role ‘writer‘ has been moved from ‘db1‘ to ‘db2‘. Now you can wait some time and check new roles info!
[[email protected] ~]# mmm_control show
  db1(192.168.52.135) master/ONLINE. Roles:
  db2(192.168.52.133) master/ONLINE. Roles: writer(192.168.52.200)
  db3(192.168.52.134) slave/ONLINE. Roles: reader(192.168.52.220)
  db4(192.168.52.148) slave/ONLINE. Roles: reader(192.168.52.210)

[[email protected] ~]#

4、在monitor安装mariadb服务

[[email protected] ~]# yum install mariadb-server mariadb -y
.......//省略过程
[[email protected] ~]#

5、分别在主服务器1授权monitor访问

主服务器1:
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 464
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> grant all on *.* to ‘testdb‘@‘192.168.52.150‘ identified by ‘123456‘;   #授权
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> 

6、用monitor登录主服务器虚拟IP

[[email protected] ~]# mysql -u testdb -p123456 -h 192.168.52.200
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 584
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myschool           |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> 

7、关闭主服务器1的MySQL服务

[[email protected] ~]# systemctl stop mariadb.service
[[email protected] ~]# 

8、在monitor服务器上删除数据库myschool

monitor:
MariaDB [(none)]> drop database myschool;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]>

9、分别查看三个没有关闭的服务器数据库

主服务器2:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 
从服务器1:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 
从服务器2:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 

10、重启主服务器1的MySQL服务,查看数据库

[[email protected] ~]# systemctl stop mariadb.service
[[email protected] ~]#
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 464
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (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)]> show databases;   #查看数据库(同步成功)
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 

原文地址:https://blog.51cto.com/14449541/2458739

时间: 2024-10-12 07:21:33

MySQL数据库——MMM高可用群集配置(实战!)的相关文章

MySQL数据库——MMM高可用群集架构

概念 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的). MMM高可用架构说明 mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动.此脚本需要在监管机上运行. mmm_agentd:运行在每个mysql服务器上的代理

MySQL数据库---MHA高可用群集架构

MHA概述 日本DeNA公司youshimaton (现就职于Facebook公司) 开发 一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件 MHA的组成 MHA Manager (管理节点) MHA Node (数据节点) MHA特点 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失 使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险 实验思路 1.MHA架构 (1)数据库安装 (2)一主两从 (3)MHA搭建 2.故障

基于mysql-mmm实现MySQL数据库的高可用

MMM简介 MMM(Master-Master Replication Manager for MySQL)MySQL主主复制管理器,实现了对MySQL双主复制架构的监控,故障转移和管理.mysql-mmm在实现过程中提供了多个虚拟IP,包括用于写操作的虚拟IP和用于读操作的虚拟IP.在双主复制架构中仅有其中的一台主节点可用于写操作,所有节点包括从节点对外提供读操作.当其中的一个从节点故障时,它持有的虚拟IP会自动转移至其他节点上.若故障的是主节点,它持有的写操作的虚拟IP和读操作的虚拟IP都会

MySQL数据库的优化(下)MySQL数据库的高可用架构方案

MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQL数据库的优化,今天我们继续跟随笔者学习MySQL优化的集群方案. AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿! [51CTO独家特稿]在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQL数据库的优化,今天我们继续跟随笔者学习MySQL优化的集群方案. M

Keepalived+Mysql互为主从高可用安装配置

Keepalived+Mysql互为主从高可用安装配置环境介绍:keepalived_vip=192.168.1.210    (写虚拟ip)mysql_master01      eth0:192.168.1.211  eth1:172.20.27.211 (1核1G)mysql_master02      eth0:192.168.1.212  eth1:172.20.27.212 (1核1G) 1.安装mysql数据库(所有节点安装)  //此处省略安装mysql服务2.编辑my.cnf配

MySQL数据库——MHA高可用集群架构(实战!!!)

MHA 简介 (1)简介 目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. (2)该软件由两部分组成 MHA Manager(管理节点)和MHA Node(数据节点)

mysql的MMM高可用方案

1    MMM高可用mysql方案 1.1  方案简介 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份.节点之间重新同步功能的脚本.MySQL本身没有提供replic

MMM高可用群集

MMM概述 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器.虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实

mysql之MMM高可用方案简介

MMM(Master-Master Replication Manager for MySQL) MySQL主主复制管理器,提供了MySQL主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件.在MMM高可用解决方案中,典型的应用是双主多从架构,通过MySQL replication技术可以实现两台服务器互为主从,且在任何时候只有一个节点可以写入,避免多点写入的数据冲突.同时,当可写的主节点故障时,MMM套件可以立刻监控到,然后将服务自动切换到另一个主节点,继续提供服务,从而实现MySQL的