PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 30 篇文章
    • MySQL 10 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 3 篇文章
    • ProxySQL 2 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← 返回博客

MaxScale:远不止是一个反向 SQL 代理(第二部分)

发布于 2025年9月1日 作者 Sylvain ARBAUDIE
maxscale mariadb proxy configuration
分享 X LinkedIn Facebook Email PDF
MaxScale:远不止是一个反向 SQL 代理(第二部分)

从理论到实践

在第一部分中,我们探讨了 MaxScale 的架构能力:协议、路由器、监控器和过滤器。这第二部分是一个实践指南:如何日常安装、配置和管理 MaxScale。

安装

MaxScale 可通过官方 MariaDB 仓库获取。在 Debian/Ubuntu 上:

curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup \
  | sudo bash -s -- --mariadb-maxscale-version=24.02

sudo apt-get install maxscale

主配置文件位于 /etc/maxscale.cnf。它是一个 INI 格式的文件,按清晰定义的部分组织。

配置文件剖析

maxscale.cnf 文件按六种类型的部分组织,每个部分由方括号标头标识。

[maxscale] 部分 — 全局配置

[maxscale]
threads        = auto
log_info       = false
admin_host     = 0.0.0.0
admin_port     = 8989
admin_secure_gui = true
  • threads=auto:MaxScale 自动检测可用的 CPU 核心数。
  • admin_host/admin_port:启用 MaxGUI Web 界面和 REST API。
  • admin_secure_gui:为管理界面启用 HTTPS。

[server] 部分 — 服务器定义

每个 MariaDB / MySQL 后端服务器都单独声明:

[db-master]
type     = server
address  = 10.0.1.10
port     = 3306
protocol = MariaDBBackend

[db-slave1]
type     = server
address  = 10.0.1.11
port     = 3306
protocol = MariaDBBackend

[db-slave2]
type     = server
address  = 10.0.1.12
port     = 3306
protocol = MariaDBBackend

每个 [server] 部分带有一个逻辑名称(此处为 db-master、db-slave1、db-slave2),监控器和服务将引用这些名称。

[monitor] 部分 — 拓扑监控

监控器是自动检测复制拓扑和每个节点状态的组件:

[replication-monitor]
type            = monitor
module          = mariadbmon
servers         = db-master, db-slave1, db-slave2
user            = maxscale_monitor
password        = encrypted_password_here
monitor_interval = 2000
auto_failover    = true
auto_rejoin      = true
  • mariadbmon:用于 MariaDB / MySQL 主从拓扑的标准监控器。
  • auto_failover:如果主节点丢失,MaxScale 自动提升一个从节点。
  • auto_rejoin:恢复上线的前主节点自动被重新配置为从节点。

对于 Galera,你应该使用 galeramon 而非 mariadbmon。

[filter] 部分 — 查询转换

过滤器拦截并修改 SQL 流:

[query-log]
type   = filter
module = qlafilter
filebase = /var/log/maxscale/queries
flush   = true

[regex-rewrite]
type    = filter
module  = regexfilter
match   = SELECT.*FROM\s+legacy_table
replace = SELECT * FROM new_table

qlafilter 记录所有查询(用于审计)。regexfilter 允许即时重写查询,无需修改应用程序。

[service] 部分 — 组件组装

服务将服务器、监控器、过滤器和路由器连接在一起:

[rw-service]
type     = service
router   = readwritesplit
servers  = db-master, db-slave1, db-slave2
user     = maxscale_service
password = encrypted_password_here
filters  = query-log | regex-rewrite

max_slave_connections    = 100%
max_slave_replication_lag = 5s
  • readwritesplit:写操作发送到主节点,读操作分布到从节点。
  • max_slave_replication_lag:延迟超过 5 秒的从节点将被暂时排除在路由之外。
  • filters:过滤器通过管道符 | 串联。

[listener] 部分 — 网络入口点

监听器将服务暴露在网络端口上:

[rw-listener]
type     = listener
service  = rw-service
protocol = MariaDBClient
port     = 4006
address  = 0.0.0.0

应用程序通过端口 4006 连接到 MaxScale,就像连接到标准的 MariaDB / MySQL 服务器一样。从协议角度来看,MaxScale 是透明的。

