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--Fiber 架构
前端·react.js·架构
sun0077002 小时前
mysql索引底层原理
数据库·mysql
程序员秘密基地2 小时前
基于html,css,vue,vscode,idea,,java,springboot,mysql数据库,在线旅游,景点管理系统
java·spring boot·mysql·spring·web3
workflower5 小时前
MDSE和敏捷开发相互矛盾之处:方法论本质的冲突
数据库·软件工程·敏捷流程·极限编程
叁沐5 小时前
MySQL 11 怎么给字符串字段加索引?
mysql
Tony小周5 小时前
实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12
开发语言·数据库·qt
lifallen5 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
怀揣小梦想6 小时前
微服务项目远程调用时的负载均衡是如何实现的?
微服务·架构·负载均衡
TDengine (老段)6 小时前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
GateWorld6 小时前
RISC-V:开源芯浪潮下的技术突围与职业新赛道 (二) RISC-V架构深度解剖(上)
架构·risc-v·指令集精简·寄存器设计·特权架构·模块化扩展