6.10.4 路由選項

setRoutingOption 方法可讓您全域或針對個別路由器變更路由選項。

路由選項如下

  • "target_cluster", "primary" | "clusterName"

    僅適用於 ClusterSet。

    • "primary":

      使用此設定,MySQL Router 會將來自用戶端應用程式的流量導向目前為主要叢集的 InnoDB ClusterSet 部署中的叢集。主要叢集可以接受讀取和寫入流量。在全域原則和個別 MySQL Router 執行個體中,遵循主要模式是預設值。

    • "clusterName"

      使用此設定,MySQL Router 會將來自應用程式的流量導向 InnoDB ClusterSet 部署中指定的叢集,無論它目前的角色是主要叢集還是複本叢集。如果目標叢集目前是主要叢集,MySQL Router 會開啟寫入埠,應用程式可以寫入執行個體。如果目標叢集目前是唯讀複本叢集,MySQL Router 只允許讀取流量,並拒絕寫入流量。如果由於切換或容錯移轉到目標叢集或從目標叢集切換或容錯移轉而導致此情況變更,MySQL Router 會相應地變更允許的請求類型。如果應用程式只發出可以在複本叢集上發出的讀取請求,而且您想要將該流量路由到本機叢集,此模式會很有用。請注意,叢集名稱區分大小寫。

    請參閱 第 8.5 節,「整合 MySQL Router 與 InnoDB ClusterSet」

  • "invalidated_cluster_policy", "drop_all" | "accept_ro"

    僅適用於 Cluster 和 ClusterSet。

    • "drop_all":使用此設定,當叢集標示為 INVALIDATED 時,MySQL Router 會不允許應用程式對其進行讀取和寫入流量。處於此狀態的叢集目前完全不能作為 InnoDB ClusterSet 部署的一部分運作,而且無法接收寫入。它可能是緊急容錯移轉程序期間標示為失效的前主要叢集,或是在容錯移轉期間或在受控制的切換期間,因為無法連線或無法使用而標示為失效的複本叢集。此設定是全域原則和個別 MySQL Router 執行個體的預設值。

    • "accept_ro":使用此設定,當叢集標示為 INVALIDATED 時,MySQL Router 允許應用程式對其進行讀取流量,但會捨棄寫入流量。雖然失效的叢集不一定有任何技術問題,但資料會變得過時,因此此設定表示除非問題很快獲得解決,否則將會發生過時的讀取。不過,在過時讀取並非高優先順序的情況下,此設定可以提供更高的可用性。

    請參閱 第 8.5 節,「整合 MySQL Router 與 InnoDB ClusterSet」

  • "stats_updates_frequency", "numberOfSeconds"

    此選項以秒為單位定義 MySQL Router 簽入更新之間的間隔。

    如果設定為 0 (預設值),則不會執行定期更新。MySQL Router 會將值四捨五入到其 TTL 的倍數。例如

    • 如果低於 TTL,則會四捨五入到 TTL。例如:如果 TTL=30stats_updates_frequency=1,則有效頻率為 30 秒。

    • 如果不是 TTL 的倍數,則會根據 TTL 進行四捨五入和調整。例如,如果 TTL=5stats_updates_frequency=11,則有效頻率為 15 秒,或者如果 TTL=5stats_updates_frequency=13,則有效頻率為 15 秒。

    如果值為 null,則會清除選項值,而且預設值會生效。

  • "unreachable_quorum_allowed_traffic", [ read | all | none ]

    僅適用於 Cluster。

    定義在唯一可連線的叢集分割區上遺失仲裁時,MySQL Router 的路由原則。

    重要

    不建議變更此選項。後果包括破壞 InnoDB Cluster 的一致性保證,傳回的資料可能會過時或完全不正確。不同的路由器可能會存取不同的分割區,而且可能會傳回不同的資料。不同的路由器可能會具有不同的行為,某些提供唯讀流量,其他則提供讀寫流量。

    • read:MySQL Router 會繼續使用剩餘的線上成員作為唯讀目的地。唯讀和讀寫分割埠會保持開啟以進行讀取,但會封鎖寫入流量。

    • all:MySQL Router 會使用所有剩餘的線上目的地作為讀寫目的地。所有分割埠都會保持開啟。

    • none:(預設值)所有目前的連線都會中斷連線,而且會拒絕新的連線。

    如果將 group_replication_unreachable_majority_timeout 設定為正值,而且將 group_replication_exit_state_action 設定為 OFFLINE_MODEABORT_SERVER,則此選項沒有任何作用。

  • "use_replica_primary_as_rw", [true | false]

    僅適用於 ClusterSet。

    此選項會指示 MySQL Router 在以特定叢集為目標的路由器上開啟或關閉讀寫 (R/W) 埠(其中 target_cluster 未設定為 primary),讓您可以在 ReplicaCluster 上使用 R/W 埠。ReplicaCluster 會繼續只接受 R/O 流量。在切換或容錯移轉的情況下,R/W 埠會保持不變。

    如果設定為 true,則會在 ReplicaCluster 中開啟 MySQL Router R/W 埠。

    如果設定為 false (預設值),則路由器的行為不會變更,而且會在 ReplicaCluster 中關閉 R/W 埠。

  • 標籤

    JSON 格式的任意鍵值組。例如

    cluster.setRoutingOption("tags", "name:value")
  • "read_only_targets", "all" | "read_replicas" | "secondaries"

    僅適用於 Cluster 和 ClusterSet。

    • all:所有讀取複本和次要叢集成員都會用於唯讀流量。

    • read_replicas:只有讀取複本會用於唯讀流量。

    • secondaries:只有次要叢集成員會用於唯讀流量。

    下列範例會將名為 machine1::router1 的路由器的唯讀路由原則設定為僅讀取複本

            Cluster.setRoutingOption("machine1::router1", "read_only_targets", "read_replicas")

    請參閱 第 7.11 節,「MySQL InnoDB Cluster 讀取複本」

若要清除路由選項,請將其設定為 null