超详细MySQL主主复制+MMM实现高可用

简介

MMM(Master-Master Replication Manager for MySQL, MySQL主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置。注意同一时间只有一个节点是可写。MMM的监管端会提供多个虚拟IP(VIP)包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,会将VIP迁移至其他mysql。
超详细MySQL主主复制+MMM实现高可用

mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行;
mmm_agentd:运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行;
mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令

实验环境

主机名称 操作系统 IP地址 虚拟IP 主要软件 网络连接模式
master01 CentOS_7.4_x86_64 192.168.100.71 192.168.100.100 mariadb、mysql-mmm NAT
master02 CentOS_7.4_x86_64 192.168.100.72 192.168.100.100 mariadb、mysql-mmm NAT
monitor、客户端 CentOS_7.4_x86_64 192.168.100.73 mariadb、mysql-mmm NAT
slave01 CentOS_7.4_x86_64 192.168.100.74 192.168.100.102 mariadb、mysql-mmm NAT
slave02 CentOS_7.4_x86_64 192.168.100.75 192.168.100.101 mariadb、mysql-mmm NAT

准备工作

一、准备工作

1、编辑主机名

[root@localhost ~]# hostnamectl set-hostname master01
[root@localhost ~]# hostnamectl set-hostname master02
[root@localhost ~]# hostnamectl set-hostname monitor
[root@localhost ~]# hostnamectl set-hostname slave01
[root@localhost ~]# hostnamectl set-hostname slave02
[root@localhost ~]# bash

2、三台主机关闭防火墙及selinux

[root@master01 ~]# systemctl stop firewalld.service
[root@master01 ~]# systemctl disable firewalld.service
[root@master01 ~]# vim /etc/sysconfig/selinux
超详细MySQL主主复制+MMM实现高可用

3、重启服务

[root@master01 ~]# reboot

一、搭建、配置mysql01主服务器

1、配置本地yum源

[root@master01 ~]# cd /etc/yum.repos.d/
[root@master01 yum.repos.d]# mkdir bak #创建备份目录
[root@master01 yum.repos.d]# mv CentOS-* bak/ #将系统yum源仓库进行备份

[root@master01 yum.repos.d]# vim local.repo#创建自建yum源

#添加以下参数:
[local]                           #容器名称
name=local                  #容器说明
baseurl=file:///mnt/sr0  #yum源地址即挂载点
gpgcheck=0                 #"0"代表rpm数字证书验证不生效
enabled=1                    #"1"代表此容器生效

[root@master01 ~]# mkdir /mnt/sr0/
[root@master01 ~]# mount /dev/sr0 /mnt/sr0/ #挂载光盘
超详细MySQL主主复制+MMM实现高可用

2、安装epel源

[root@master01 ~]# yum -y install wget #wget命令用来从指定的URL下载文件
[root@master01 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #将官网的yum源下载至本地网络yum源
[root@master01 ~]# yum -y install epel-release #下载epel源扩展
[root@master01 ~]# cat /etc/yum.repos.d/epel.repo
超详细MySQL主主复制+MMM实现高可用

3、替换镜像源

[root@master01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #将epel源的服务器IP地址换成阿里

4、五台主机安装相关软件包

[root@master01 ~]# yum -y install mariadb-server mariadb mysql-mmm*

#解析:
mysql-mmm*:主主复制管理器
mariadb:客户端
mariadb-server:服务器端

5、修改mariadb配置文件

[root@master01 ~]# 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/mysql_slow_queris.log    #慢查询日志路径
binlog-ignore-db=mysql,information_schema                #不需要同步的数据库名称
character_set_server=utf8                                #设置默认字符集
log_bin=mysql_bin                                        #启用二进制的日志 !!!!!主从复制核心
server_id=1                                              #服务器id,方便区分,注意每台机子id都不一样
log_slave_updates=true                                   #允许从服务器进行日志更新
sync_binlog=1                                            #允许从服务器同步二进制日志
auto_increment_increment=2                               #字段一次递增多少
auto_increment_offset=1                                  #自增字段的起始值:1,3,5,7……等奇数ID
[client]
default_character_set=utf8                               #设置默认字符集

6、启动mysql服务器

[root@master01 ~]# systemctl start mariadb.service
[root@master01 ~]# netstat -anpt | grep ':3306'
超详细MySQL主主复制+MMM实现高可用

7、设置初始密码

[root@master01 ~]# mysqladmin -uroot password '123'

二、搭建、配置其余三台数据库服务器

其他服务器安装和master01服务器安装相同,安装过程,略……

1、master01服务器上传配置文件

!!!!!!!!!!!一定要注意配置文件参数其他都是一样,server-id一定要改成不一样的

[root@master01 ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[root@master01 ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[root@master01 ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf

三、配置mysql主主复制

1、配置master01服务器

[root@master02 ~]# mysql -u root -p123 -e "show master status;" #查看master02服务器状态
超详细MySQL主主复制+MMM实现高可用

[root@master01 ~]# mysql -u root -p123 #登陆mariadb
MariaDB [(none)]> grant replication slave on . to 'replication'@'192.168.100.%' identified by '123456';
#授权从服务器复制权限

MariaDB [(none)]> change master to master_host='192.168.100.72',master_user='replication',master_password='123456', master_log_file='mysql_bin.000001',master_log_pos=388;
#指定master02服务器为主服务器

2、配置master02服务器

MariaDB [(none)]> show master status; #查看master01服务器状态
超详细MySQL主主复制+MMM实现高可用

[root@master02 ~]# mysql -u root -p123 #登陆mariadb
MariaDB [(none)]> grant replication slave on . to 'replication'@'192.168.100.%' identified by '123456';

MariaDB [(none)]> change master to master_host='192.168.100.71',master_user='replication',master_password='123456', master_log_file='mysql_bin.000006',master_log_pos=554;
#指定master02服务器为主服务器

3、开启两台主主服务器同步功能

MariaDB [(none)]> start slave;

4、查看同步结果

MariaDB [(none)]> show slave status\G; #查看master01服务器状态
超详细MySQL主主复制+MMM实现高可用

MariaDB [(none)]> show slave status\G; #查看master02服务器状态
超详细MySQL主主复制+MMM实现高可用

四、配置slave01、slave02作为master01的从库

1、查看master01服务器二进制日志文件名称以及位置

[root@master01 ~]# mysql -u root -p -e "show master status;"
超详细MySQL主主复制+MMM实现高可用

2、设置slave01作为master01的从库

[root@slave01 ~]# mysql -uroot -p
MariaDB [(none)]> change master to master_host='192.168.100.71',master_user='replication',master_password='123456', master_log_file='mysql_bin.000006',master_log_pos=720;
#指定master01作为主服务器
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
超详细MySQL主主复制+MMM实现高可用

3、再次查看master01服务器状态

超详细MySQL主主复制+MMM实现高可用

4、设置slave02作为master01的从库

[root@slave01 ~]# mysql -uroot -p
MariaDB [(none)]> change master to master_host='192.168.100.71',master_user='replication',master_password='123456', master_log_file='mysql_bin.000006',master_log_pos=720;
#指定master01作为主服务器
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
超详细MySQL主主复制+MMM实现高可用

五、测试主主同步、主从同步

1、master01服务器创建测试数据

[root@master01 ~]# mysql -uroot -p
MariaDB [(none)]> create database test_db;
超详细MySQL主主复制+MMM实现高可用

2、查看其他三台数据库服务器

超详细MySQL主主复制+MMM实现高可用

超详细MySQL主主复制+MMM实现高可用

超详细MySQL主主复制+MMM实现高可用

六、配置MySQL-MMM

1、五台主机编辑common配置文件

[root@master01 ~]# cd /etc/mysql-mmm/
[root@master01 mysql-mmm]# vim mmm_common.conf

#添加、编辑以下参数:
active_master_role      writer
<host default>  #编辑主机默认设置
    cluster_interface       ens33                    #群集接口,这里用的是CentOS7,修改自己对应的网卡名称
    pid_path                /run/mysql-mmm-agent.pid #运行agent保存的pid位置
    bin_path                /usr/libexec/mysql-mmm/  #可执行命令
    replication_user        replication              #Mariadb给予权限的用户           
    replication_password    123456                   #Mariadb给予权限的用户密码
    agent_user              mmm_agent                #agent客户端代理用户(需要在所有mysql服务器上设置)
    agent_password          123456                   #agent客户端代理用户密码
</host>

<host db1>  #第一个数据库
    ip      192.168.100.71       
    mode    master
    peer    db2 #db1和db2数据库是一对,互相切换
</host>

<host db2>  #第二个数据库
    ip      192.168.100.72
    mode    master
    peer    db1
</host>

<host db3>  #第三个数据库(第一个从数据库)
    ip      192.168.100.74
    mode    slave
</host>

<host db4>  #第四个数据库(第二个从数据库)
    ip      192.168.100.75
    mode    slave
</host>

<role writer> #设置主服务器角色(写操作)
    hosts   db1, db2
    ips     192.168.100.100 #指定虚拟IP
    mode    exclusive #指定模式,db1和db2只能存在一个IP地址,只能有一台主机进行写入操作
</role>

<role reader> #设置从服务器角色(读操作)
    hosts   db3,db4
    ips     192.168.100.101, 192.168.100.102 #指定虚拟IP
    mode    balanced  #负载均衡,读取操作会从db3、db4主机进行
</role>

2、将common配置文件上传至其他4台主机上

[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[root@master01 mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/

3、monitor服务器编辑mmm_mon.conf文件

[root@monitor ~]# cd /etc/mysql-mmm/
[root@monitor mysql-mmm]# vim mmm_mon.conf

<host default>
    monitor_user        mmm_monitor
    monitor_password    123456 #修改密码,方便mysql授权
</host>

4、四台数据库服务器授权agent、monitor

[root@master01 ~]# mysql -u root -p
#授权agent
mysql> grant super,replication client,process on . to 'mmm_agent'@'192.168.100.%' identified by '123456';
#授权monitor
mysql> grant replication client on . to 'mmm_monitor'@'192.168.100.%' identified by '123456';
#刷新权限
mysql> flush privileges;

5、修改agent文件

[root@master01 ~]# cd /etc/mysql-mmm/
[root@master01 mysql-mmm]# vim mmm_agent.conf
超详细MySQL主主复制+MMM实现高可用

6、五台服务器启动agent服务

[root@master01 ~]# systemctl start mysql-mmm-agent.service
[root@master01 ~]# systemctl enable mysql-mmm-agent.service

7、monitor服务器编辑mmm_mon文件

[root@monitor ~]# cd /etc/mysql-mmm/
[root@monitor mysql-mmm]# vim mmm_mon.conf

#编辑以下参数
ping_ips            192.168.100.71,192.168.100.72,192.168.100.74,192.168.100.75  #约第8行,添加所有数据库IP地址
auto_set_online     10   #约第9行,代表10秒钟上线

8、monitor服务器启动mmm

[root@monitor ~]# systemctl start mysql-mmm-monitor.service
[root@monitor ~]# mmm_control show
超详细MySQL主主复制+MMM实现高可用

[root@monitor ~]# mmm_control checks all
超详细MySQL主主复制+MMM实现高可用

[root@monitor ~]# mmm_control move_role writer db2 #指定db2服务器绑定虚拟IP
[root@monitor ~]# mmm_control show
超详细MySQL主主复制+MMM实现高可用

七、模拟故障

1、宕掉master01服务器

[root@monitor ~]# mmm_control move_role writer db1 #指定db1服务器绑定虚拟IP
[root@master01 ~]# systemctl stop mariadb.service
[root@monitor ~]# mmm_control show
超详细MySQL主主复制+MMM实现高可用

2、恢复master01绑定虚拟IP

[root@master01 ~]# systemctl start mariadb.service
[root@monitor ~]# mmm_control move_role writer db1
[root@monitor ~]# mmm_control show
超详细MySQL主主复制+MMM实现高可用

3、宕掉slave01服务器

[root@slave01 ~]# systemctl stop mariadb.service
[root@monitor ~]# mmm_control show
超详细MySQL主主复制+MMM实现高可用

4、恢复slave01绑定虚拟IP

[root@slave01 ~]# systemctl start mariadb.service
[root@monitor ~]# mmm_control show
超详细MySQL主主复制+MMM实现高可用

猜你喜欢

转载自blog.51cto.com/11905606/2171900