温馨提示×

怎样实现Linux MariaDB负载均衡

小樊
66
2026-06-30 14:49:32
栏目: 云计算

在 Linux 上实现 MariaDB 负载均衡,常见方案取决于你的业务场景(读多写少、高可用、分布式写等)。下面按 由浅入深、常用方案 给你一个完整说明。


一、先明确:MariaDB 负载均衡的本质

MariaDB 是 关系型数据库,不像 Web 服务那么容易横向扩展:

  • 写操作(INSERT/UPDATE/DELETE)
    → 通常只能落在 主节点
  • 读操作(SELECT)
    → 可以分散到 多个从节点

✅ 所以常见架构是:

Master(写)
   |
Slave1、Slave2、Slave3(读)

负载均衡 ≠ 所有节点都能写


二、常见实现方案总览

方案 适合场景 是否推荐
应用层读写分离 简单项目 ✅
数据库中间件(MaxScale / ProxySQL) 企业级 ✅✅✅
Keepalived + VIP 高可用 ✅
MySQL Router MariaDB 兼容 ✅
多主复制(Galera) 分布式写 ⚠️
LVS / HAProxy 纯 TCP 负载 ⚠️(不智能)

三、最常见方案:读写分离 + 负载均衡

方案 1:应用层实现(最简单)

架构

App
 ├─ 写 → Master
 └─ 读 → Slave1 / Slave2

实现方式

  • 在代码中维护两个数据源
  • 或使用框架(如 MyBatis、Spring Boot)

✅ 优点

  • 简单
  • 无额外组件

❌ 缺点

  • 应用复杂
  • 主从切换难

方案 2:使用 ProxySQL(强烈推荐 ✅)

架构

App
  |
ProxySQL
  |
  ├─ Master(写)
  └─ Slave(读)

ProxySQL 特点

  • 自动读写分离
  • 查询路由
  • 连接池
  • 故障自动切换
  • MariaDB / MySQL 通用

安装 ProxySQL(示例:CentOS / Rocky / Alma)

yum install proxysql -y
systemctl start proxysql
systemctl enable proxysql

默认管理端口:

  • Admin:6032
  • 客户端:6033

配置 ProxySQL

1️⃣ 登录管理端

mysql -u admin -padmin -h 127.0.0.1 -P 6032

2️⃣ 添加 MariaDB 后端节点

INSERT INTO mysql_servers (hostgroup_id, hostname, port)
VALUES
(1, '192.168.1.10', 3306),  -- master
(2, '192.168.1.11', 3306); -- slave

3️⃣ 定义读写规则

INSERT INTO mysql_query_rules (rule_id,active,match_pattern,destination_hostgroup,apply)
VALUES
(1,1,'^SELECT.*FOR UPDATE$',1,1),
(2,1,'^SELECT',2,1);

4️⃣ 用户映射

INSERT INTO mysql_users (username,password,default_hostgroup)
VALUES ('appuser','apppass',1);

5️⃣ 保存并加载

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

✅ 应用只需连接 ProxySQL:

mysql -h proxysql_ip -P 6033 -u appuser -p

四、高可用方案:Keepalived + VIP

防止 ProxySQL / DB 单点故障:

Keepalived
    |
VIP(浮动IP)
    |
ProxySQL1 / ProxySQL2

Keepalived 作用

  • VIP 漂移
  • 主备自动切换

五、多主写场景:Galera Cluster(MariaDB Cluster)

特点

  • 多节点可写
  • 同步复制
  • 强一致性

风险

  • 写入冲突
  • 延迟敏感
  • 不适合大事务

✅ 适合:

  • 多数据中心
  • 小型写密集型业务

六、不推荐但常见的错误方案

❌ 直接用 HAProxy / LVS 负载 MariaDB
→ 无法区分读写
→ 事务容易出问题


七、推荐架构(生产环境)

✅ 标准生产级架构

App
 |
ProxySQL(多节点)
 |
 ├─ MariaDB Master
 ├─ MariaDB Slave1
 ├─ MariaDB Slave2
 |
Keepalived + VIP

八、你可以告诉我:

  1. 读多还是写多?
  2. 是否已有主从复制?
  3. 数据库规模(QPS / 数据量)?
  4. 是否要求高可用?

我可以直接给你一套 完整的部署方案 + 配置文件模板 ✅

0 踩