实验拓扑:192.168.80.181 mariadb主服务器
192.168.80.182 mariadb 主服务器
192.168.80.185 mmm监视器monitor
192.168.80.189 mariadb从服务器
192.168.80.190 mariadb从服务器
1.基础环境搭建
所有主机都需要联网,并配置阿里云源,然后安装epel-release源
yum install -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 -y install mariadb-server mariadb //安装mariadb
service firewalld stop
setenforce 0
systemctl start mariadb //启动mariadb
vi /etc/my.cnf //配置m1的配置文件,然后复制到其他服务器上,注意服务器Id
[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 //服务器ID,不能一样
log_slave_updates //此数据库宕机,备用数据库接管
sync_binlog=1
auto_increment_increment=2 //字段一次递增多少
auto_increment_offset=1 //自增字段的起始值:1.3.5.7等奇数id
service mariadb restart
netstat -anpt | grep 3306 //检查是否启动
2. 配置主主同步
mysql //登录
MariaDB [(none)]> show master status; //在两台主服务器上查看bin日志起始位置和position起始位置
MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456'; //两台主都执行,为对方的同步用户授权
MariaDB [(none)]> change master to master_host='192.168.80.182',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=410;
//填写自己同步账号的参数,注意bin日志编号和pos的值,不能填错。这句在m1上执行
MariaDB [(none)]> change master to master_host='192.168.80.181',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=245; //这句在m2上执行
MariaDB [(none)]> start slave; //打开同步
MariaDB [(none)]> show slave status \G //查看同步状态,以下两个值为yes则成功,两台都要检查

下面建库进行测试,m1上新建数据库dba

m2上查看数据库,发现也有dba

在m1上将dba删除

m2上查看dba也消失了

主主同步配置成功。
主从同步配置
MariaDB [(none)]> change master to master_host='192.168.80.181',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=1432;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status \G
以上在两台从服务器上操作即可
3. 配置MMM
yum -y install mysql-mmm* //5台主机上都要安装
[root@ab ~]# cd /etc/mysql-mmm/
[root@ab mysql-mmm]# vi mmm_common.conf //修改mmm配置文件,配置一台,其他的直接复制,修改如下。
<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.80.181
mode master
peer db2
</host>
<host db2>
ip 192.168.80.182
mode master
peer db1
</host>
<host db3>
ip 192.168.80.189
mode slave
</host>
<host db4>
ip 192.168.80.190
mode slave
</host>
<role writer>
hosts db1, db2
ips 192.168.80.199
mode exclusive
</role>
<role reader>
hosts db3, db4
ips 192.168.80.200, 192.168.80.201
mode balanced
</role>
将配置文件拷贝给其他主机
scp mmm_common.conf root@192.168.80.182:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.185:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.189:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.190:/etc/mysql-mmm/
下面要在所有的数据库里为监视器用户授权,并且为代理用户mmm_agent授权
MariaDB [(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'192.168.80.%' identified by '123456'; //代理用户授权
MariaDB [(none)]> grant replication client on *.* to 'mmm_monitor'@'192.168.80.%' identified by '123456'; //监视器用户授权
MariaDB [(none)]> flush privileges;
下面按照mmm_common.conf 配置文件中的数据库角色划分配置mmm_agent.conf文件
[root@ab mysql-mmm]# vi /etc/mysql-mmm/mmm_agent.conf
this db1 //根据规划进行逐一调整,181为db1,182为db2,189为db3,190为db4
systemctl start mysql-mmm-agent
systemctl enable mysql-mmm-agent //在所有数据库服务器上启动mysql-mmm-agent
MMM的架构身份配置结束,下面对架构的监视器monitor进行配置80.185
[root@www.mysql.com ~]#cd /etc/mysql-mmm/
[root@www.mysql.com mysql-mmm]#ls
mmm_agent.conf mmm_common.conf mmm_mon.conf mmm_mon_log.conf mmm_tools.conf
[root@www.mysql.com mysql-mmm]#vi mmm_mon.conf //修改监视器的监视用户密码
ping_ips 192.168.80.181,192.168.80.182,192.168.80.189,192.168.80.190 //数据库服务器地址
auto_set_online 5 //使被监视的服务器转为online的时间
<host default>
monitor_user mmm_monitor
monitor_password 123456
</host>
[root@www.mysql.com mysql-mmm]#systemctl start mysql-mmm-monitor //启动监视端
[root@www.mysql.com mysql-mmm]#mmm_control show //查看各节点的情况

[root@www.mysql.com mysql-mmm]#mmm_control checks all //校对mmm,需要都为OK

故障测试
将m1数据库停止,查看漂移地址情况
[root@ab mysql-mmm]# service mariadb stop //将m1数据库停止
[root@www.mysql.com mysql-mmm]#mmm_control show

主服务器地址漂移了,注意:再次启动m1不会抢占
将m3从服务器停止,查看漂移地址情况

漂移地址都到了m4身上
在这个架构中要注意的是主从同步,从服务器只能跟m1进行主从同步,m2只是跟m1进行主主同步做备份用的,假如m1挂了,两台从服务器不能从m2上同步内容,必须将m1重启才行。
在m1服务器上为监控机地址授权登录
grant all on *.* to 'testdba'@'192.168.80.%' identified by '123456';
flush privileges; //授权testdba用户在80.0网段可以登录管理数据库所有内容,密码123456
下面在监控服务器上安装mariadb,并且登录主服务器漂移地址
[root@www.mysql.com ~]#yum install mariadb -y
[root@www.mysql.com ~]#mysql -utestdba -p -h 192.168.80.199

下面创建一个数据库测试

在m2上查看

在从服务器上查看

同步成功