查询未被重定向到 YugabyteDB 中的只读副本集群
Query not being redirected into read replica cluster in YugabyteDB
[用户在 YugabyteDB Community Slack 上发布的问题]
我想我对只读副本仍然有一些误解。似乎如果我 运行 一个看起来像只读副本上的序列扫描的查询,实际读取是在主集群上完成的。尽管只读副本似乎拥有整个数据集。
当我在只读副本中 运行 一个简单的 select count(*)
查询时,我希望它从自己的数据中进行本地读取。
但是从图中可以看出,主节点实际上已经开始读取,只读副本几乎处于空闲状态等待,直到它得到主节点的响应。我哪里做错了? (使用 YugabyteDB 2.6)
请注意,仅在最近发布的 2.11 中才可用:https://blog.yugabyte.com/announcing-yugabytedb-2-11/
另一件要记住的事情是,即使在 2.11 上,默认行为,无论您连接到哪个节点,都会将读取重定向到相应的领导者平板电脑。您必须在当前会话中启用阅读关注者的功能,如下所示:
SET yb_read_from_followers = true;
START TRANSACTION READ ONLY;
SELECT * from t WHERE k='k1'; --> follower read
k | v
----+----
k1 | v1
(1 row)
COMMIT;
这会让 YugabyteDB 知道可以从跟随者平板电脑(在只读副本集群中)读取数据。
此外,即使在只读副本集群中,接收请求的节点也可能没有数据。例如,您可以在该集群上拥有一个 RF=2 的 5 节点只读副本集群。所以最初接收请求的节点可能不一定有请求感兴趣的数据。请求路由到哪里取决于是否使用默认设置 session/statement,即从 leader tablets 读取.但是,如果启用了 read-from-follower,那么请求将被路由到同一地区的跟随者平板电脑。
[用户在 YugabyteDB Community Slack 上发布的问题]
我想我对只读副本仍然有一些误解。似乎如果我 运行 一个看起来像只读副本上的序列扫描的查询,实际读取是在主集群上完成的。尽管只读副本似乎拥有整个数据集。
当我在只读副本中 运行 一个简单的 select count(*)
查询时,我希望它从自己的数据中进行本地读取。
但是从图中可以看出,主节点实际上已经开始读取,只读副本几乎处于空闲状态等待,直到它得到主节点的响应。我哪里做错了? (使用 YugabyteDB 2.6)
请注意,仅在最近发布的 2.11 中才可用:https://blog.yugabyte.com/announcing-yugabytedb-2-11/
另一件要记住的事情是,即使在 2.11 上,默认行为,无论您连接到哪个节点,都会将读取重定向到相应的领导者平板电脑。您必须在当前会话中启用阅读关注者的功能,如下所示:
SET yb_read_from_followers = true;
START TRANSACTION READ ONLY;
SELECT * from t WHERE k='k1'; --> follower read
k | v
----+----
k1 | v1
(1 row)
COMMIT;
这会让 YugabyteDB 知道可以从跟随者平板电脑(在只读副本集群中)读取数据。
此外,即使在只读副本集群中,接收请求的节点也可能没有数据。例如,您可以在该集群上拥有一个 RF=2 的 5 节点只读副本集群。所以最初接收请求的节点可能不一定有请求感兴趣的数据。请求路由到哪里取决于是否使用默认设置 session/statement,即从 leader tablets 读取.但是,如果启用了 read-from-follower,那么请求将被路由到同一地区的跟随者平板电脑。