暂无图片
MySQL双主高可用搭建+keepalived方案
最近更新:2023-11-20 09:41:12

[[TOC]]

一、架构

image.png

使用两台MySQL实例搭建单/双向复制,使用keepalived监控实例状态并管理VIP,当主节点发生故障后由keepalived负责VIP的漂移。业务侧使用VIP访问MySQL数据库。

二、MySQL双主配置

前置条件,主从 两台服务器已部署完成,binlog已开启且格式为ROW。注意:主服务器 mysql版本必须小于 等于 从服务器。如原主库已有业务数据,备库需使用备份恢复工具全量同步主库数据。

2.1 MySQL配置文件修改

修改配置文件默认在/etc/my.cnf
在[mysqld]中添加以下配置,并重启数据库

每个server服务的标识,在master/slave环境中,此变量一定要不一样
server-id=1/2
每个server服务的标识,在master/slave环境中,此变量一定要不一样

#制以什么格式记录二进制日志的内容
binlog_format=row

#设定所接受的包的大小
max_allowed_packet=1G

#队列中Pending的事件所占用的最大内存,默认为16M
#需要大于主库max_allowed_packet的大小
slave_pending_jobs_size_max=2G  


####
#MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行
enforce_gtid_consistency           = ON
gtid_mode                          = ON
#开启log_slave_updates参数,是把relay-log里的日志内容再记录到slave本地的binlog里
log_slave_updates                  = ON
master_info_repository             = TABLE
relay_log_info_repository          = TABLE

## 主库设置
super_read_only=off
auto_increment_increment=2
auto_increment_offset=1

## 备库设置
super_read_only=on
auto_increment_increment=2
auto_increment_offset=2

2.2 配置双主同步

#在主库上查询gtid值
mysql>select @@global.gtid_executed;
例如 拿到的gitd为9f39465a-7e30-11e9-8f85-fa163e5def9a:1-4

#在主库上创建复制用户
mysql>create user 'repl'@'%' identified by 'XXXXXXXX';
mysql>grant replication slave on *.* to 'repl'@'%';

#在备库上执行
mysql>reset master;SET @@GLOBAL.GTID_PURGED= '9f39465a-7e30-11e9-8f85-fa163e5def9a:1-4';
mysql>change master to   master_host = '主库ip',  master_port = 主库端口,  master_user = 'repl',  master_password = 
'XXXXXXX' ,master_auto_position=1;
mysql>start slave;
......