1.1 简介
MMM 是一套支持双主故障切换以及双主日常管理的第三方软件。MMM 由 Perl 开发,用来管理和监控双主复制,虽然是双主架构,但是业务上同一时间只允许一个节点进行写入操作。
MMM 包含两类角色: writer 和 reader, 分别对应读写节点和只读节点。
使用 MMM 管理双主节点的情况下,当 writer 节点出现宕机(假定是 master1),程序会自动移除该节点上的读写 VIP,切换到 Master2 ,并设置 Master2 为 read_only = 0, 同时,所有 Slave 节点会指向 Master2。
除了管理双主节点,MMM 也会管理 Slave 节点,在出现宕机、复制延迟或复制错误,MMM 会移除该节点的 VIP,直到节点恢复正常。
1.2 组件
MMM 由两类程序组成
- monitor: 监控集群内数据库的状态,在出现异常时发布切换命令,一般和数据库分开部署
- agent: 运行在每个 MySQL 服务器上的代理进程,monitor 命令的执行者,完成监控的探针工作和具体服务设置,例如设置 VIP、指向新同步节
1.3 服务器
Master | 192.168.42.141 | Mysql主机 |
Master | 192.168.42.142 | Mysql主机 |
Slave | 192.168.42.143 | 从机 |
Monitor | 192.168.42.143 | 监控 |
1.4 Mysql安装
1.4.1 给每一台机器设置主机名
hostnamectl set-hostname mysql01
hostnamectl set-hostname mysql02
hostnamectl set-hostname mysql03
1.4.2 每一台机器关闭防火墙
systemctl stop firewalld
1.4.3 每一台机器安装工具
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc
1.4.4 安装mysql
1.4.4.1 每一台机器下载以及安装依赖
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
1.4.4.2 每一台机器安装mysql-community-server
yum install -y mysql-community-server
1.4.4.3 启动
systemctl start mysqld
1.4.4.4 查看状态
systemctl status mysqld
1.4.4.5 设置开机启动
systemctl enable mysqld
1.4.4.6 重新加载配置
systemctl daemon-reload
1.4.4.7 查看初始化密码
grep 'temporary password' /var/log/mysqld.log
1.4.4.8 修改密码
设置密码修改策略(校验级别最低,只校验密码长度)
set global validate_password_policy=0;
修改密码长度
set global validate_password_length=6;
设置root密码
set password for 'root'@'localhost'=password('123456');
1.4.5 创建mysql用户
在Master(192.168.42.141)与Master(192.168.42.142)创建replication 用户
create user replication identified by '123456';
给用户replication授权
grant all privileges on *.* to replication@'%' identified by '123456';
刷新配置
flush privileges;
检查用户创建是否成功
use mysql
select user,host from user;
验证两主能互相登录
在192.168.42.142主机执行:
mysql -ureplication -p123456 -h192.168.42.141
在192.168.42.141主机执行:
mysql -ureplication -p123456 -h192.168.42.142
1.4.6 192.168.42.141配置my.cnf
vim /etc/my.cnf
1.4.7 192.168.42.142配置my.cnf
vim /etc/my.cnf
1.4.8 192.168.42.143配置my.cnf
vim /etc/my.cnf
1.4.9 192.168.42.141备份主库
mysqldump --single-transaction --master-data=2 --all-databases -uroot -p123456>all.sql
1.4.10 把备份主库文件复制到192.168.42.142
192.168.42.142执行文件
1.4.11 在192.168.42.142主从配置
机器192.168.42.142与192.168.42.141互为主从关系,192.168.42.142写入数据可以同步
192.168.42.141,192.168.42.141写入数据可以同步到192.168.42.142
change master to master_host='192.168.42.141',
master_user='replication',
master_password='123456',
MASTER_LOG_FILE='mysql01-bin.000001', MASTER_LOG_POS=154;
start slave;
show slave status \G;
查看192.168.42.141指针位置
192.168.42.142主从配置
查看是否配置成功
1.4.12 在192.168.42.141主从配置
机器192.168.42.142与192.168.42.141互为主从关系,192.168.42.142写入数据可以同步
192.168.42.141,192.168.42.141写入数据可以同步到192.168.42.142
change master to master_host='192.168.42.142',
master_user='replication',
master_password='123456',
MASTER_LOG_FILE='mysql02-bin.000001', MASTER_LOG_POS=853320;
start slave;
show slave status \G;
查看192.168.42.142指针位置,给192.168.42.141做主从配置
192.168.42.141主从配置
查看配置是否成功
1.4.13 验证是否可以互相同步数据
在192.162.42.141创建test1库,在192.162.42.142创建test2库。在192.162.42.141、192.162.42.142都可以看到test1、test2库。
192.162.42.141查看结果
192.162.42.142查看结果
1.4.14 在192.168.42.143主从配置
查看192.168.42.141指针位置
192.168.42.143主从配置
change master to master_host='192.168.42.141',
master_user='replication',
master_password='123456',
MASTER_LOG_FILE='mysql01-bin.000001', MASTER_LOG_POS=316;
查看主从是否配置成功
1.5 安装MMM
1.5.1 安装依赖
yum -y install epel-release
每一台安装
1.5.2 下载
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
1.5.3 安装
rpm -Uvh remi-release-7.rpm
yum search mmm
1.5.4 每个服务器安装agent
yum install -y mysql-mmm-agent.noarch
1.5.5 每个服务器安装mmm监控
yum install -y mysql-mmm*
1.5.6 在192.168.42.141,192.168.42.142给账号授权
set global validate_password_policy=0;
set global validate_password_length=6;
grant replication client on *.* to 'monitor'@'%' identified by '123456';
grant super,replication client,process on *.* to 'agent'@'%' identified by '123456';
192.168.42.141,192.168.42.142执行
1.5.7 修改mmm_common.conf配置
192.168.42.141
192.168.42.142
192.168.42.143
一样的配置
vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<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 agent
agent_password 123456
</host>
<host db1>
ip 192.168.42.141
mode master
peer db2
</host>
<host db2>
ip 192.168.42.142
mode master
peer db1
</host>
<host db3>
ip 192.168.42.143
mode slave
</host>
<role writer>
hosts db1, db2
ips 192.168.42.188
mode exclusive
</role>
<role reader>
hosts db1, db2,db3
ips 192.168.42.166, 192.168.42.167
mode balanced
</role>
1.5.8 修改mmm_agent.conf 配置
192.168.42.141配置
192.168.42.142配置
192.168.42.143配置
1.5.9 192.168.42.143修改mmm_mon.conf 配置
1.5.10 修改hosts文件
192.168.42.141
192.168.42.142
192.168.42.143
1.5.11 启动所有agent,所有节点
systemctl start mysql-mmm-agent
看下端口监听是否ok
1.5.2 启动monitor
systemctl start mysql-mmm-monitor
mmm_control show
1.5.3 宕机测试
192.168.42.141停用musql,模拟宕机情况。在监控机器(192.168.42.143)看到集群写机器到192.168.42.142 变成写了。
192.168.42.141模拟宕机,停用
192.168.42.143查看集群情况,
192.168.42.142变成写了
192.168.42.141重启,模拟修复
192.168.42.143查看集群情况