mysql之搭建MMM架构实现高可用

实验目的

解决mysql的主从服务器单点故障问题,实现高可用

实验思路

实验条件:

|-------------|------------|--------------|-------------------|
| 主机名 | 作用 | IP地址 | 组件 |
| mysql1 | master01 | 20.0.0.13 | mysql服务、mysql-mmm |
| mysql2 | masert02 | 20.0.0.23 | mysql服务、mysql-mmm |
| mysql3 | slave01 | 20.0.0.33 | mysql服务、mysql-mmm |
| mysql4 | slave02 | 20.0.0.43 | mysql服务、mysql-mmm |
| test1 | 客户端 | 20.0.0.10 | mysql-mmm |

实验步骤

一、主主同步、主从同步

1、临时修改主机名

2、搭建 MySQL 多主多从模式

(1)在master01节点上修改配置文件

vim /etc/my.cnf

......

mysqld

user = mysql

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

port = 3306

character_set_server=utf8

pid-file = /usr/local/mysql/mysqld.pid

socket = /usr/local/mysql/mysql.sock

server-id = 1

#每台 Mysql 主机的 server-id 不能相同

log-error=/usr/local/mysql/data/mysql_error.log

#错误日志

general_log=ON #通用查询日志

general_log_file=/usr/local/mysql/data/mysql_general.log

slow_query_log=ON #慢查询日志

slow_query_log_file=mysql_slow_query.log

long_query_time=5

binlog-ignore-db=mysql,information_schema

#不需要同步的库名

log_bin=mysql_bin

#开启二进制日志用于主从数据复制

log_slave_updates=true

#允许slave从master复制数据时可以写入到自己的二进制日志

sync_binlog=1

#"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去

innodb_flush_log_at_trx_commit=1

#"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去

auto_increment_increment=2

#自增字段一次递增多少

auto_increment_offset=1

(2)把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改

scp /etc/my.cnf root@20.0.0.23:/etc/

scp /etc/my.cnf root@20.0.0.33:/etc/

scp /etc/my.cnf root@20.0.0.43:/etc/

systemctl restart mysqld

(3)配置主主复制,两台主服务器相互复制

在两台主服务器上都执行授予从的权限,从服务器上不需要执行

grant replication slave on *.* to 'replication'@'20.0.0.%' identified by '123';

master01节点:

master02节点:

(1)在master02主服务器上查看,记录日志文件名称和同步点

show master status;

(2)在 master01 上配置同步

change master to master_host='20.0.0.23',master_user='replication',master_password='123',master_log_file='mysql_bin.000001',master_log_pos=456;

start slave;

show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

(3)在master01主服务器上查看,记录日志文件名称和同步点

show master status;

(4)在 master02上配置同步

change master to master_host='20.0.0.13',master_user='replication',master_password='123',master_log_file='mysql_bin.000001',master_log_pos=456;

start slave;

show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

4、配置主从复制,在两台从服务器上做

(1)在master01节点上

show master status;

(2)在slave01、slave02节点上

change master to master_host='20.0.0.13',master_user='replication',master_password='123',master_log_file='mysql_bin.000001',master_log_pos=1374;

show slave status\G;

5、测试主从同步

结论:主主复制、主从同步成功

二、安装配置 MySQL-MMM

1、在所有服务器上安装 MySQL-MMM

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum -y install epel-release

yum -y install mysql-mmm*

(1)在 master01 上对 MySQL-MMM 进行配置

cd /etc/mysql-mmm/

vim /etc/mysql-mmm/mmm_common.conf

(2)把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的

scp mmm_common.conf root@20.0.0.23:/etc/mysql-mmm/

scp mmm_common.conf root@20.0.0.33:/etc/mysql-mmm/

scp mmm_common.conf root@20.0.0.43:/etc/mysql-mmm/

scp mmm_common.conf root@20.0.0.10:/etc/mysql-mmm/

(3)修改所有数据库服务器的代理配置文件 mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

