从理论到实践
在第一部分中,我们探讨了 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)中成为可能。
配置最佳实践
以下是来自实际经验的一些建议:
-
始终在配置文件中使用加密密码。 MaxScale 提供了
maxkeys工具来生成加密密钥。 -
启用自动故障转移,使用
auto_failover=true,但要在预生产环境中定期测试。 -
根据负载调整线程数。
threads=auto是一个好的默认值,但对于非常高的负载量(>50,000 查询/秒),可能需要手动调优。 -
通过
max_slave_replication_lag监控复制延迟。 值过于宽松会将读请求发送到延迟的从节点。值过于严格会将所有读请求集中到主节点。 -
谨慎使用过滤器。 每个过滤器都增加一层处理。特别是
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。
评论 (0)
暂无评论。
发表评论