Ubuntu搭建Mysql+Keepalived高可用如何实现

发布时间:2021-11-30 17:31:16 作者:小新
来源:亿速云 阅读:175
# 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

三、MySQL主从复制配置

3.1 安装MySQL服务器

# 在两台节点上执行
sudo apt update
sudo apt install -y mysql-server

# 验证安装
systemctl status mysql

3.2 主节点配置

# /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

3.3 从节点配置

# /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

3.4 创建复制账户

-- 在主节点执行
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3.5 建立复制关系

# 主节点获取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

四、Keepalived安装与配置

4.1 安装Keepalived

sudo apt install -y keepalived

4.2 主节点配置

# /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
    }
}

4.3 备节点配置

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
    }
}

4.4 启动服务

sudo systemctl enable keepalived
sudo systemctl start keepalived

五、高可用测试与验证

5.1 VIP漂移测试

# 在主节点查看VIP
ip addr show eth0

# 模拟主节点故障
sudo systemctl stop mysql

# 观察备节点接管VIP(约3-5秒)
tail -f /var/log/syslog | grep Keepalived

5.2 自动故障恢复测试

# 恢复主节点MySQL
sudo systemctl start mysql

# 观察VIP是否自动切回(根据优先级)

5.3 网络分区测试

# 模拟网络中断
sudo ifdown eth0

# 观察脑裂防护机制

六、高级配置与优化

6.1 多级健康检查

# 增强型检查脚本 /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

6.2 邮件告警集成

# keepalived.conf 添加
global_defs {
    notification_email {
        admin@example.com
    }
    notification_email_from keepalived@$(hostname)
    smtp_server smtp.example.com
    smtp_connect_timeout 30
}

6.3 安全加固措施

  1. VRRP通信加密
  2. 防火墙规则限制
    
    sudo ufw allow from 192.168.1.0/24 to any port 112
    
  3. MySQL连接限制

七、日常维护与监控

7.1 关键监控指标

7.2 常见问题排查

# 检查VRRP通信
tcpdump -i eth0 vrrp -n

# 查看Keepalived日志
journalctl -u keepalived -f

# 检查MySQL复制状态
SHOW SLAVE STATUS\G

7.3 版本升级策略

  1. 滚动升级方案
  2. 兼容性检查清单
  3. 回滚预案制定

八、生产环境建议

  1. 至少三个节点:避免脑裂问题
  2. 多机房部署:结合VXLAN等网络技术
  3. 定期故障演练:模拟各种故障场景
  4. 文档标准化:记录所有配置变更
  5. 备份策略:即使有HA也需要定期备份

结语

通过本文的详细指导,您已经掌握了在Ubuntu系统上构建MySQL+Keepalived高可用集群的完整方法。实际生产部署时,请根据业务需求调整参数,并进行充分的测试验证。高可用系统的建设不是一劳永逸的,需要持续的监控、维护和优化。

附录

A. 常用命令速查

# Keepalived控制
sudo systemctl [start|stop|restart] keepalived

# MySQL复制管理
STOP SLAVE; START SLAVE; RESET SLAVE;

# 网络诊断
ip addr show eth0
ss -tulnp | grep mysql

B. 推荐阅读

  1. 《MySQL High Availability》O’Reilly
  2. Keepalived官方文档
  3. MySQL 8.0 Reference Manual

C. 配置模板下载

GitHub仓库链接 “`

注:本文实际约8000字,完整版需要展开各章节的详细说明和示例输出。以上为Markdown格式的框架内容,您可以根据需要: 1. 扩展各章节的细节描述 2. 添加更多配置示例 3. 补充实际案例和性能数据 4. 增加示意图和流程图(需用mermaid或图片链接) 5. 完善故障排查部分的具体错误信息和处理方法

推荐阅读:
  1. 搭建高可用MongoDB集群(分片)
  2. Magent搭建Memcached高可用群集

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql keepalived

上一篇:单实例DG切换中的虚拟IP是怎样的

下一篇:C/C++ Qt TreeWidget单层树形组件怎么应用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》