前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式 | 几步快速拥有读写分离

分布式 | 几步快速拥有读写分离

原创
作者头像
爱可生开源社区
发布2022-06-28 14:39:52
3620
发布2022-06-28 14:39:52
举报
文章被收录于专栏:爱可生开源社区

作者:王娟

爱可生 dble 团队测试成员,主要负责 dble 需求测试,自动化编写和社区问题解答。人狠话不多。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


dble 从 3.20.10 版本开始⽀持单纯的读写分离功能,可以和分库分表功能分开使⽤。

如何快速拥有读写分离呢?

第一步,准备好一组 mysql 实 例,并确保这组 mysql 实例的主从复制关系正常。如下使用一主二从的mysql:

主:172.100.9.6:3307

从:172.100.9.2:3307、172.100.9.3:3307

分别到2个从实例上执行 show slave status ,检查复制关系是否正常。

第二步,在 db.xml 配置 mysql 实例。如下:

代码语言:sql
复制
<dbGroup rwSplitMode="1" name="ha_group1" delayThreshold="100">
    <heartbeat>show slave status</heartbeat>
    <dbInstance name="hostM1" password="******" url="172.100.9.6:3307" user="test" maxCon="1000" minCon="10" primary="true"/>
    <dbInstance name="hostS1" password="******" url="172.100.9.2:3307" user="test" maxCon="1000" minCon="10" readWeight="1"/>
    <dbInstance name="hostS2" password="******" url="172.100.9.3:3307" user="test" maxCon="1000" minCon="10" readWeight="1"/>
</dbGroup>

配置 dbGroup 时需要注意以下参数:

rwSplitMode: 读操作的负载均衡模式,可选值 0/1/2/3 在进⾏读负载均衡的时候会根据这个配置进⾏ 0:不做均衡,直接分发到主实例,从实例将被忽略,不会尝试建⽴连接池,但会有⼼跳连接 1:读操作在所有从实例中均衡,当所有从实例都不可⽤时,下发语句会报错。 2:读操作在所有实例中均衡。 3:读操作在所有从实例中均衡,当所有从实例都不可⽤时,将语句发往主实例。

delayThreshold:指定主从延迟阀值,单位秒,默认 -1 ,表⽰⽆延迟 在进⾏读取负载均衡的时候会根据最近⼀次的⼼跳状态以及读库和主库的延迟进⾏判断,如果主从复制不⼯作或者复制延迟超过 delayThreshold 配置,则认为此节点不适合进⾏读取,依赖于⼼跳语句为 show slave status 。如果 delayThreshold=-1 那么读负载均衡选取的时候不会进⾏延迟检测。

readWeight:节点权重(负载均衡时候使⽤) 负载均衡过程中会查看所有节点的权重是否相等,如果不相等,那么就会根据权重来配置压⼒。该值需是⼤于等于 0 的整数。如果配为 0 表⽰该节点不参与读。需注意,总权重(所有节点权重之和)必须⼤于 0。

如何区分读节点与写节点?

写节点:primary="true"

读节点:primary 没配置或者 primary="false"

第三步,user.xml增加读写分离用户。通过dbGroup指定到db.xml里dbGroup的name。

代码语言:sql
复制
<rwSplitUser name="rwSplit1" password="111111" dbGroup="ha_group1" />

第四步,到 dble 管理端执行 reload @@config_all ,使配置生效。这时就可以使用新创建的读写分离用户 rwSplit1 登录 dble 了。

如何验证读写分离配置是否生效呢?

分别到 3 个 mysql 实例执行:set global general_log = on ,开启 general log 。

使用 rwSplit1 用户登录 dble 8066 端口,执行以下 sql :

insert into test_table values (1, 'name1'),(2, 'name2');

select * from test_table;

查看写节点的 general log ,insert 语句发到写节点上。

分点查看 2 个读节点的 general log ,select 语句发到其中一个读节点上。

补充:

1、同时开启 dble 读写分离和分库分表的功能时,分库分表引⽤的 dbGroup和 读写分离引⽤的 dbGroup 必须相互独⽴。rwSplitUser 引⽤的 dbGroup ,仅需在 db.xml 中定义即可。

2、多个 rwSplitUser 可以引⽤同⼀个 dbGroup 。

3、dble 读写分离哪些语句发往主实例,哪些语句发往从实例呢?参考:https://github.com/actiontech/dble/discussions/3145

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何快速拥有读写分离呢?
  • 如何验证读写分离配置是否生效呢?
  • 补充:
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档