MySQL Router 讀取在元數據欄位 v2_router_options.router_options.read_only_targets 中定義的值,以擷取唯讀流量的路由資訊。
v2_router_options.router_options.read_only_targets 由 AdminAPI 方法 填入,該方法使用 cluster.setRoutingOption()read_only_targets 選項將路由策略設定為下列其中一個值
all:所有讀取副本和次要叢集成員都用於唯讀流量。read_replicas:只有讀取副本用於唯讀流量。secondaries:只有次要叢集成員用於唯讀流量。
如果未出現 read_only_targets,或設定為 all、read_replicas 或 secondaries 以外的值,MySQL Router 會預設為 secondaries 並記錄警告訊息。
MySQL Router 不使用讀取副本作為叢集元數據的來源。此外,無法在 MySQL Router 啟動命令中使用讀取副本。任何嘗試使用讀取副本啟動的操作都會傳回錯誤。
在下列情況下,MySQL Router 不會將連線路由至讀取副本
如果叢集中沒有仲裁。
如果所有叢集成員都處於離線狀態。
如果檢查其群組複寫狀態時無法連線到任何叢集成員。
MySQL Router 路由策略受組態的影響方式如下
如果叢集狀態為 INVALID 且
invalidated_cluster_policy設定為drop_all,則不會使用讀取副本進行新的唯讀連線,並且會捨棄所有現有與讀取副本的連線。如果叢集狀態為 INVALID 且
invalidated_cluster_policy設定為allow_ro,則會使用讀取副本進行新的唯讀連線,並且不會影響現有與讀取副本的連線。
MySQL Router 會針對讀取副本使用標準的隔離機制,如 desination_status 組態參數所定義。請參閱目的地狀態選項。