当前位置: 首页 > news >正文

MySQL: MaxScale架构解析与高可用集群部署实战之插件架构·权限配置·读写分离·监控体系

MaxScale架构与插件体系


MaxScale是由MariaDB公司开发的插件式数据库中间件,提供高可用性、负载均衡及可扩展性支持
核心功能:数据库负载均衡 | 读写分离 | 自动故障转移

其插件体系分为五类:

1 )认证插件 (Authentication Plugin)

  • 验证用户连接时从后端数据库读取mysql.user表信息并缓存
  • 缓存未命中时自动向后端数据库更新用户数据
  • 关键流程:连接请求 → 缓存验证 → 实时更新 → 二次验证

2 )协议插件 (Protocol Plugin)

  • MySQL客户端协议插件:使应用程序将MaxScale识别为标准MySQL服务器(仅需修改连接地址)
  • MySQL服务端协议插件:用于MaxScale连接后端数据库

3 )路由插件 (Router Plugin)

  • readconnroute:实现多服务器读写负载均衡
  • readwritesplit:核心读写分离模块(主写从读)

4 )监控插件 (Monitor Plugin)

  • 实时检测后端数据库状态,确保请求路由至健康节点
  • 支持主从延迟监控(示例参数:max_slave_replication_lag=60

5 )日志过滤插件 (Filter Plugin)

  • 提供基础SQL防火墙功能
  • 支持SQL语句过滤、改写及容错处理

高可用环境部署实战

环境拓扑:

节点IP 地址角色
节点1192.168.3.100从库 (Slave)
节点2192.168.3.101主库 (Master)
节点3192.168.3.102从库 + MaxScale

生产建议:MaxScale 应部署在独立服务器,避免与数据库争抢资源

注:生产环境建议MaxScale独立部署,此处受限于资源与Slave共用节点3
建议:生产环境应将MaxScale部署在独立服务器

安装与配置流程


1 ) 安装步骤

# 1. 下载安装包(需MariaDB账号)
wget https://downloads.mariadb.com/MaxScale/... # 替换为实际URL# 2. 安装依赖库 
yum install libaio libaio-devel # 3. RPM安装 
rpm -ivh maxscale-*.rpm 

2 ) 数据库权限初始化

-- 创建监控账号(需REPLICATION权限) 主库执行
CREATE USER 'maxscale_monitor'@'192.168.3.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'maxscale_monitor'@'192.168.3.%';-- 创建路由账号(需MySQL库读取权限) 主库执行
CREATE USER 'maxscale_router'@'192.168.3.%' IDENTIFIED BY '123456';
GRANT SELECT ON mysql.* TO 'maxscale_router'@'192.168.3.%';
# GRANT SELECT ON mysql.user TO 'maxscale_router'@'192.168.3.%';

3 ) 密码加密(可选)

maxkeys # 生成加密密钥 
maxpasswd 123456 # 输出加密字符串 → 用于配置文件
# 输出:96F3C8DE755EF4F4 (替换配置文件明文密码)

4 ) 核心配置文件 (/etc/maxscale.cnf)

[maxscale]
threads=4  # 工作线程数 (建议≤CPU核心数)# 服务器定义
[server1]
type=server
address=192.168.3.100
port=3306 
protocol=MySQLBackend[server2]
type=server 
address=192.168.3.101 
port=3306
protocol=MySQLBackend[server3]
type=server
address=192.168.3.102
port=3306
protocol=MySQLBackend# 监控模块
[MySQL-Monitor]
type=monitor 
module=mysqlmon 
servers=server1,server2,server3 
user=maxscale_monitor 
passwd=123456  # 或使用加密字符串 
monitor_interval=1000  # 监控频率(毫秒)# 读写分离模块 
[Read-Write-Service]
type=service
router=readwritesplit 
servers=server1,server2,server3 
user=maxscale_router 
passwd=123456 
max_slave_connections=100%  # 从库利用率   使用所有可用Slave
max_slave_replication_lag=60  # 最大延迟秒数 (秒) 排除延迟>60s的Slave # 监听端口 
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MySQLClient 
address=0.0.0.0
port=4006  # 避免与MySQL端口3306冲突 

服务启动与验证


1 ) 启动与管理

maxscale -f /etc/maxscale.cnf  # 启动服务# 检查端口:
netstat -tuln | grep -E '4006|6603'  # 4006为读写服务端口,6603为管理端口 maxctrl -u admin -p mariadb  # 默认账号密码
# maxadmin -u admin -p mariadb    # 登录管理台(默认密码mariadb)旧版

