0
2
0
0
专栏/.../

TIDB 利用follower 角色实现读写分离

 watermelon_cn  发表于  2024-11-27
原创

背景

系统部署 架构:TiDB 6.5.11 版本,共使用 6 台服务器,数据使用 5+1 副本,使用 DR AUTO-SYNC 方式部署,同城中心的 TiKV 节点的角色是 Follower 和 Learner ,平常不参与 SQL 执行过程,仅与主中心保持同步。

为提升同城中心的 TiKV 节点的资源利用,减少位于同城中心的 DataX 节点在数据抽取过程中占用大量双中心间的网络带宽,计划启用 Follower read 功能从同城中心的 TiDB 节点抽取时使用同城中心的 TiKV 节点上的数据副本。

系统拓扑如下:

image.png

会话中配置tidb_replica_read='closest-replicas‌'后,会自动从同 zone 的 tikv 节点的 follower 角色副本上读取,同时因为同城中心只有 follower 节点,所以实现节点角色读写分离和同城中心网络流量的自包含。

配置过程

•          节点配置

Follower read 功能固定使用节点的 zone 标签,同时也为两中心切换角色对调做准备,在集群中所有的 TiDB 节点和 TiKV 节点统一加上 zone 标签。

使用 tiup cluster edit-config 配置节点的 zone 标签,需要注意的是 tidb 使用 label 小节,tikv 使用 serverlabel 小节。zone 序号和 dc 序号保持一致。因为 tidb 其他标签没有使用,所以只配置 zone 的值。

image.png

使用 pd-ctl 配置并查看

SQL

pd-ctl config set location-labels dc,zone,logic,host

pd-ctl config show

•          DR AUTO-SYNC 专属配置

保存 DR AUTO-SYNC 配置 JSON

Shell

pd-ctl config placement-rules rule-bundle load --out="dr1.json"

编辑节点的标签层次

image.png

导入 DR AUTO-SYNC 配置 JSON

Shell

pd-ctl config placement-rules rule-bundle save --in="dr1.json"

 

•          核对配置

○        使用 dashboard

 查看 dashboard 的存储拓扑,查看标签是否正确。

○        使用 showconfig 查看配置

SQL> show config where name like "%label%"

 

只读业务使用方法

•          ETL 在会话中增加会话变量,会话启动后预先执行

Shell

SET SESSION tidb_replica_read = 'closest-replicas‌';

也可以考虑配置在 jdbc url 中, 添加  &sessionVariables=tidb_replica_read='closest-replicas‌'

后期可考虑使用的读写分离场景。

•          逻辑备份 dumpling 工具,使用 --params 参数添加变量。

•          工作人员的业务后台查询平台。

需要注意的是 follower read 的读取配置和 MySQL 读取从库的区别,并不限制应用只能是只读的应用,只是要求读取时使用 follower。如果需要完全的只读要求,需要配合限制用户的权限为 select。

0
2
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论