CentOS 7下MySQL 8双主热备高可用架构全解

电子说

1.4w人已加入

描述

Centos7部署MySQL8+keepalived双主热备(含Keepalived配置与GTID同步优化方案)
架构拓扑原理
GTID同步 VIP 192.168.1.100 MySQL主节点1 MySQL主节点2
核心逻辑:
通过Keepalived实现VIP漂移
双向GTID同步保证数据一致性
双写模式需配合应用层冲突解决机制
MySQL 8部署流程
▶ 步骤1:官方源配置
wget https://repo.mysql.com//mysql80-community-release-el7-7.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el7-7.noarch.rpm

⚠️ 注意:
确认EL7版本与CentOS 7兼容
国内镜像加速可替换为华为云源
安装前执行 yum clean all && yum makecache
▶ 步骤2:安装与服务启动
sudo yum install mysql-community-server
sudo systemctl enable --now mysqld

安全初始化:
# 查看临时密码
grep 'temporary password' /var/log/mysqtd.log
# 执行安全脚本
mysql_secure_installation

密码策略说明:
策略项 默认值 修改建议,密码长度 8字符 ≥12字符,特殊字符 必需 维持强校验,密码过期 180天 生产环境建议90天
双主同步配置
节点1配置(192.168.1.10)
# /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_do_db=需要同步的数据库名
auto_increment_increment=2  # 双主必须配置
auto_increment_offset=1

节点2配置(192.168.1.11)
auto_increment_increment=2
auto_increment_offset=2  # 确保自增ID不冲突

▶ 授权同步账户
-- 在两台服务器分别执行
CREATE USER 'sync_user'@'%' IDENTIFIED BY 'V3ryS3cure!P@ss';
GRANT REPLICATION SLAVE ON *.* TO 'sync_user'@'%';
ALTER USER 'sync_user'@'%' IDENTIFIED WITH mysql_native_password BY 'V3ryS3cure!P@ss';

▶ 建立双向通道
-- 在节点1执行
CHANGE MASTER TO 
MASTER_HOST='192.168.1.11',
MASTER_USER='sync_user',
MASTER_PASSWORD='V3ryS3cure!P@ss',
MASTER_AUTO_POSITION=1;
-- 在节点2执行
CHANGE MASTER TO 
MASTER_HOST='192.168.1.10',
MASTER_USER='sync_user',
MASTER_PASSWORD='V3ryS3cure!P@ss',
MASTER_AUTO_POSITION=1;
START SLAVE;

Keepalived高可用配置
主节点配置(192.168.1.10)
# /etc/keepalived/keepalived.conf
global_defs {
router_id MYSQL_HA_01
}
vrrp_script chk_mysql {
script "/usr/local/bin/mysql_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
track_script {
chk_mysql
}
}

备节点配置(192.168.1.11)
router_id MYSQL_HA_02
state BACKUP
priority 90

▶ 健康检测脚本
#!/bin/bash
# /usr/local/bin/mysql_check.sh
if ! mysqladmin ping -h127.0.0.1 -uroot -p'YourPassword' >/dev/null 2>&1; then
systemctl stop keepalived
exit 1
fi
exit 0

安全加固:
脚本权限设置为700
使用独立监控账户代替root
日志记录到/var/log/keepalived.log
关键验证操作
1. 同步状态检查
SHOW SLAVE STATUSG
-- 确认以下参数:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Retrieved_Gtid_Set: 正常递增

2. VIP漂移测试
# 主节点执行
systemctl stop mysqld
# 观察备节点是否接管VIP
ip addr show eth0 | grep 192.168.1.100

3. 数据冲突测试
-- 节点1插入
INSERT INTO test.t1 VALUES (null, 'node1');
-- 节点2插入
INSERT INTO test.t1 VALUES (null, 'node2');
-- 检查双节点数据一致性

安全加固清单
启用SSL加密传输
配置iptables防火墙规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'

开启审计日志
[mysqld]
audit_log=ON
audit_log_format=JSON

定期备份验证
mysqldump --single-transaction --master-data=2 -uroot -p dbname > backup.sql


审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分