2 )集群状态检查

使用场景对比

命令适用场景功能范围
maxctrl list serversMaxScale 集群管理查看代理层管理的数据库节点状态
SHOW SERVERS数据库内部(如 TiDB/Oracle)显示数据库实例的服务器元数据
maxctrl list servers

输出示例:

┌─────────┬───────────────┬───────┬─────────────┬─────────────────┬──────────┐
│ Server  │ Address       │ Port  │ Connections │ State           │ GTID     │ 
├─────────┼───────────────┼───────┼─────────────┼─────────────────┼──────────┤
│ server1 │ 192.168.3.100 │ 3306  │ 0           │ Slave, Running  │ 0-3000-5 │
│ server2 │ 192.168.3.101 │ 3306  │ 0           │ Master, Running │ 0-3000-8 │
│ server3 │ 192.168.3.102 │ 3306  │ 0           │ Slave, Running  │ 0-3000-5 │
└─────────┴───────────────┴───────┴─────────────┴─────────────────┴──────────┘ 

> show servers 
Server  | Address         | Status  | Role    
--------+-----------------+---------+---------
server1 | 192.168.3.100  | Running | Slave  
server2 | 192.168.3.101  | Running | Master 
server3 | 192.168.3.102  | Running | Slave  > show dbusers Read-Write-Service  # 查看缓存用户

3 ) 读写分离测试

使用MySQL客户端连接MaxScale端口4006:

mysql -h 192.168.3.102 -P 4006 -u app_user -p

执行写操作路由至Master(192.168.3.101),读操作负载均衡至Slave节点

读写分离测试:

-- 客户端连接MaxScale(端口4006)
INSERT INTO orders (...) VALUES (...);  -- 写操作路由至主库 
SELECT * FROM orders;  -- 读操作负载均衡到从库 

高可用架构全景


1 )拓扑图1

MHA故障切换机制
MHA故障切换机制
MySQL Client
MaxScale 192.168.3.102
Master 192.168.3.101
Slave 192.168.3.100
Slave 192.168.3.102
  • MaxScale:承担读写分离与负载均衡
  • MHA:实现主库故障自动切换
  • 协同机制:MaxScale实时感知MHA切换后的主从关系变化

2 )拓扑图2

主从复制
主从复制
应用
MaxScale
主库 192.168.3.101
从库 192.168.3.100
从库 192.168.3.102
MHA Manager

故障转移:MHA监控主库状态,主库宕机时自动切换新主,MaxScale自动适配新拓扑

3 )拓扑图3

双层级容错设计:

  1. 流量层 (MaxScale)

    • 自动读写分离
    • 从库负载均衡
    • SQL 防火墙
  2. 数据层 (MHA)

    • 主库故障秒级切换
    • 从库自动晋升
    • 虚拟 IP 漂移
监控
控制
控制
应用客户端
MaxScale:4006
主库 192.168.3.101
从库 192.168.3.100
从库 192.168.3.102
MHA Manager

4 )拓扑图4

监控
故障切换
Client
MaxScale (读写分离)
主库 (192.168.3.101)
从库 (192.168.3.100)
从库 (192.168.3.102)
MHA Manager
  • 读写分离:客户端通过 MaxScale(端口 4006)访问数据库,写操作路由至主库,读操作负载均衡至从库。
  • 故障转移:由 MHA (Master High Availability) 监控主库状态,触发主从切换后,MaxScale 自动感知新主库

技术细节强化

  1. 主从延迟控制:通过max_slave_replication_lag自动剔除高延迟Slave
  2. 连接池管理:max_slave_connections=100%确保所有从库资源充分利用
  3. 加密安全:生产环境必须使用maxpasswd加密密码
  4. 端口策略:默认3306端口冲突时,改用4006等高位端口

路由策略优化: 若需强制读主库,SQL添加注释:
sql SELECT /* maxscale route to master */ * FROM users;

5 )拓扑图 5

客户端
MaxScale
Master: 192.168.3.101
Slave: 192.168.3.100
Slave: 192.168.3.102
MHA Manager
  • 功能协同:
    • MaxScale:处理读写分离与负载均衡
    • MHA(Master High Availability):监控主节点故障,触发主从切换
    • 联动效果:客户端无感知故障转移,MaxScale自动路由至新Master

NestJS工程示例


1 ) 连接MaxScale示例

