一, MMM 简介
1,MMM(Master-Master replication manager for MySQL,MySQL 主主复制管理器) 是一套支持双主故障切换和双主日常管理的脚本程序.
2,MMM 是一套灵活的脚本程序, 基于 perl 实现, 用来对 MySQL replication 进行监控和故障转移, 并能管理 MySQL Master-Master 复制的配置.
3, 关于 MMM 高可用架构的说明如下:
(1)mmm-mon: 监控进程, 负责所有的监控工作, 决定和处理所有节点角色活动. 此脚本需要在监管机上运行.
(2)mmm-agent: 运行在每个 MySQL 服务器上的代理进程, 完成监控的探针工作和执行简单的远端服务设置. 此脚本需要在被监管机上运行.
(3)mmm-control: 一个简单的脚本, 提供 mmm_mond 进程的命令.
(4)MySQL-mmm 的监管端会提供多个虚拟 IP(VIP), 包括一个可写 VIP, 多个可读 VIP, 通过监管的管理, 这些 IP 会绑定在可用 MySQL 之上, 当某一台 MySQL 宕机时, 监管会将 VIP 迁移至其他 MySQL.
二, 系统环境
1, 两台 CentOS 7 作为主服务器 (master1 和 master2), 对应的 IP 地址为: 192.168.80.100 和 192.168.80.110
2, 两台 CentOS 7 作为从服务器 (slave1 和 slave2), 对应的 IP 地址为: 192.168.80.120 和 192.168.80.130
3, 一台 CentOS 7 作为监控主机 (monitor), 对应的 IP 地址为: 192.168.80.140
4, 所有虚拟机绑定同一块网卡 (vnet1), 并且添加桥接网卡后安装 epel 源和 MMM.
5,MMM 高可用架构如下图:
三, 实验部署
1, 搭建阿里源仓库安装 epel 源 (五台都要配置)
- yum install wget -y // 安装 wget 下载命令
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo // 将本地的 yum 源仓库改成阿里源仓库
- yum -y install epel-release // 安装 epel 源
- yum clean all && yum makecache // 清除 yum 仓库并且生成元数据缓存
2, 安装和配置数据库
- yum -y install mariadb-server mariadb // 四台数据库服务器上分别安装 MySQL
- vi /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
- sync_binlog=1
- auto_increment_increment=2
- auto_increment_offset=1
- scp /etc/my.cnf root@192.168.80.110:/etc/ // 将主配置文件远程复制到其他 3 太数据库服务器上
- scp /etc/my.cnf root@192.168.80.120:/etc/
- scp /etc/my.cnf root@192.168.80.130:/etc/
注意: 另外三台只需将主配置文件中的 serverid 修改成不一样就 ok
systemctl restart mariadb // 四台数据库服务器分别重启
3, 配置主主复制 (master1 和 master2 相互复制)
- MySQL // 进入数据库
- show master status; // 记录日志文件名称和 位置值, 分别在两台主上查看.
注意: 由于我的两台数据库都是纯净的没有执行任何操作, 因此二进制日志文件和位置变量都是一样的, 但是性质却不相同, 一个对应的主服务器 master1, 一个对应的是主服务器 2.
- grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456'; // 两台主服务器互相授权连接
- change master to master_host='192.168.80.110',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245; //master1 指定 master2 的地址和对应的二进制日志文件和位置变量
- change master to master_host='192.168.80.100',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245; //master2 指定 master1 的地址和对应的二进制日志文件和位置变量
- start slave; // 分别开启复制功能
- show slave status; // 分别查看状态
在 m1 上查看
在 m2 上查看
注意: 其中位置偏移量会发生改变, 只要保证 SlaveIORunning: Yes 和 SlaveSQLRunning: Yes 就 ok!
验证主主同步
- create database dba; // 在另一台主上可以看到
- drop database dba; // 在主上删除后, 另一台主上也没有了, 同步成功.
4, 配置主从复制 (slave1 和 slave2 分别指向两台主中的任意一台)
- show master status ; // 在 master1 上再次查看日志状态
- change master to master_host='192.168.80.100',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=745; // 分别在从服务器上指定主服务器的 IP 地址, 以及对应的二进制日志文件和位置变量
- start slave; // 开启复制功能
- show slave status\G // 在两台从服务器上分别查看复制状态
验证主从复制
- create database abc; // 两台主中任意一台创建
- show databases; // 在两台从服务器上分别查看
5, 安装 MMM(五台服务器都要装)
- yum -y install MySQL-mmm-agent // 在四台数据库服务器上安装代理端
- yum -y install MySQL-mmm-monitor // 在另外一台空机器上安装监视器
(1) 配置 mmm_common.conf(五台都要配置包括监视器)
vi /etc/MySQL-mmm/mmm_common.conf // 所有主机上都要配置, 直接远程复制多份
修改代理主机默认配置 (角色, 网卡名, 相应连接的账户和密码)
指定各个代理主机的 IP 地址和模式
配置读写的角色
- scp /etc/MySQL-mmm/mmm_common.conf root@192.168.80.110:/etc/MySQL-mmm/ // 将配置文件复制到所有主机中, 覆盖原有的配置文件
- scp /etc/MySQL-mmm/mmm_common.conf root@192.168.80.110:/etc/MySQL-mmm/
- scp /etc/MySQL-mmm/mmm_common.conf root@192.168.80.110:/etc/MySQL-mmm/
- scp /etc/MySQL-mmm/mmm_common.conf root@192.168.80.110:/etc/MySQL-mmm/
(2) 配置 mmm_agent.conf(四台数据库不包括监视器)
vi /etc/MySQL-mmm/mmm_agent.conf
(3) 配置 mmm_mon.conf
vi /etc/MySQL-mmm/mmm_mon.conf // 配置监控主机
(4) 监控端和代理端授权 (四台数据库服务器上)
- MySQL // 进入数据库
- grant super, replication client, process on *.* to 'mmm_agent'@'192.168.80.%' identified by '123456'; // 为代理端授权
- grant replication client on *.* to 'mmm_monitor'@'192.168.80.%' identified by '123456'; // 为监控端授权
- flush privileges; // 刷新权限
- systemctl start MySQL-mmm-agent // 四台数据库服务器分别启动 MySQL 代理端
- systemctl enable MySQL-mmm-agent // 开机自启
- systemctl start MySQL-mmm-monitor // 监控主机启动 MySQL 监控端
- systemctl enable MySQL-mmm-monitor // 开机自启
- mmm_control show // 查看各节点的情况
注意: 查看不到, 请稍等片刻继续查看, 会有响应时间 *
mmm_control checks all // 需要各种 OK
6, 故障测试
(1) 停止 master1
- systemctl stop mariadb
- mmm_control show // 在监控主机上查看
验证虚拟地址 188 是否移动到 master2 上
注意: master1 再次恢复, 不会抢占
(2) 恢复 master1 为监控主机地址授权登录
- systemctl start mariadb // 在 master1 上开启数据库
- MySQL // 进入数据库
- Start slave // 开启复制复制功能
- grant all on *.* to 'testdba'@'192.168.80.%' identified by '123456'; // 为监控主句授权登录
- flush privileges; // 刷新权限
- yum install mariadb -y // 在监视器上安装 MySQL-client 端登录
- MySQL -utestdba -p123456 -h 192.168.80.188 // 用虚拟地址登录
创建数据, 测试同步
create database bbb;
在所有数据上查看
(3) 验证读写分离
以上配置中的 reader 和 writer 只是一个对外写入的角色, 要想实现真正的读写分离, 还要借助 Amoeba 来实现, 具体步骤: http://blog.51cto.com/13871362/2331275
(4) 验证将从服务器停止一台, 另一台将接管两个虚拟 IP, 以保证业务不停止
- Systemctl stop mariadb
- mmm_control show
来源: http://www.bubuko.com/infodetail-2896618.html