当前位置:首页 > Ubuntu > 正文

Ubuntu数据库高可用实战指南(基于MySQL+Keepalived+HAProxy实现高可用架构)

在现代企业应用中,Ubuntu数据库高可用是保障业务连续性的关键。一旦数据库宕机,可能导致服务中断、数据丢失甚至客户流失。本文将手把手教你如何在 Ubuntu 系统上搭建一套稳定可靠的数据库高可用方案,即使你是 Linux 新手也能轻松上手!

什么是数据库高可用?

数据库高可用(High Availability, HA)是指通过冗余部署和自动故障转移机制,确保数据库服务在单点故障发生时仍能持续对外提供服务。常见的实现方式包括主从复制、集群、负载均衡等。

Ubuntu数据库高可用实战指南(基于MySQL+Keepalived+HAProxy实现高可用架构) Ubuntu数据库高可用 MySQL主从复制 Keepalived高可用 HAProxy负载均衡 第1张

整体架构说明

本教程采用以下组件构建高可用架构:

  • MySQL 主从复制:实现数据同步,主库写入,从库只读备份
  • HAProxy:作为数据库代理,实现读写分离与负载均衡
  • Keepalived:提供虚拟 IP(VIP),实现故障自动切换

我们将使用两台 Ubuntu 服务器(db1 和 db2)分别部署 MySQL,并配置主从;再用另外两台服务器(或复用)部署 HAProxy + Keepalived,对外提供统一 VIP 访问入口。

第一步:配置 MySQL 主从复制

假设你已有两台 Ubuntu 22.04 服务器,IP 分别为:

  • 主库(Master):192.168.1.10
  • 从库(Slave):192.168.1.11

1. 在主库配置 MySQL

编辑 MySQL 配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在 [mysqld] 段落下添加或修改以下内容:

[mysqld]server-id = 1log-bin = mysql-binbind-address = 0.0.0.0

重启 MySQL 并创建复制用户:

sudo systemctl restart mysqlmysql -u root -p-- 在 MySQL 命令行中执行CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';FLUSH PRIVILEGES;SHOW MASTER STATUS;

记下 FilePosition 的值,稍后从库要用。

2. 在从库配置 MySQL

同样编辑配置文件,设置 server-id 为 2:

[mysqld]server-id = 2bind-address = 0.0.0.0

重启 MySQL,然后执行同步命令(替换为你自己的主库信息):

mysql -u root -pCHANGE MASTER TO  MASTER_HOST='192.168.1.10',  MASTER_USER='repl',  MASTER_PASSWORD='StrongPassword123!',  MASTER_LOG_FILE='mysql-bin.000001',  MASTER_LOG_POS=154;START SLAVE;SHOW SLAVE STATUS\G

确认 Slave_IO_RunningSlave_SQL_Running 均为 Yes,表示主从同步成功。

第二步:部署 HAProxy 实现负载均衡

在一台新服务器(如 192.168.1.20)上安装 HAProxy:

sudo apt updatesudo apt install haproxy -y

编辑配置文件 /etc/haproxy/haproxy.cfg,在末尾添加:

listen mysql-cluster    bind *:3306    mode tcp    balance leastconn    server db1 192.168.1.10:3306 check    server db2 192.168.1.11:3306 check backup

这里我们将主库设为主节点,从库设为备用(backup),仅在主库故障时接管。如果你希望读写分离,可配置多个监听端口。

重启 HAProxy:

sudo systemctl restart haproxy

第三步:使用 Keepalived 实现 VIP 高可用

为了防止单点故障,我们部署 Keepalived 提供虚拟 IP(VIP)。准备两台服务器(可以是 HAProxy 所在机器),IP 为:

  • haproxy1:192.168.1.20(主)
  • haproxy2:192.168.1.21(备)

在两台机器上安装 Keepalived:

sudo apt install keepalived -y

主节点配置(192.168.1.20)

sudo nano /etc/keepalived/keepalived.confvrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass yourpassword    }    virtual_ipaddress {        192.168.1.100/24    }}

备节点配置(192.168.1.21)

vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 51    priority 90    advert_int 1    authentication {        auth_type PASS        auth_pass yourpassword    }    virtual_ipaddress {        192.168.1.100/24    }}

启动 Keepalived:

sudo systemctl enable --now keepalived

现在,客户端只需连接 192.168.1.100:3306 即可访问数据库。当主 HAProxy 宕机,VIP 会自动漂移到备机,实现无缝切换。

验证高可用效果

你可以通过以下方式测试:

  1. 停止主 MySQL:观察 HAProxy 是否将流量切到从库
  2. 关闭主 HAProxy 服务器:观察 VIP 是否漂移到备机
  3. 使用 ip addr show 查看 VIP 是否存在

总结

通过本教程,你已成功搭建了一套基于 Ubuntu数据库高可用 的完整解决方案。该方案结合了 MySQL主从复制HAProxy负载均衡Keepalived高可用 技术,具备自动故障转移能力,适合中小型企业生产环境使用。

建议定期测试故障切换流程,并做好监控告警(如 Prometheus + Grafana),以确保系统长期稳定运行。

—— 你的高可用之旅,从此刻开始 ——