如下图中的文件94_103_6ff34803059b51f62fa4bddae19647c8e0db22c9db17931ba4cc39e4f5f188d1_1718349131300_default.sst,在21.3、21.4两个节点上均有读取请求:
看你配置,备份数据是放在一个共享文件夹里的话,有多个副本肯定会被 多个节点读取
1 个赞
因为你一个文件里的数据会在多个region,多个region可能在每个节点都存在
不是共享存储的问题吧,这样备份会分散到各个服务器上,恢复的时候最好放到一起,
恢复的时候自动打散
数据肯定是放一起的额,不然br找不到想要的文件就会报错退出了,这里是成功恢复了的。
自动打散是什么意思呢?
单个SST包含多个region,里面的多个region在自动打散到不同的store。
region是最小的单元了。sst里面包含多个region。可以将sst里面的region1/4/7放到store1,2/5/8放到store2,3/6/9放到store3.
照这么说的话,这个现象不合理呢,这里不同的节点读取同一个文件内的同一块数据应该怎么理解呢?
我理解读取是为了找适合本节点的数据
多个region
这里是因为现在恢复的实现中,一个 region 的三个副本都会直接读取这份文件,而不是像一般的 Raft 命令那样发给 leader,而后再由 leader 同步给副本。
具体来讲,BR 在恢复的时候流程大概是这样:
- 向同一个 Region 内的所有副本(Peer)发起请求,他们将 SST 下载到一个临时文件里面(这里就会读取同一个文件)。
- 然后,BR 会向 Leader 发起一个 Ingest 的 Raft Command,在这个 command 被 apply 的时候,第一步下载的 SST 会被并入底层的 LSM 树中,此时数据真正恢复到了 Region 中。
1 个赞
感谢大佬解惑!!!学习了!!!