tikv存储分布问题

config:
server.labels:
zone: eu

不管是proxy 还是tidb还是tikv都配置了这个标签,tikv配置这个标签的作用能否实现我从欧洲proxy节点的请求到tidb欧洲节点的请求,然后tidb会不会tikv欧洲的节点中进行存储数据呢,而不会跨在我tikv的亚洲节点中,tikv我有六台,三台亚洲 三台欧洲

如何知道当前写入的数据是存储到了哪个tikv中,还是说不管从哪个proxy和tidb进来的请求都是根据key的region_id在六台中选一台作为主的进行读写

看这个图,貌似六台都是一样的,根据key随机选的tikv节点:

在 TiDB 集群中配置 zone 标签主要用于实现数据的就近访问和容灾策略
but
仅仅配置 zone 标签并不能自动实现"欧洲请求必须存储在欧洲 TiKV 节点"这样的强制路由

如果想要实现跨地域数据分布的控制可以试试:

  1. 使用 Placement Rules 功能来精确控制数据分布
  2. 配置 Region 的放置规则,指定某些数据必须存放在特定标签的节点上

可以参照文档这里设置
https://docs.pingcap.com/zh/tidb/stable/three-data-centers-in-two-cities-deployment/#labels-设计

placement-rule in sql可以实现

1 个赞

placement-rule + label标签,应该可以满足你的需求

1 个赞

我定义了标签,pd没有需要定义标签嘛?
server_configs—-pd配置文件截图:

pd_servers截图:

tidb_servers截图:

tikv_servers截图:


tikv总的六个节点,三个亚洲三个欧洲

应该没有,因为3个PD,只有1个Leader在工作,另外两个实际是待命状态。tidb和tikv是3个节点都在工作。

可实际我对tidb和tikv定义了标签,当我打亚洲tidb的请求时,数据还是从欧洲的tikv进行读写了,并没有根据我定义的标签进行写入数据,是我tidb或者tikv的标签哪里有问题吗?

是我误解了你的意思,这个方案应该满足不了你。这个方案的本意是为了高可用。即两个区域,其中一个主区域,一个副区域,副区域的选举认为添加延迟。控制leader只在主区域,降低主区域的读写延迟。

有能够指定tikv的存储方案吗,不然我亚洲过来的tidb,要把数据存到欧洲的tikv的话延迟反而还高,读可以接受跨区域读

同一张表,欧洲写一条数据,存储在欧洲tikv,亚洲写一条数据,存储在亚洲tikv?我感觉是不行的,读取的时候,还是要从亚洲和欧洲tikv都读取一遍,然后才返回,不能只读亚洲tikv,没有就返回空吧。

读可以跨没问题,就是写的时候

看上去这个支持到表的存放。
https://docs.pingcap.com/zh/tidb/stable/placement-rules-in-sql/#使用方法

按表的和业务脱离有点大了,看来实现不了

tiproxy和tidb通过标签进行打请求,我tidb和tikv都是一个区域的都是欧洲德国的,为什么延迟会这么高,tidb和tikv机器之间相互看延迟又是才不到1毫秒的延迟,但查数据却七八百的延迟:

和我pd机器有关系吗,我pd机器都是亚洲的机器,但pd不是做调度作用应该不涉及tidb和tikv之间通信的延迟吧

我是想实现这种方案:tidb和tikv存储分布问题

我是想实现这种方案:https://asktug.com/t/topic/1040838,该怎么处理

如果表级别的放置策略不行,这个database级别的放置策略能满足你的需求吗https://docs.pingcap.com/zh/tidb/stable/placement-rules-in-sql/#为数据库指定默认的放置策略