this db1 #根据不同的主机分别修改为 db1,db2,db3,db4

(4)在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf

vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

<monitor>

.....

ping_ips 192.168.80.20,192.168.80.30,192.168.80.13,192.168.80.14 #指定所有数据库服务器的 IP

auto_set_online 10 #指定自动上线时间

</monitor>

<host default>

monitor_user mmm_monitor #指定 mmm_monitor 的用户名

monitor_password 123456 #指定 mmm_monitor 的密码

</host>

(5)在所有数据库上为 mmm_agent(代理进程)授权

grant super, replication client, process on *.* to 'mmm_agent'@'20.0.0.%' identified by '123';

(6)在所有数据库上为 mmm_moniter(监控进程)授权

grant replication client on *.* to 'mmm_monitor'@'20.0.0.%' identified by '123';

flush privileges;

(7)在所有数据库服务器上启动 mysql-mmm-agent

systemctl start mysql-mmm-agent.service

(8)在 monitor 服务器上启动 mysql-mmm-monitor

systemctl start mysql-mmm-monitor.service

(9)在 monitor 服务器上测试群集

查看各节点的情况

mmm_control show

db1(20.0.0.13) master/ONLINE. Roles: writer(20.0.0.188)

db2(20.0.0.23) master/ONLINE. Roles:

db3(20.0.0.33) slave/ONLINE. Roles: reader(20.0.0.198)

db4(20.0.0.43) slave/ONLINE. Roles: reader(20.0.0.199)

(10)检测监控功能是否都完善,需要各种OK

mmm_control checks all

(11)指定绑定 VIP 的主机

mmm_control move_role writer db2

现在VIP在db2上

四、故障测试

(1)模拟故障

停止 master02确认 VIP 是否移动到 master01 上。注意:master02 主服务器恢复服务后,不会抢占

mmm_control show

(2)master02故障恢复

(3)停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止

mmm_control show

一台从服务器(slave01)故障

故障恢复

4、客户端测试

(1)在 master01 服务器上为 monitor 服务器地址授权登录

grant all on *.* to 'yyy'@'20.0.0.10' identified by '123';

flush privileges;

(2)在 monitor 服务器上使用 VIP 登录

yum install -y mariadb-server mariadb

systemctl start mariadb.service

mysql -uyyy -p -h 20.0.0.188

#创建数据,测试同步情况

create database testdba;

三、排错

1、错误问题:主库、从库的二进制日志文件名不一致

主库:

从库:

解决方法:

2、错误问题:主库不同步

解决方式:重启从库

3、错误问题:第一次查主从同步成功,第二次再查主从同步发生变化,失败了

解决方式:主、从服务器重新赋权,绑定主从

change master to master_host='192.168.80.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=154;

相关推荐
知识分享小能手2 分钟前
React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)
前端·javascript·学习·react.js·架构·前端框架·react
江团1io010 分钟前
微服务雪崩问题与系统性防御方案
微服务·云原生·架构
玉衡子12 分钟前
MySQL基础架构全面解析
数据库·后端
梦中的天之酒壶14 分钟前
Redis Stack扩展功能
数据库·redis·bootstrap
GreatSQL22 分钟前
GreatSQL分页查询优化案例实战
数据库
LDelon23 分钟前
iOS GitSubModule CocoaPod 制作私有源本地组件库
架构
Leo.yuan1 小时前
不同数据仓库模型有什么不同?企业如何选择适合的数据仓库模型?
大数据·数据库·数据仓库·信息可视化·spark
麦兜*1 小时前
MongoDB 6.0 新特性解读:时间序列集合与加密查询
数据库·spring boot·mongodb·spring·spring cloud·系统架构
chat2tomorrow1 小时前
数据采集平台的起源与演进:从ETL到数据复制
大数据·数据库·数据仓库·mysql·低代码·postgresql·etl
稻草人想看远方1 小时前
关系型数据库和非关系型数据库
数据库