// database.providers.ts
import { createPool } from 'mysql2/promise';export const databaseProviders = [{provide: 'DATABASE_POOL',useFactory: async () => {return createPool({host: '192.168.3.102', // MaxScale 节点 port: 4006,            // MaxScale监听端口 user: 'app_user',password: 'securepass',database: 'main_db',connectionLimit: 10,waitForConnections: true});}}
];// user.repository.ts
@Injectable()
export class UserRepository {constructor(@Inject('DATABASE_POOL') private pool: Pool) {}async getUsers(): Promise<User[]> {const [rows] = await this.pool.query(`SELECT id, name FROM users WHERE active = ?`,[1]);return rows as User[];}async createUser(user: UserDTO): Promise<ResultSetHeader> {const [result] = await this.pool.query(`INSERT INTO users (name, email) VALUES (?, ?)`,[user.name, user.email]);return result;}
}

2 )其他方式

// app.module.ts 
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';@Module({imports: [TypeOrmModule.forRoot({type: 'mysql',host: '192.168.3.102', // MaxScale节点IP port: 4006,           // MaxScale监听端口 username: 'app_user',password: 'secure_password',database: 'my_db',autoLoadEntities: true,}),],
})
export class AppModule {}

SQL 操作补充

主从延迟监控(MaxScale 管理端)

SELECT host, port, replication_lag FROM mysql_servers;  
-- 输出示例:
-- host           | port | replication_lag 
-- 192.168.3.100 | 3306 | 0 
-- 192.168.3.102 | 3306 | 120  # 延迟 120 秒(将被自动隔离)

连接负载测试

mysqlslap --host=192.168.3.102 --port=4006 --user=test --password=pass \  --concurrency=100 --iterations=10 --query="SELECT * FROM orders;"

关键优化项

  1. 连接保持:配置 wait_timeout 避免连接过早断开
  2. 故障转移:应用层重试逻辑 + 连接池健康检查
  3. 监控集成:通过 MaxScale REST API 获取实时指标
    curl http://admin:mariadb@192.168.3.102:8989/v1/servers
    
  4. 安全加固:
    • 限制 MaxScale 管理端口(6603)访问
    • 定期轮换加密密钥

架构优势:通过 MaxScale 与 MHA 协同,实现读写流量自动调度与故障秒级切换,数据库不可用时间降至 10 秒内

关键总结

  1. MaxScale通过插件化架构实现灵活扩展,核心价值在于读写分离与负载均衡
  2. 配置需关注监控频率、路由策略及延迟容忍阈值
  3. 生产环境务必独立部署MaxScale节点并使用加密密码
  4. 读写分离由 readwritesplit 插件实现,读负载均衡由路由策略控制
  5. 监控模块通过 mysqlmon 实时检测节点状态与主从延迟
  6. 生产环境需独立部署 MaxScale 并启用密码加密
  7. 结合MHA可实现故障自动转移,形成完整高可用方案
http://www.dtcms.com/a/619084.html

相关文章:

  • 太月星网站建设程序开发简述网站建设的主要步骤
  • Diffusion Model VS TSDiff
  • 网站怎么制作成软件免备案域名
  • 爱用建站下载跨境电商平台有哪些前期费用
  • 利用社交网站做淘宝客酒店网站建设策划书
  • 45_FastMCP 2.x 中文文档之FastMCP集成:Azure (Entra ID) 认证指南
  • 南京定制网站建设怎么收费微商城网站建设资讯
  • Redis错误配置利用-未授权-写webshell公钥计划任务-主从复制
  • 创建网站向导和模板霍山网站建设
  • 8个页面的网站怎么做创意策划是做什么的
  • window.print(),完整用法说明文档,如何打印出样式规范的页面
  • 20.UBOOT
  • 查网站域名备案查询系统一般做门户网站多少钱
  • 卯兔科技西安网站建设google官网入口手机版
  • docker 镜像失效问题
  • 办公室装修效果图片大全云南seo网站关键词优化软件
  • 张家港网站设计制作全民代理平台
  • TensorRT笔记(3):解析样例中BufferManager类的设计
  • 互联网营销具体做什么优化师是做什么的
  • 【C++】红黑树:使用及实现
  • 工业数据库选型指南:深度解析实时数据库力控 vs TDengine
  • 山西自助建站系统平台如何制作网页广告
  • 赣州 做网站中国万网注册网站
  • 变分自编码器(VAE)的原理方法(二)
  • 哈尔滨行业网站深圳建设网站top028
  • 哪个网站可以做结婚请柬免抵退税在哪个网站做
  • 网站开发组织架构图重庆做网站电话
  • 【三维重建1】模型与概念
  • HandyControl 色系管理工具
  • 做网站需要什么人员wordpress 前台 很慢