MySQL 高可用集群搭建部署
MySQL 高可用集群搭建(GTID 模式 + 自动故障转移)
一、环境规划
|
角色 |
IP 地址 |
说明 |
|
主库 (Master) |
192.168.1.100 |
运行 MySQL + Keepalived/MHA |
|
从库1 (Slave1) |
192.168.1.101 |
运行 MySQL + Keepalived/MHA |
|
从库2 (Slave2) |
192.168.1.102 |
运行 MySQL |
|
虚拟 IP (VIP) |
192.168.1.200 |
客户端访问入口 |
二、配置 GTID 主从同步
1. 所有节点配置 MySQL
# 编辑配置文件(MySQL 8.0)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 通用配置
server-id = 1 # 主库设为 1,从库依次递增(2, 3...)
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
# GTID 配置
gtid_mode = ON # 启用 GTID
enforce_gtid_consistency = ON # 强制 GTID 一致性
log_slave_updates = ON # 从库记录 binlog(级联复制必需)
# 重启 MySQL
sudo systemctl restart mysql
2. 主库操作
-- 创建复制专用用户
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
-- 查看 GTID 状态
SHOW MASTER STATUS\G
-- 输出示例:
-- File: mysql-bin.000001
-- Position: 154
-- Executed_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5
3. 从库操作
-- 配置主库信息(所有从库执行)
CHANGE MASTER TO
MASTER_HOST = '192.168.1.100',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'SecurePass123!',
MASTER_AUTO_POSITION = 1; -- GTID 模式自动同步位置
-- 启动复制
START SLAVE;
-- 检查复制状态
SHOW SLAVE STATUS\G
-- 关键指标:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Retrieved_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5
-- Executed_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5
三、自动故障转移方案
方案 1:Keepalived + VIP(快速切换)
1. 安装 Keepalived(主库和从库1)
# Ubuntu/Debian
sudo apt install keepalived
# CentOS/RHEL
sudo yum install keepalived
2. 主库 Keepalived 配置
sudo vim /etc/keepalived/keepalived.conf
vrrp_script chk_mysql {
script "/usr/bin/pgrep mysqld" # 检查 MySQL 进程
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100 # 主库优先级更高
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.1.200/24 # 虚拟 IP
}
track_script {
chk_mysql
}
}
3. 从库 Keepalived 配置
sudo vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50 # 优先级低于主库
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.1.200/24
}
track_script {
chk_mysql
}
}
4. 启动并验证
sudo systemctl restart keepalived
sudo systemctl enable keepalived
# 检查 VIP 绑定
ip addr show eth0 | grep 192.168.1.200
方案 2:MHA(智能故障转移)
1. 所有节点配置 SSH 免密登录
# 在 MHA Manager 节点执行
ssh-keygen -t rsa
ssh-copy-id root@192.168.1.100
ssh-copy-id root@192.168.1.101
ssh-copy-id root@192.168.1.102
2. 安装 MHA Node(所有 MySQL 节点)
# Ubuntu/Debian
sudo apt install mha4mysql-node
# CentOS/RHEL
sudo yum install https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpm
3. 安装 MHA Manager(管理节点)
# Ubuntu/Debian
sudo apt install mha4mysql-manager
# CentOS/RHEL
sudo yum install https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm
4. 配置 MHA
sudo mkdir -p /etc/mha
sudo vim /etc/mha/app1.cnf
[server default]
manager_workdir=/var/log/mha/app1
manager_log=/var/log/mha/app1/manager.log
ssh_user=root
repl_user=repl
repl_password=SecurePass123!
ping_interval=3
[server1]
hostname=192.168.1.100
candidate_master=1
[server2]
hostname=192.168.1.101
candidate_master=1
[server3]
hostname=192.168.1.102
5. 启动 MHA
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
# 检查状态
masterha_check_status --conf=/etc/mha/app1.cnf
四、数据备份与恢复(GTID 模式)
1. 全量备份
# 使用 mysqldump(主库执行)
mysqldump -u root -p --all-databases --single-transaction --set-gtid-purged=ON > full_backup_$(date +%Y%m%d).sql
2. 增量备份
-- 定期记录 GTID 集合
SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
-- 示例输出:3E11FA47-71CA-11E1-9E33-C80AA9429562:1-1000
-- 增量备份时导出新增 GTID 区间
mysqlbinlog --include-gtids='3E11FA47-71CA-11E1-9E33-C80AA9429562:1001-2000' /var/log/mysql/mysql-bin.00000* > incremental_backup.sql
3. 数据恢复
# 全量恢复
mysql -u root -p < full_backup_20231001.sql
# 增量恢复
mysql -u root -p < incremental_backup.sql
五、主从切换操作
1. 手动切换(GTID 模式)
-- 在目标从库执行
STOP SLAVE;
RESET SLAVE ALL;
-- 提升为新主库
SET GLOBAL read_only = OFF;
-- 其他从库指向新主库
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='repl',
MASTER_PASSWORD='SecurePass123!',
MASTER_AUTO_POSITION=1;
START SLAVE;
六、验证与监控
1. 检查 GTID 一致性
-- 所有节点执行
SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
-- 确保所有节点 GTID 集合相同
2. 监控复制延迟
SHOW SLAVE STATUS\G
-- 关注 Seconds_Behind_Master
3. 日志检查
# Keepalived 日志
journalctl -u keepalived
# MHA 日志
tail -f /var/log/mha/app1/manager.log
七、故障排查命令
1. 主从复制中断
-- 查看错误原因
SHOW SLAVE STATUS\G
-- 跳过错误(谨慎操作)
STOP SLAVE;
SET GTID_NEXT='3E11FA47-71CA-11E1-9E33-C80AA9429562:1001';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;
2. VIP 未漂移
# 检查 Keepalived 进程
ps aux | grep keepalived
# 手动释放 VIP
systemctl restart keepalived
八、关键注意事项
- GTID 限制:
- 禁止直接修改 gtid_purged,可能导致数据冲突。
- 所有事务必须通过 GTID 复制,禁用非 GTID 操作(如 CHANGE MASTER TO MASTER_LOG_FILE)。
- 备份策略:
- 全量备份每日一次,增量备份每小时一次。
- 使用 Percona XtraBackup 替代 mysqldump 支持热备份:
xtrabackup --backup --target-dir=/backup/xtrabackup/full
- 安全加固:
- 限制复制用户 IP 范围(如 repl'@'192.168.1.%')。
- 加密备份文件并存储到远程服务器。
通过以上步骤,您将获得一个基于 GTID + Keepalived/MHA 的高可用 MySQL 集群,支持自动故障转移、数据一致性保障和快速恢复。
MySQL 高可用集群搭建部署的更多相关文章
- .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s
前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...
- 实现CI/CDk8s高可用集群搭建总结以及部署API到k8s
实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s 前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署 ...
- 部署MYSQL高可用集群
mysql-day08 部署MYSQL高可用集群 u 集群架构 ...
- Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建
目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...
- ProxySQL Cluster 高可用集群环境部署记录
ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...
- MHA 高可用集群搭建(二)
MHA 高可用集群搭建安装scp远程控制http://www.cnblogs.com/kevingrace/p/5662839.html yum install openssh-clients mys ...
- MySQL高可用集群方案
一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...
- MongoDB 3.4 高可用集群搭建(二)replica set 副本集
转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<MongoDB 3.4 高可用集群搭建(一):主从模式&g ...
- kubeadm部署k8s1.9高可用集群--4部署master节点
部署master节点 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager 本文档介绍部署一 ...
- HDFS-HA高可用集群搭建
HA高可用集群搭建 1.总体集群规划 在hadoop102.hadoop103和hadoop104三个节点上部署Zookeeper. hadoop102 hadoop103 hadoop104 Nam ...
随机推荐
- linux mint安装kafka,及flume与kafka整合
需要软件 jdk1.8(jdk-8u131-linux-x64.rpm) zookeeper (zookeeper-3.4.10.tar.gz) kafka 2.11-2.0.0 flume1.8.0 ...
- VS2019 MSB6006 "CL.exe"已退出,错误代码 5
以下为我的解决过程: 因为我不是干C++的,而且我们内网不通外网,我当初来的时候装的vs2019全家桶,然后他们开发用的是vs2015,项目有用c++做图像处理的东西,我本地的vs2015没有C++模 ...
- 当 GPT 告诉我9.11大于9.9的时候:AI 仍需完善的一面
在当今 AI 技术飞速发展的时代,我们对其能力寄予了厚望,期待它们能够准确无误地处理各种任务.然而,最近发生的一件事情让我们意识到,AI 仍然有需要改进和完善的地方. GPT 作为一款备受瞩目的语言模 ...
- NebKit简介及工作流程
引言 随着云计算技术的不断发展,容器化技术已成为现代软件开发和部署的重要组成部分.NebKit作为一个创新的容器编排和管理工具,旨在简化这一过程,提高开发效率和系统的可靠性.本文将对NebKit进行简 ...
- Idea - 关于mybatis的插件
idea中配置的mybatis的mapper类和xml文件的图标怎么自动变为mybatis的logo?需要安装什么插件,怎么安装? 在 IntelliJ IDEA 中,要使 MyBatis 的 ...
- Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效
Jsmoke by Yn8rt 该插件由 Yn8rt师傅 开发,插件可以理解为主动版的hae和apifinder,因为其中的大多数规则我都引用了,当你认为当前页面,以及其调用的js文件存在敏感信息 ...
- 从文件到块: 提高 Hugging Face 存储效率
Hugging Face 在 Git LFS 仓库 中存储了超过 30 PB 的模型.数据集和 Spaces.由于 Git 在文件级别进行存储和版本控制,任何文件的修改都需要重新上传整个文件.这在 H ...
- vivo 大规模容器集群运维平台实践
作者:来自 vivo 互联网服务器团队- Zhou Qi .Kong Manyu 容器平台已经成为支持应用运维和部署的重要基础设施,当前 vivo 内部容器平台共有20+生产集群,管理数万物理机节点, ...
- [第二章]ABAQUS CM插件中文手册
ABAQUS Composite Modeler User Manual(zh-CN) Dassault Systèmes, 2018 注: 源文档的交叉引用链接,本文无效 有些语句英文表达更易理解, ...
- Navicat 数据库如何再次打开恢复上次的页面
选项->选项卡->从上次离开的画面继续 2.其他软件有这个需求也可以在设置里找一找!