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 集群的一致性保证,返回的数据可能陈旧或不正确。不同的路由器可能访问不同的分区,并可能返回不同的数据。不同的路由器可能具有不同的行为,有些提供只读流量,而有些提供读写流量。

    • 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 在针对特定集群(其中 target_cluster 未设置为 primary)的路由器上打开或关闭读写 (R/W) 端口,使您能够在 ReplicaCluster 上使用 R/W 端口。ReplicaCluster 继续只接受 R/O 流量。在切换或故障转移的情况下,R/W 端口保持不变。

    如果设置为 true,MySQL Router R/W 端口在 ReplicaClusters 中。

    如果设置为 false(默认值),路由器的行为将保持不变,并且 R/W 端口在 ReplicaClusters 中关闭。

  • tags

    以 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 集群只读副本”.

要清除路由选项,请将其设置为 null