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"

    僅適用於叢集和 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 ]

    僅適用於叢集。

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

    重要

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

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

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

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

    如果將 group_replication_unreachable_majority_timeout 設為正值,且 group_replication_exit_state_actionOFFLINE_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,MySQL Router R/W 埠在 ReplicaCluster 中。

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

  • 標籤

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

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

    僅適用於叢集和 ClusterSet。

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

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

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

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

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

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

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