当前位置:网站首页>分布式 | 几步快速拥有读写分离
分布式 | 几步快速拥有读写分离
2022-06-29 17:39:00 【ActionTech】
作者:王娟
爱可生 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 实例。如下:
<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。
<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
边栏推荐
- Online text digit recognition list summation tool
- C语言练习----指针字符串、链表
- 浏览器大尺寸截屏
- 0 basic self-study STM32 (wildfire) - register lit LED
- 剖析下零拷贝机制的实现原理,适用场景和代码实现
- mysql如何查询表的字符集编码
- 力扣每日一题 06.29 两数相加
- R语言epiDisplay包的aggregate函数将数值变量基于因子变量拆分为不同的子集,计算每个子集的汇总统计信息、aggregate.data.frame函数包含缺失值的情况下分组统计结果为NA
- 使用autoIt 上传文件
- 关于Go中两个模块互相调用的场景解决方案
猜你喜欢

自动收售报机
![填充每个节点的下一个右侧节点指针[利用好每个点->尽可能降低时空复杂度]](/img/33/bda0a898bfe3503197026d1f62e851.png)
填充每个节点的下一个右侧节点指针[利用好每个点->尽可能降低时空复杂度]

DevCloud加持下的青软,让教育“智”上云端

Online sql to CSV tool

Leetcode daily question - 535 Encryption and decryption of tinyurl

腾讯云发布自动化交付和运维产品Orbit,推动企业应用全面云原生化

如何使用B/S开发工具DevExtreme的图表控件 - 自定义轴位置?

How MySQL queries character set codes of tables

位图的详细介绍及模拟实现

How to create and delete MySQL triggers
随机推荐
填充每个节点的下一个右侧节点指针[利用好每个点->尽可能降低时空复杂度]
人脸识别4-百度商用方案调研
自定義HandlerInterceptor攔截器實現用戶鑒權
R language uses GLM function to build Poisson logarithm linear regression model, processes three-dimensional contingency table data to build saturation model, uses exp function and coef function to ob
The fixed assets management system enables enterprises to dynamically master assets
Mysql中锁的使用场景是什么
使用 SSH 方式拉取代码
[webdriver] upload files using AutoIT
What is a SCM system? What are the advantages of a supply chain management system?
数字孪生能源系统,打造低碳时代“透视”眼
基于STM32F103ZET6库函数串口实验
Bags of Binary Words for Fast Place Recognition in Image Sequenc
Selenium file upload method
Repair of JSON parsing errors in a collection
Digital twin energy system, creating a "perspective" in the low-carbon era
mysql查询视图命令是哪个
C language practice ---- pointer string and linked list
SRM系统是什么系统?如何应用SRM系统?
Face recognition 4- research on Baidu commercial solutions
Error:Connection refused: connect