怎样实现Linux MariaDB负载均衡
在 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
八、你可以告诉我:
- 读多还是写多?
- 是否已有主从复制?
- 数据库规模(QPS / 数据量)?
- 是否要求高可用?
我可以直接给你一套 完整的部署方案 + 配置文件模板 ✅