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 中间件,实现自动读写分离与高可用数据库架构。

 

posted on 2025-05-12 21:59  是水饺不是水饺  阅读(10)  评论(0)    收藏  举报

导航