MaxGUI:Web 界面

自 MaxScale 2.5 起,MaxGUI Web 界面提供了基础设施的完整图形视图。通过 https://maxscale-host:8989 访问,它允许你:

  • 实时可视化拓扑(主节点、从节点、连接状态)
  • 查看性能指标(每秒查询数、延迟、活跃连接)
  • 管理服务器(排空、维护、添加)
  • 浏览日志和告警

MaxGUI 是一个监控工具,而非配置工具。配置变更通过 maxscale.cnf 文件或 REST API 进行。

MaxCtrl:命令行工具

MaxCtrl 是 MaxScale 的官方 CLI。它与 REST API 通信,提供直观的语法:

# 列出服务器及其状态
maxctrl list servers

# 将服务器设为维护模式
maxctrl set server db-slave1 maintenance

# 移除维护模式
maxctrl clear server db-slave1 maintenance

# 列出服务及其统计信息
maxctrl list services

# 查看复制拓扑
maxctrl show monitor replication-monitor

# 动态创建过滤器
maxctrl create filter my-filter regexfilter \
  match="SELECT 1" replace="SELECT 2"

MaxCtrl 相对于直接编辑文件的优势在于变更立即生效,无需重启。

REST API:自动化

MaxScale 的 REST API 是自动化的基础。它通过 HTTP/JSON 端点暴露所有功能:

# 获取服务器列表
curl -s -u admin:password https://maxscale:8989/v1/servers | jq

# 手动故障转移
curl -X POST -u admin:password \
  https://maxscale:8989/v1/monitors/replication-monitor/failover

# 获取服务指标
curl -s -u admin:password \
  https://maxscale:8989/v1/services/rw-service | jq '.data.attributes.statistics'

REST API 使得将 MaxScale 集成到 CI/CD 流水线、监控系统(Prometheus、Grafana)和编排工具(Ansible、Terraform)中成为可能。

配置最佳实践

以下是来自实际经验的一些建议:

  1. 始终在配置文件中使用加密密码。 MaxScale 提供了 maxkeys 工具来生成加密密钥。

  2. 启用自动故障转移,使用 auto_failover=true,但要在预生产环境中定期测试。

  3. 根据负载调整线程数。 threads=auto 是一个好的默认值,但对于非常高的负载量(>50,000 查询/秒),可能需要手动调优。

  4. 通过 max_slave_replication_lag 监控复制延迟。 值过于宽松会将读请求发送到延迟的从节点。值过于严格会将所有读请求集中到主节点。

  5. 谨慎使用过滤器。 每个过滤器都增加一层处理。特别是 regexfilter,如果正则表达式很复杂,可能会对性能产生显著影响。

完整配置示例

总结一下,以下是一个主节点 + 2 个从节点拓扑的配置文件示例:

[maxscale]
threads = auto
admin_host = 0.0.0.0
admin_port = 8989

[db-master]
type = server
address = 10.0.1.10
port = 3306
protocol = MariaDBBackend

[db-slave1]
type = server
address = 10.0.1.11
port = 3306
protocol = MariaDBBackend

[db-slave2]
type = server
address = 10.0.1.12
port = 3306
protocol = MariaDBBackend

[replication-monitor]
type = monitor
module = mariadbmon
servers = db-master, db-slave1, db-slave2
user = maxscale_monitor
password = <encrypted>
monitor_interval = 2000
auto_failover = true
auto_rejoin = true

[rw-service]
type = service
router = readwritesplit
servers = db-master, db-slave1, db-slave2
user = maxscale_service
password = <encrypted>
max_slave_replication_lag = 5s

[rw-listener]
type = listener
service = rw-service
protocol = MariaDBClient
port = 4006

结论

MaxScale 通过一个清晰、结构化的 INI 文件进行配置。六种类型的部分足以描述完整的基础设施:全局配置、服务器、监控器、过滤器、服务和监听器。

日常管理依赖三个互补的工具:MaxGUI 用于可视化监控,MaxCtrl 用于命令行操作,REST API 用于自动化。三者共同构成了管理企业级 SQL 代理的完整生态系统。


本文最初发表于 Medium。

分享 X LinkedIn Facebook Email PDF
← 返回博客

评论 (0)

暂无评论。

发表评论

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept