怎样实现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

八、你可以告诉我:

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

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

相关推荐:

如何卸载Linux Compton

在Linux上卸载Compton(或它的常见继任者picom)取决于你当初是如何安装的。下面按常见情况分别说明。 一、先确认你装的是哪个 很多系统里“compton”实际是picom(compton已停止维护): whichcompton whichpicom 或者: compton--versio...

怎样优化Compton性能

Compton是Xorg下的轻量级合成管理器(现在多被picom取代),优化它的性能可以从配置、渲染后端、特效、硬件加速、系统环境等方面入手。下面按实用程度给你一套优化思路。 一、优先建议:使用picom而不是旧版Compton 旧版Compton已停止维护,picom是继任者,性能和兼容性更好: ...

linux hostname是什么

在Linux中,hostname(主机名)是用来标识一台计算机在网络中的名称。 一、hostname是什么? hostname是Linux系统的一个字符串标识 用于: 本地系统识别 网络通信(如SSH、局域网) 日志记录 通常是一个简短的名字,例如:myserver dev-machine loca...

Compton如何设置透明

在Compton(现在多指picom的前身)里设置透明,主要有几种方式,取决于你想让窗口透明还是桌面/背景透明。下面按常见场景说明。 一、确认你用的是Compton还是Picom 很多发行版已经用picom代替compton: whichcompton whichpicom 有picom→用pico...

linux hostname怎么设置

在Linux中设置hostname(主机名)有多种方式,取决于你用的是临时设置还是永久设置,以及发行版(systemd/非systemd)。下面按常见情况说明。 一、临时设置(重启后失效) sudohostname新主机名 示例: sudohostnamemyserver ⚠️只影响当前运行环境,重...

Compton能替代Picom吗

简短回答:可以替代,但要看你的使用场景和需求。 下面分情况说明: 1.Compton与Picom的关系 Compton是早期的一个X11合成管理器(compositor),现在已经基本停止维护。 Picom是Compton的一个活跃分支(fork),可以理解为: Picom=Compton的继任者 ...

linux hostname在哪查看

在Linux中,查看hostname(主机名)有以下几种常用方法: 1️⃣直接查看当前主机名 hostname 或 cat/etc/hostname 2️⃣使用hostnamectl(推荐,适用于systemd系统) hostnamectl 输出示例: Statichostname:myserver...

怎样解决Compton黑屏

Compton是Xorg下的一个老牌合成器(compositor),现在多数发行版已改用picom(Compton的分支)。出现“黑屏”通常不是显卡坏了,而是合成器参数、显卡驱动或OpenGL渲染方式不匹配。下面按最常见→较少见的顺序排查。 一、先确认你用的是Compton还是Picom which...