mysql中间件dble的读写分离配置

avatar 2026年7月16日18:40:04 评论 4 次浏览

一、环境与版本说明

  • DBLE 版本:3.23.08.0

  • 依赖环境:JDK 1.8+ (推荐使用 1.8.0_202 及以上版本)

  • 本文示例配置

    • DBLE 服务地址127.0.0.1

    • 管理端口9066 (用于管理)

    • 服务端口8066 (用于业务连接)

    • MySQL 主库172.28.108.60:3306

    • MySQL 从库172.28.108.63:3306

安装前请确保后端 MySQL 实例已完成主从复制配置,且复制状态正常。


二、安装与启动

  1. 下载安装包 从官方 GitHub 仓库下载 3.23.08.0 版本的 tar 压缩包:

    wget https://github.com/actiontech/dble/releases/download/3.23.08.0/dble-3.23.08.0.tar.gz
    tar -xzvf dble-3.23.08.0.tar.gz -C /usr/local/
    cd /usr/local/dble
  2. 基本参数检查 在启动前,建议确认 conf/bootstrap.cnf 中 JVM 内存分配和基础端口是否合理。对于生产环境,建议调整 -Xmx-Xms 参数。

  3. 启动 DBLE

    ./bin/dble start

    启动后,可通过以下命令检查服务状态和端口监听:

    ./bin/dble status
    netstat -tlnp | grep -E '8066|9066'

三、核心配置文件详解

DBLE 3.23.08.0 版本的配置由 conf 目录下的多个 XML 文件共同完成。以下是实现读写分离必备的三个核心文件及其配置要点。

配置文件均位于 $DBLE_HOME/conf 目录下。

1. db.xml:后端数据源配置

此文件定义 DBLE 连接后端 MySQL 实例的连接池信息。rwSplitMode 参数控制读写分离的路由策略。

  • rwSplitMode="3":读操作尽量在所有从实例中均衡(当从库不可用时,会降级到主库)。

<dble:db xmlns:dble="http://dble.cloud/" version="4.0">
    <!-- 主从实例配置在同一 dbGroup 中 -->
    <dbGroup name="db_dble" rwSplitMode="3" delayThreshold="30">
        <!-- 心跳检测语句,用于监控后端实例健康状态 -->
        <heartbeat>show slave status</heartbeat>
        <!-- 主库实例配置 -->
        <dbInstance name="instanceM1" url="172.28.108.60:3306" user="root" password="X" maxCon="1000" minCon="30" primary="true" readWeight="1"/>
        <!-- 从库实例配置 -->
        <dbInstance name="instanceS1" url="172.28.108.63:3306" user="root" password="X" maxCon="1000" minCon="30" primary="false" readWeight="10" />
    </dbGroup>
</dble:db>

2. user.xml:用户访问权限配置

此文件定义 DBLE 的访问用户。使用 rwSplitUser 可以让该用户仅拥有读写分离权限,而无需加载分库分表功能(sharding.xml),这与 3.20.10.0 版本及以后引入的纯读写分离特性一致。

<dble:user xmlns:dble="http://dble.cloud/" version="4.0">
    <!-- 管理端用户,用于连接 9066 管理端口 -->
    <managerUser name="admin" password="123456" maxCon="200"/>
    <!-- 读写分离专用用户,无需配置 schemas,直接指向 dbGroup -->
    <rwSplitUser name="rwuser" password="123456" dbGroup="db_dble" maxCon="20"/>
</dble:user>

3. sharding.xml:分库分表规则配置(非必须)

如果只使用读写分离,可以保留此文件中的空配置或默认内容,甚至可以不创建此文件。DBLE 会依据 user.xml 中用户类型决定是否加载分片规则。

4.bootstrap.cnf:JVM与系统级参数

这是您之前提醒我的关键文件,必须配置fakeMySQLVersion与后端MySQL版本兼容。

# 关键配置:伪造的MySQL版本,必须 <= 后端MySQL最低版本
-DfakeMySQLVersion=5.7.39

# 基础端口配置
-DserverPort=8066          # 业务端口
-DmanagerPort=9066         # 管理端口

# 内存配置(根据实际调整)
-Xmx4G
-Xms1G

# 连接超时相关(虽然socketTimeout无法修改,但sqlExecuteTimeout可调)
-DsqlExecuteTimeout=900    # SQL执行总超时,单位秒

# 其他保留默认...

配置说明

  • fakeMySQLVersion=5.7.39:必须与您的实际MySQL版本一致或更低,否则DBLE启动时会报版本不兼容错误。

  • 这个文件不需要也不支持添加db.socketTimeoutbackSocketSoTimeout,我们之前已验证。

5. sharding.xml:分库分表规则

在纯读写分离场景下,此文件不需要配置,可以直接删除或保留默认空配置。因为rwSplitUser会指导DBLE跳过加载此文件。

6. cluster.cnf:集群协调配置

如果使用单机模式(不依赖ZooKeeper),保持默认即可:

clusterEnable=false

四、应用连接与验证

完成配置后,重启 DBLE 使配置生效。

./bin/dble restart
  1. 连接测试

    mysql -urwuser -p123456 -h127.0.0.1 -P8066
  2. 验证读写分离 执行 SQL 后,分别在后端 MySQL 主从库上开启 general_log 进行验证:

    -- 在主从库上分别执行,检查 SQL 执行记录
    SET GLOBAL general_log = 'ON';
    SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10;
    • DML 语句 (INSERT/UPDATE/DELETE):应只在主库 172.28.108.60 上出现。

    • 查询语句 (SELECT):应分发到从库 172.28.108.63 上,并遵循 readWeight 设定的权重(示例中从库权重为 10)。


五、关键注意事项

  1. 配置参数不可随意修改:根据之前的排查,db.xml 中的 <dbInstance> 标签不支持添加 connectionProperties<property> 或在 url 中拼接 socketTimeout 等参数。错误的修改会导致 DBLE 无法启动,请严格参考上述示例配置。

  2. 超时问题:如遇到存储过程或复杂查询执行超时,建议优先优化 SQL 或调整 MySQL 服务端的 net_read_timeoutnet_write_timeout 参数,而不是试图修改 DBLE 配置文件。

  3. 版本差异:不同 DBLE 版本(如 v3.20.10.0v3.23.08.0)的配置文件结构和特性可能存在差异,配置前请确认官方文档

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: