简介
MMM(Master-Master Replication Manager for MySQL, MySQL主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置。注意同一时间只有一个节点是可写。MMM的监管端会提供多个虚拟IP(VIP)包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,会将VIP迁移至其他mysql。
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、编辑主机名
[[email protected] ~]# hostnamectl set-hostname master01
[[email protected] ~]# hostnamectl set-hostname master02
[[email protected] ~]# hostnamectl set-hostname monitor
[[email protected] ~]# hostnamectl set-hostname slave01
[[email protected] ~]# hostnamectl set-hostname slave02
[[email protected] ~]# bash
2、三台主机关闭防火墙及selinux
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# systemctl disable firewalld.service
[[email protected] ~]# vim /etc/sysconfig/selinux
3、重启服务
[[email protected] ~]# reboot
一、搭建、配置mysql01主服务器
1、配置本地yum源
[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# mkdir bak #创建备份目录
[[email protected] yum.repos.d]# mv CentOS-* bak/ #将系统yum源仓库进行备份
[[email protected] yum.repos.d]# vim local.repo#创建自建yum源
#添加以下参数:
[local] #容器名称
name=local #容器说明
baseurl=file:///mnt/sr0 #yum源地址即挂载点
gpgcheck=0 #"0"代表rpm数字证书验证不生效
enabled=1 #"1"代表此容器生效
[[email protected] ~]# mkdir /mnt/sr0/
[[email protected] ~]# mount /dev/sr0 /mnt/sr0/ #挂载光盘
2、安装epel源
[[email protected] ~]# yum -y install wget #wget命令用来从指定的URL下载文件
[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #将官网的yum源下载至本地网络yum源
[[email protected] ~]# yum -y install epel-release #下载epel源扩展
[[email protected] ~]# cat /etc/yum.repos.d/epel.repo
3、替换镜像源
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #将epel源的服务器IP地址换成阿里
4、五台主机安装相关软件包
[[email protected] ~]# yum -y install mariadb-server mariadb mysql-mmm*
#解析:
mysql-mmm*:主主复制管理器
mariadb:客户端
mariadb-server:服务器端
5、修改mariadb配置文件
[[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/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服务器
[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# netstat -anpt | grep ‘:3306‘
7、设置初始密码
[[email protected] ~]# mysqladmin -uroot password ‘123‘
二、搭建、配置其余三台数据库服务器
其他服务器安装和master01服务器安装相同,安装过程,略……
1、master01服务器上传配置文件
!!!!!!!!!!!一定要注意配置文件参数其他都是一样,server-id一定要改成不一样的
[[email protected] ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[[email protected] ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
[[email protected] ~]# scp -r /etc/my.cnf [email protected]:/etc/my.cnf
三、配置mysql主主复制
1、配置master01服务器
[[email protected] ~]# mysql -u root -p123 -e "show master status;" #查看master02服务器状态
[[email protected] ~]# 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服务器状态
[[email protected] ~]# 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服务器状态
MariaDB [(none)]> show slave status\G; #查看master02服务器状态
四、配置slave01、slave02作为master01的从库
1、查看master01服务器二进制日志文件名称以及位置
[[email protected] ~]# mysql -u root -p -e "show master status;"
2、设置slave01作为master01的从库
[[email protected] ~]# 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;
3、再次查看master01服务器状态
4、设置slave02作为master01的从库
[[email protected] ~]# 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;
五、测试主主同步、主从同步
1、master01服务器创建测试数据
[[email protected] ~]# mysql -uroot -p
MariaDB [(none)]> create database test_db;
2、查看其他三台数据库服务器
六、配置MySQL-MMM
1、五台主机编辑common配置文件
[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] 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台主机上
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
[[email protected] mysql-mmm]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
3、monitor服务器编辑mmm_mon.conf文件
[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] mysql-mmm]# vim mmm_mon.conf
<host default>
monitor_user mmm_monitor
monitor_password 123456 #修改密码,方便mysql授权
</host>
4、四台数据库服务器授权agent、monitor
[[email protected] ~]# 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文件
[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] mysql-mmm]# vim mmm_agent.conf
6、五台服务器启动agent服务
[[email protected] ~]# systemctl start mysql-mmm-agent.service
[[email protected] ~]# systemctl enable mysql-mmm-agent.service
7、monitor服务器编辑mmm_mon文件
[[email protected] ~]# cd /etc/mysql-mmm/
[[email protected] 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
[[email protected] ~]# systemctl start mysql-mmm-monitor.service
[[email protected] ~]# mmm_control show
[[email protected] ~]# mmm_control checks all
[[email protected] ~]# mmm_control move_role writer db2 #指定db2服务器绑定虚拟IP
[[email protected] ~]# mmm_control show
七、模拟故障
1、宕掉master01服务器
[[email protected] ~]# mmm_control move_role writer db1 #指定db1服务器绑定虚拟IP
[[email protected] ~]# systemctl stop mariadb.service
[[email protected] ~]# mmm_control show
2、恢复master01绑定虚拟IP
[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# mmm_control move_role writer db1
[[email protected] ~]# mmm_control show
3、宕掉slave01服务器
[[email protected] ~]# systemctl stop mariadb.service
[[email protected] ~]# mmm_control show
4、恢复slave01绑定虚拟IP
[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# mmm_control show
原文地址:http://blog.51cto.com/11905606/2171900