MaxScale 基础配置
一、MaxScale 基础配置 1. 安装与部署 参考[1][3]步骤安装 MaxScale: bash Copy Code # 创建用户与目录 groupadd maxscale useradd -g maxscale maxscale mkdir -p /usr/local/maxscale/var/lib/maxscale wget https://dlm.mariadb.com/xxx/maxscale-xxx.tar.gz tar -zxvf maxscale-xxx.tar.gz -C /usr/local/maxscale chown -R maxscale:maxscale /usr/local/maxscale 2. 配置读写分离 编辑 /etc/maxscale.cnf,定义服务模块与路由规则: ini Copy Code # 主从服务器定义 [server1] type=server address=192.168.40.132 port=3306 [server2] type=server address=192.168.40.133 port=3306 # 读写分离模块 [Read-Write-Service] type=service router=readwritesplit router_options=slave_selection_criteria=LEAST_CURRENT_OPERATIONS servers=server1, server2 user=maxscale password=5CD3AF1688D20ECED2BECEF15C075BC6B02375FE27FFCAC3A12A5FFCBE4FB16C # 加密密码 # 监听器 [Listener] type=listener service=Read-Write-Service protocol=MariaDBClient port=6033 二、.NET Core 应用集成 1. 连接字符串配置 在 appsettings.json 中指向 MaxScale 监听端口: json Copy Code { "ConnectionStrings": { "Default": "Server=192.168.40.134;Port=6033;Database=DemoDb;User=appuser;Password=123456;" } } 2. EF Core 读写分离控制 通过 TagWith() 添加 SQL 注释强制主库路由: csharp Copy Code // 默认读操作路由到从库 var data = _context.Products.Where(p => p.Price > 100).ToList(); // 强制路由到主库(写入或强一致性读取) var product = _context.Products .TagWith("/* maxscale route to master */") .FirstOrDefault(p => p.Id == 100); 3. 事务处理 在显式事务中自动路由到主库: csharp Copy Code using (var transaction = _context.Database.BeginTransaction()) { // 事务内操作默认路由至主库 _context.Orders.Add(new Order { Amount = 500 }); await _context.SaveChangesAsync(); transaction.Commit(); } 三、验证与调试 步骤 验证方法 MaxScale 运行状态 maxctrl list services 检查 Read-Write-Service 状态是否为 Running SQL 注释路由 查看 MaxScale 日志,确认包含 maxscale route to master 的请求路由到主库 主从同步延迟 执行 SHOW SLAVE STATUS 验证 Seconds_Behind_Master 接近 0 四、注意事项 注释格式严格性 SQL 注释必须为 /* ... */,且中间无换行,否则 MaxScale 无法识别。 负载均衡策略 可调整 router_options(如 master_reconnection=true)优化主库故障恢复逻辑。 版本兼容性 MaxScale ≥2.3 且配置 comment_syntax 选项以支持 SQL 注释路由。 通过此方案,.NET Core 应用可无缝接入 MaxScale 中间件,实现自动读写分离与高可用数据库架构。