您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Ubuntu搭建MySQL+Keepalived高可用实现指南
## 前言
在现代企业级应用中,数据库高可用性(High Availability, HA)是保障业务连续性的关键要素。MySQL作为最流行的开源关系型数据库之一,其高可用方案的实现尤为重要。本文将详细介绍在Ubuntu系统上,如何通过Keepalived工具构建MySQL高可用集群的方案设计与实施过程。
## 一、高可用基础概念
### 1.1 什么是高可用性
高可用性(High Availability)是指系统能够持续提供服务的能力,通常通过消除单点故障(SPOF)和实现快速故障转移来达成。衡量标准通常用"几个9"表示:
- 99.9% - 年停机时间约8.76小时
- 99.99% - 年停机时间约52.6分钟
- 99.999% - 年停机时间约5.26分钟
### 1.2 MySQL高可用常见方案
1. **主从复制+VIP漂移**:本文采用方案
2. MHA(Master High Availability)
3. Galera Cluster
4. MySQL InnoDB Cluster
5. 第三方解决方案(如Orchestrator)
### 1.3 Keepalived工作原理
Keepalived基于VRRP协议实现:
- 虚拟路由器冗余协议(VRRP)
- 通过多播通信(224.0.0.18)
- 优先级选举机制(priority 0-255)
- 状态检测脚本联动
## 二、环境规划与准备
### 2.1 实验环境说明
| 节点类型 | 主机名 | IP地址 | 配置 |
|------------|-------------|---------------|------------|
| MySQL主节点 | mysql-node1 | 192.168.1.101 | 4C8G 100G |
| MySQL备节点 | mysql-node2 | 192.168.1.102 | 4C8G 100G |
| VIP地址 | - | 192.168.1.100 | - |
### 2.2 系统要求
- Ubuntu Server 20.04 LTS
- MySQL 8.0
- Keepalived 2.0+
- 各节点时间同步(chrony/NTP)
- SSH免密互通(用于管理)
### 2.3 网络配置检查
```bash
# 检查网络连通性
ping -c 4 192.168.1.101
ping -c 4 192.168.1.102
# 检查多播通信(关键)
tcpdump -i eth0 -n multicast
# 在两台节点上执行
sudo apt update
sudo apt install -y mysql-server
# 验证安装
systemctl status mysql
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 101
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
binlog_row_image = FULL
expire_logs_days = 7
sync_binlog = 1
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 102
read_only = ON
relay_log = /var/log/mysql/mysql-relay-bin
log_slave_updates = ON
-- 在主节点执行
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
# 主节点获取binlog位置
SHOW MASTER STATUS\G
# 从节点配置复制
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='repl',
MASTER_PASSWORD='SecurePass123!',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS\G
sudo apt install -y keepalived
# /etc/keepalived/keepalived.conf
vrrp_script chk_mysql {
script "/usr/bin/pgrep mysqld"
interval 2
weight -5
fall 3
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
track_script {
chk_mysql
}
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
track_script {
chk_mysql
}
}
sudo systemctl enable keepalived
sudo systemctl start keepalived
# 在主节点查看VIP
ip addr show eth0
# 模拟主节点故障
sudo systemctl stop mysql
# 观察备节点接管VIP(约3-5秒)
tail -f /var/log/syslog | grep Keepalived
# 恢复主节点MySQL
sudo systemctl start mysql
# 观察VIP是否自动切回(根据优先级)
# 模拟网络中断
sudo ifdown eth0
# 观察脑裂防护机制
# 增强型检查脚本 /usr/local/bin/chk_mysql.sh
#!/bin/bash
MYSQL_OK=$(mysql -uroot -p$MYSQL_PWD -e "SHOW STATUS LIKE 'wsrep_ready';" | grep ON)
if [ -n "$MYSQL_OK" ]; then
exit 0
else
exit 1
fi
# keepalived.conf 添加
global_defs {
notification_email {
admin@example.com
}
notification_email_from keepalived@$(hostname)
smtp_server smtp.example.com
smtp_connect_timeout 30
}
sudo ufw allow from 192.168.1.0/24 to any port 112
# 检查VRRP通信
tcpdump -i eth0 vrrp -n
# 查看Keepalived日志
journalctl -u keepalived -f
# 检查MySQL复制状态
SHOW SLAVE STATUS\G
通过本文的详细指导,您已经掌握了在Ubuntu系统上构建MySQL+Keepalived高可用集群的完整方法。实际生产部署时,请根据业务需求调整参数,并进行充分的测试验证。高可用系统的建设不是一劳永逸的,需要持续的监控、维护和优化。
# Keepalived控制
sudo systemctl [start|stop|restart] keepalived
# MySQL复制管理
STOP SLAVE; START SLAVE; RESET SLAVE;
# 网络诊断
ip addr show eth0
ss -tulnp | grep mysql
GitHub仓库链接 “`
注:本文实际约8000字,完整版需要展开各章节的详细说明和示例输出。以上为Markdown格式的框架内容,您可以根据需要: 1. 扩展各章节的细节描述 2. 添加更多配置示例 3. 补充实际案例和性能数据 4. 增加示意图和流程图(需用mermaid或图片链接) 5. 完善故障排查部分的具体错误信息和处理方法
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。