启动时,MySQL Router 会读取一起构成路由器配置的配置文件列表。至少需要一个配置文件。
MySQL Router 从与传统 INI 文件格式非常相似的配置文件中读取选项,包括部分和选项。这些指定了 MySQL Router 启动时设置的选项。有关文件语法信息,请参阅 第 4.1 节 “配置文件语法”。
选项在
sections下定义,指示选项的含义。例如,
[DEFAULT]user段下
是指系统用户运行路由器,而
[metadata_cache]段下
是指访问元数据的MySQL用户。
user
下表按部分分隔,总结了 MySQL Router 配置文件中定义的 MySQL Router 选项。这些表下方记录了有关每个选项的详细信息,例如描述和允许值。
常规选项
表 4.7 [默认]
| 选项名称 | 描述 | 类型 |
|---|---|---|
config_folder |
配置文件的路径 | 细绳 |
connect_timeout |
尝试连接到元数据服务器之前的秒数被视为超时;在 [DEFAULT] 部分设置。 | 整数 |
core-file |
在路由器崩溃时写入核心文件 | 布尔值 |
event_source_name |
仅限 Microsoft Windows 平台。定义 MySQL Router 在 Microsoft Windows 上作为服务运行时使用的服务名称。 | 细绳 |
keyring_path |
密钥环文件的路径 | 细绳 |
logging_folder |
路由器日志的路径 | 细绳 |
master_key_path |
主密钥环文件的路径 | 细绳 |
master-key-reader |
将主密钥返回到 STDOUT 的脚本 | 细绳 |
master-key-writer |
从 STDIN 读取主密钥的脚本 | 细绳 |
max_total_connections |
路由器允许的最大客户端连接总数 | 整数 |
pid_file |
存储 PID 文件的位置 | 细绳 |
plugin_folder |
路由器插件的路径 | 细绳 |
runtime_folder |
运行时文件的路径 | 细绳 |
sinks |
接收配置日志数据的日志记录方法 | 细绳 |
thread_stack_size |
分配给每个线程堆栈的内存大小(以 KB 为单位) | 整数 |
unknown_config_option |
遇到未知配置选项时发送的错误类型 | 细绳 |
unreachable_destination_refresh_interval |
多长时间(秒)探测一次无法到达的候选目的地的可用性 | 整数 |
user |
路由器运行的系统用户 | 细绳 |
路由选项
表 4.8 [路由]
| 选项名称 | 描述 | 类型 |
|---|---|---|
bind_address |
地址路由器绑定到,如果未定义端口,也使用 bind_port | 细绳 |
bind_port |
bind_address 使用的默认端口 | 整数 |
client_connect_timeout |
从 MySQL 服务器接收数据包的最大秒数 | 整数 |
client_ssl_cipher |
客户端和 MySQL Router 之间允许使用哪些密码,默认为 SSL 密码的安全列表 | 细绳 |
client_ssl_curves |
client 和 MySQL Router 之间允许哪些曲线,默认为 SSL 曲线的安全列表 | 细绳 |
client_ssl_dh_params |
DH 参数文件的文件名。默认不设置 | 细绳 |
client_ssl_mode |
控制从客户端到 MySQL Router 的连接是否必须加密,如果未设置则默认为 PREFERRED | 细绳 |
connect_timeout |
连接 MySQL 服务器的尝试被认为超时之前的秒数;在 [routing] 部分设置。 | 整数 |
destinations |
路由目标作为逗号分隔的 MySQL 服务器列表或元数据缓存定义 | 细绳 |
dynamic_state |
用于跟踪和存储活动 MySQL InnoDB 集群元数据服务器地址的生成的 JSON 文件的路径 | 细绳 |
max_connect_errors |
放弃前 MySQL 服务器连接失败的最大次数 | 整数 |
max_connections |
分配给路由目标 MySQL 服务器的最大连接数 | 整数 |
mode |
路由模式,路由器如何选择目标MySQL服务器 | 细绳 |
net_buffer_length |
设置 net_buffer_length | 整数 |
protocol |
连接到 MySQL 服务器的协议 | 细绳 |
read_timeout |
对元数据服务器的读取操作被视为超时之前的秒数 | 整数 |
routing_strategy |
路由策略(可选),路由器如何选择目标MySQL服务器 | 细绳 |
server_ssl_cipher |
服务器的 SSL 密码 | 细绳 |
server_ssl_curves |
服务器的 SSL 曲线 | 细绳 |
server_ssl_mode |
服务器的 SSL 模式 | 细绳 |
server_ssl_verify |
服务器的 SSL 验证 | 细绳 |
socket |
Unix 域套接字文件的路径 | 细绳 |
表 4.9 [连接池]
| 选项名称 | 描述 | 类型 |
|---|---|---|
idle_timeout |
在关闭之前将空闲连接保留在收集池中的秒数 | 数字 |
max_idle_server_connections |
客户端断开连接后保持打开的连接 | 数字 |
元数据缓存选项
表 4.10 [元数据缓存]
| 选项名称 | 描述 | 类型 |
|---|---|---|
auth_cache_refresh_interval |
验证缓存刷新尝试之间的时间 | 数字 |
auth_cache_ttl |
如果不刷新,缓存变为无效的时间 | 数字 |
bootstrap_server_addresses |
带有元数据的 MySQL 服务器,作为逗号分隔的列表 | 细绳 |
cluster_type |
对象路由器是针对 | 细绳 |
metadata_cluster |
InnoDB 集群名称 | 细绳 |
router_id |
路由器编号 | 整数 |
ssl_ca |
用于验证服务器证书的 SSL CA 文件 | 细绳 |
ssl_capath |
包含用于验证服务器证书的 SSL CA 文件的目录 | 细绳 |
ssl_crl |
用于验证服务器证书的 SSL CRL 文件 | 细绳 |
ssl_crlpath |
包含用于验证服务器证书的 SSL CRL 文件的目录 | 细绳 |
ssl_mode |
用于连接到元数据服务器的 SSL 连接模式,如果不设置则默认为 PREFERRED | 细绳 |
tls_version |
如果启用了 SSL,要请求的 TLS 版本的逗号分隔列表 | 细绳 |
ttl |
生存时间,以秒为单位 | 整数 |
use_gr_notifications |
组复制通知行为 | 整数 |
user |
访问 MySQL 服务器元数据模式的 MySQL 用户 | 细绳 |
记录选项
表 4.11 [记录器]
| 选项名称 | 描述 | 类型 |
|---|---|---|
destination |
要登录的设备名称;可选地与 [consolelog] 一起使用 | 细绳 |
filename |
日志文件名;可选地与 [logger] 和 [filelog] 一起使用 | 细绳 |
level |
记录级别 | 细绳 |
timestamp_precision |
记录器时间戳精度 | 细绳 |
HTTP 服务器选项
表 4.12 [http_server]
| 选项名称 | 描述 | 类型 |
|---|---|---|
bind_address |
HTTP端口绑定的IP地址 | 细绳 |
port |
HTTP 服务器 TCP 端口 | 整数 |
require_realm |
[http_auth_realm] 名称 | 细绳 |
ssl_cert |
SSL认证文件名 | 细绳 |
ssl_cipher |
批准的 SSL 密码 | 细绳 |
ssl_dh_param |
DH参数文件名 | 细绳 |
ssl |
启用 TLSv1.2 或更高版本支持 | 整数 |
ssl_key |
SSL 密钥文件名 | 细绳 |
static_folder |
HTTP 服务器静态文件请求的目录 | 细绳 |
MySQL Router 配置文件选项说明
-
命令行格式 --core-file[={0|1}]介绍 8.0.31 类型 布尔值 默认值 0如果mysqlrouter死了, 写一个核心文件。核心文件的名称和位置取决于系统。在 Linux 上,一个名为 的核心文件 被写入进程的当前工作目录。 表示服务器进程的进程 ID。在 macOS 上,如果进程具有 授权,则会将名为的核心文件 写入目录。在 Solaris 上,使用coreadm 命令指定核心文件的写入位置以及命名方式。在 Windows 上,一个名为 的小型转储文件 被写入进程的当前工作目录。
core.pidpidcore.pid/corescom.apple.security.get-task-allowmysqlrouter.{pid}.dmp -
类型 细绳 默认值 仅限 Microsoft Windows 平台。定义 MySQL Router 在 Microsoft Windows 上作为服务运行时使用的服务名称。这使您能够在运行多个 MySQL 路由器实例时区分服务,并在事件日志中区分它们的消息。
例如:
[DEFAULT] event_source_name = MySQLRouterService -
类型 细绳 默认值 $router_basepathMySQL Router 日志文件目录的路径。日志文件名为
mysqlrouter.log,如果此文件已存在,则会生成或附加到该文件。设置
logging_folder为空值会将消息发送到控制台 ( stdout )。笔记默认
logging_folder值从 "" 更改为 MySQL Router 2.1 中路由器的基本路径。将日志发送到的示例
/var/log/mysqlrouter/mysqlrouter.log:[DEFAULT] logging_folder = /var/log/mysqlrouter当使用
--directorybootstrap 选项时,生成的配置文件将其设置为 $directory/log/。 -
类型 细绳 默认值 (Windows) 默认值(其他) /usr/local/lib/mysqlrouterMySQL Router 插件的路径。此文件夹必须与 MySQL Router 安装目录相匹配。只有在插件不在标准安装位置的自定义安装中才应设置此项。
默认值:
/usr/local/lib/mysqlrouter -
类型 细绳 默认值 (Windows) 默认值(其他) /run/mysqlrouterMySQL Router 运行时文件的路径。
默认值:
/run/mysqlrouter -
命令行格式 --master-key-writer file_path介绍 8.0.12 类型 细绳 从 STDIN 读取主密钥的脚本。使用
--master-key-writer命令行引导选项进行设置。 -
命令行格式 --master-key-reader file_path介绍 8.0.12 类型 细绳 将主密钥返回到 STDOUT 的脚本。使用
--master-key-reader命令行引导选项进行设置。 -
类型 细绳 默认值 (Windows) 默认值(其他) /usr/local/etc/mysqlrouterMySQL Router 配置文件的路径。
笔记当前
config_folder在编译时设置。当未来的插件有自己的配置文件时,可以使用该选项。默认值:
/usr/local/etc/mysqlrouter -
介绍 8.0.16 类型 细绳 有效值 (Windows) consolelogfilelogeventlog有效值(其他) consolelogfilelogsyslog将定义的日志级别发送到的接收器(不同的日志记录方法)。
支持的接收器值是:
consolelog、、filelog(eventlog在 Windows 上)和syslog(在基于 Unix 的系统上)。使用逗号分隔的列表来定义多个值。默认值:
filelog如果logging_folder“[DEFAULT]”部分中的选项不为空,否则consolelog。例如,要将记录器配置为使用文件、控制台和事件日志,每个都使用 [logger]部分中配置的调试日志级别:
[logger] level=debug sinks=consolelog,eventlog,filelog -
类型 细绳 默认值 (Windows) %PROGRAMDATA%\MySQL\MySQL Router\keyring-data默认值(其他) /run/mysql-router/keyring-data指向密钥环文件的位置。
系统范围的引导程序不会将此选项添加到生成的配置文件中,并假定密钥环文件位于系统范围的运行时状态目录中。如果
--directory还使用,则密钥环文件存储在该实例的运行时状态目录下,run/在指定目录下。如果未定义此选项,则使用系统范围的默认路径。
用法示例:
keyring_path = /opt/myrouter/data/keyring master_key_path = /opt/myrouter/mysqlrouter.key -
类型 细绳 默认值 (Windows) %PROGRAMDATA%\MySQL\MySQL Router\mysqlrouter.key默认值(其他) /run/mysql-router/mysqlrouter.key主密钥文件的位置。此选项允许无人值守解密,否则在启动时会请求其位置。
如果未指定此选项,则使用系统范围的默认路径。
用法示例:
keyring_path = /opt/myrouter/data/keyring master_key_path = /opt/myrouter/mysqlrouter.key -
介绍 8.0.29 类型 细绳 默认值 warning有效值 warningerror确定 MySQL Router 处理未知配置选项的行为,例如拼写错误。
警告是默认行为,引导程序将其定义为 生成的配置文件中的错误。8.0.29 之前的 MySQL Router 版本忽略未知的配置选项。警告记录警告消息但不会停止,而错误表示路由器无法初始化并退出。
[DEFAULT] unknown_config_option=warning -
类型 细绳 以具有名称 或数字用户 ID 的用户身份 运行mysqlrouter。“用户”在此上下文中是指系统登录帐户,而不是授权表中列出的 MySQL 用户。这也可以在运行时使用 命令行选项进行分配。
user_nameuser_id--user在 Linux 上,使用官方 DEB 或 RPM 包安装 Router 会在主机上创建一个名为“mysqlrouter”的本地系统用户和组,MySQL Router 默认以该用户运行。该帐户没有 shell 访问权限,其主目录指向存储默认配置文件的目录。
此选项的目的是将 MySQL Router 作为具有受限系统权限的用户运行。如果用户在系统中不存在,或者如果尝试以 root 身份启动 Router,则会发出错误并退出 Router。
MySQL Router 可以在任何操作系统用户下引导和执行,除了对其自身文件的读写访问之外不需要特殊权限。它访问的文件包括插件(读取/执行)、配置文件、日志、UNIX 域套接字文件(如果启用)等。
默认情况下,配置和日志文件写入系统范围的位置,例如
/etc和/var/log。--directory或者,可以使用该选项将路由器引导到它自己的独立目录。例如:$> sudo mysqlrouter --bootstrap localhost:3310 --directory /a/path/myrouter --user snoopy在本例中,Router 在这里创建
/a/path/myrouter并添加了所有生成的文件和目录,这些文件和目录只能由系统用户写入snoopy。此外,user在生成的配置文件中定义/a/path/myrouter/mysqlrouter.conf:[DEFAULT] user=snoopy笔记user这与节中定义 的定义不同[metadata_cache],是MySQL用户。 -
类型 细绳 连接到元数据服务器时用于验证服务器证书的 SSL CA 文件的路径。
可以选择使用
--ssl-cabootstrap 选项进行设置。 -
类型 细绳 包含 SSL CA 文件的目录路径,用于在连接到元数据服务器时验证服务器的证书。
可以选择使用
--ssl-capathbootstrap 选项进行设置。 -
类型 细绳 连接到元数据服务器并验证其 SSL 证书时要使用的 SSL CRL 文件的路径。
可以选择使用
--ssl-crlbootstrap 选项进行设置。 -
类型 细绳 包含连接到元数据服务器并验证其 SSL 证书时使用的 SSL CRL 文件的目录路径。
可以选择使用
--ssl-crlpathbootstrap 选项进行设置。 -
类型 细绳 如果启用了 SSL,则以逗号分隔的要请求的 TLS 版本列表,例如“TLSv1.2,TLSv1.3”。
可以选择使用
--tls-versionbootstrap 选项进行设置。 -
类型 细绳 默认值 127.0.0.1可选
bind_address选项的相关资料:路由条目可以绑定到网络接口 (NIC)。默认
bind_address值为127.0.0.1。如果此处未定义端口,则bind_port需要进行设置。默认情况下,为生成的路由器配置文件中的每个路由
--bootstrap设置bind_address=0.0.0.0。可以使用 更改此值--conf-bind-address。绑定到特定的 IPv4 或 IPv6 地址允许并确保 MySQL 路由器不会在不允许执行任何内容的 NIC 上启动和路由服务。
不可能为每个路由配置组指定一个以上的绑定地址。但是,使用 0.0.0.0:(
$port您定义 $port 的位置)绑定主机上的所有网络接口 (IP)。也可以使用 IPv6 地址。
用法示例:
bind_address = 127.0.0.1:7001笔记bind_address不能在列表中 列出destinations。 -
类型 整数 或者,您可以定义默认端口以
bind_address使用bind_port. 如果端口未在中配置bind_address,则bind_port需要并使用。(可选)使用
--conf-base-portbootstrap 选项设置这些值。以下三个示例均导致bind_address = 127.0.0.1:7001
[routing:example_1] bind_port = 7001[routing:example_2] bind_port = 7001 bind_address = 127.0.0.1[routing:example_3] bind_address = 127.0.0.1:7001 -
特定于平台 Linux 类型 细绳 使用
socket选项启用套接字,可以使用或不使用 TCPbind_port和bind_address选项来指定。一个例子:[routing] socket = /tmp/mysqlrouter.sock destinations = a.example.com:3306,b.example.com:3307启动 MySQL Router 时,如果 socket 文件已经存在或无法写入,Router 将拒绝运行。
相对路径是可以接受的,并且基于启动路由器的当前工作目录。
路由器可以同时监听 TCP 套接字和 Unix 套接字。例如,以下 [routing]配置示例是有效的,并将路由器配置为侦听 localhost:1234和 上的连接
/tmp/mysqlrouter.sock:[routing:my_redirect] bind_address = localhost:1234 socket = /tmp/mysqlrouter.sock mode = read-write destinations = localhost:57121, localhost:57122, localhost:57123笔记Unix 域套接字长度限制是特定于平台的,不应超过系统允许的长度。
-
类型 细绳 默认值 classic有效值 classicx连接到目标 MySQL 服务器时由路由插件使用,可以设置为“经典”(默认)或“x”(X 协议)。
用法示例:
[routing:basic_failover] bind_port = 7001 mode = read-write destinations = 10.20.200.1:33060, 10.20.200.2:33060 protocol = x该
protocol选项还会影响每个目标使用的默认端口。如果未配置目标端口,则“经典”(默认)的默认端口为 3306,“x”(X 协议)的默认端口为 33060。 -
介绍 8.0.20 类型 细绳 设置 PID 文件的位置。这可以通过三种不同的方式设置(按优先顺序):
--pid-file命令行选项,pid_file在路由器的配置文件中设置此选项,或定义ROUTER_PID环境变量。如果
--bootstrap指定,则pid_file忽略 ROUTER_PID 定义。这与--pid-file导致路由器失败的命令行选项不同。如果
--bootstrap未指定,则以下原因会导致 Router 失败:--pid-file 已存在,pid_file 或 ROUTER_PID 已设置但为空,或者 Router 无法写入 PID 文件。 -
类型 整数 默认值(≥ 8.0.29) 5默认值(≤ 8.0.28) 1最小值 1最大值 65536连接到目标 MySQL 服务器时 MySQL 路由器使用的超时值。该值不能是无限制的,无效的值会导致配置错误。有效范围在 1 到 65536 之间。您应该保持较低的值。
例如,使用
read-write模式时,该值可以稍微高一点,以等待 PRIMARY 可用。当使用read-onlymode 进行辅助连接时,较低的值更有意义,因为 Router 在连接路由期间选择新服务器。用法示例:
[routing] connect_timeout = 5可以在引导程序中使用
--conf-set-option=routing.connect_timeout. -
类型 整数 默认值(≥ 8.0.29) 5默认值(≥ 8.0.14,≤ 8.0.28) 15默认值(≤ 8.0.13) 30连接到 MySQL 元数据服务器时 MySQL 路由器使用的超时值。
用法示例:
[DEFAULT] connect_timeout = 5可以在引导程序中使用
--connect-timeout或 进行设置--conf-set-option=DEFAULT.connect_timeout。 -
类型 整数 默认值 30从 MySQL 元数据服务器读取时 MySQL 路由器使用的超时值。默认值为 30 秒。
用法示例:
[DEFAULT] read_timeout = 30 -
类型 细绳 提供用于建立连接的主机信息。它接受以逗号分隔的目标地址列表或指向 InnoDB 集群的元数据缓存链接。
特定主机的示例用法(静态路由):
destinations = a.example.com,b.example.com,c.example.comInnoDB 集群元数据缓存的示例用法:
destinations=metadata-cache://mycluster/default?role=PRIMARYmetadata-cacheURI 选项是 :-
role:确定连接可用的实例类型。可接受的值为 PRIMARY、SECONDARY 或 PRIMARY_AND_SECONDARY。该选项定义了具体的策略,默认的 metadata-cache 路由策略是round-robin。
routing_strategymysqlrouter.conf -
disconnect_on_promoted_to_primary:控制当次级提升为主要时是否关闭与次级的现有客户端连接。默认值为“no”,这意味着现有客户端连接到提升的辅助节点不会在提升后关闭。在 URI 中设置 disconnect_on_promoted_to_primary=yes 以关闭这些现有连接。这个选项是在 MySQL Router 8.0.12 中添加的。
-
disconnect_on_metadata_unavailable:控制当组过载时是否关闭现有客户端连接。默认值为“no”,这意味着当组过载时现有的客户端连接不会关闭。在 URI 中设置 disconnect_on_metadata_unavailable=yes 以关闭这些现有连接。这个选项是在 MySQL Router 8.0.12 中添加的。
笔记相关的是,这些情况会导致断开连接:在主节点降级为辅助节点后与主节点的连接,以及与不再属于集群的节点的连接。
-
-
介绍 8.0.14 类型 细绳 此选项跟踪和存储活动的 MySQL InnoDB 集群元数据服务器地址,并在路由器重新启动时加载它们。此功能由已弃用的静态选项激活,
--bootstrap并且优先于已弃用的静态bootstrap_server_addresses选项。Bootstrapping 定义文件中 [DEFAULT] 部分下的
dynamic_state选项。mysqlrouter.conf该值是名为 的 JSON 文件的路径,该文件state.json是在引导路由器时创建的。使用state.jsonInnoDB Cluster 元数据服务器地址和 Group Replication ID(InnoDB Cluster 返回的 group_replication_name)进行初始化;在路由器运行时添加和更新附加信息。示例
mysqlrouter.conf条目:[DEFAULT] dynamic_state=/opt/myrouter/data/state.jsonstate.json生成的 示例--bootstrap:{ "metadata-cache": { "group-replication-id": "4b9e817a-0254-11e9-9cc0-080027bb5030", "cluster-metadata-servers": [ "mysql://localhost:3310", "mysql://localhost:3320", "mysql://localhost:3330" ] }, "version": "1.0.0" }不能同时设置deprecated 和
dynamic_statedeprecated 选项。bootstrap_server_addresses为了向后兼容,如果仅bootstrap_server_addresses设置,那么它的功能与以前的路由器版本中一样,并且不使用此动态配置功能。这个选项是在 MySQL Router 8.0.14 中添加的。
-
类型 细绳 有效值 read-writeread-onlydeprecated mode 选项设置 Router 的调度,支持的两个 mode 值是:
重要的MySQL Router 8.0.4 引入了
routing_strategy选项作为配置 模式计划的更灵活的方式。两者不能同时设置
mode。routing_strategy静态路由需要设置 1,而 InnoDB 集群是可选的。-
读写:通常用于路由到主或主要 MySQL 实例。
Mode Schedule:在 读写模式下,所有流量都定向到列表中的初始地址。如果失败,则 MySQL Router 将尝试列表中的下一个条目,继续尝试列表中的每个 MySQL 服务器。如果列表中没有更多 MySQL 服务器可用,则路由将中止。
笔记使用
routing_strategy,可以使用routing_strategy=next-available而不是定义相同的行为mode=read-write。第一个成功连接的 MySQL 服务器被保存在内存中,作为第一个尝试未来传入连接的服务器。这是一个临时状态,这意味着在 MySQL Router 重新启动后它会被遗忘。
[routing:example_strategy_mode] bind_port = 7001 destinations = primary1.example.com,primary2.example.com,primary3.example.com mode = read-write由于
mode已弃用,因此应改用前面的示例routing_strategy:[routing:example_strategy] bind_port = 7001 destinations = primary1.example.com,primary2.example.com,primary3.example.com routing_strategy = next-available -
只读:通常用于路由到副本或辅助 MySQL 实例。
Mode Schedule: 只读模式使用简单 的循环方法遍历 MySQL 服务器列表。它将第一个连接发送到列表中的第一个地址,下一个连接发送到第二个地址,依此类推,并在列表用完后返回到第一个地址。
笔记使用
routing_strategy,可以使用routing_strategy=round-robin而不是定义相同的 行为mode=read-only。如果 MySQL 服务器不可用,则尝试下一个服务器。当列表中的 MySQL 服务器都不可用时,路由将中止。
不可用的 MySQL 服务器被隔离。重新检查它们的可用性,并在可用时将它们放回可用
destinations列表中。目的地顺序保持不变。[routing:ro_route_mode] bind_port = 7002 destinations = secondary1.example.com,secondary2.example.com,secondary3.example.com mode = read-only由于
mode已弃用,因此应改用前面的示例routing_strategy:[routing:ro_route] bind_port = 7002 destinations = secondary1.example.com,secondary2.example.com,secondary3.example.com routing_strategy=round-robin
或者,前面的
destinations示例可以使用元数据缓存来利用动态配置主机信息的 InnoDB 集群的元数据缓存。例如:。[routing:ro_route] bind_port = 7002 destinations=metadata-cache://myCluster/default?role=SECONDARY routing_strategy=round-robin -
-
类型 细绳 有效值 first-availablenext-availableround-robinround-robin-with-fallback路由策略定义了 MySQL Router 如何选择要连接的 MySQL 服务器。
重要的MySQL Router 8.0.4 引入了
routing_strategy选项作为定义策略的更灵活的方式。以前,此行为是使用现已弃用的mode选项定义的。两者不能同时设置
routing_strategy。mode静态路由需要设置 1,而 InnoDB 集群是可选的。可用策略:
笔记本节之后的角色文档描述了可用的
role组合routing_strategy和冲突。无法到达的目的地会被隔离和跳过,并且每隔
unreachable_destination_refresh_interval几秒就会探测一次可用性。next-available除利用此行为外的所有路由策略 。此功能是在 v8.0.29 中添加的。round-robin:对于负载平衡,每个新连接都以循环方式与下一个可用服务器建立连接。round-robin-with-fallback:对于负载平衡,每个新连接都以循环方式与下一个可用的辅助服务器建立连接。如果辅助服务器不可用,则主列表中的服务器将以循环方式使用。first-available:新连接被路由到目的地列表中的第一个可用服务器。如果失败,将使用下一个可用的服务器。这个循环一直持续到所有服务器都不可用。-
next-available: 和 一样first-available,因为新连接被路由到目的地列表中的第一个可用服务器。与 不同first-available,如果服务器被标记为无法访问,那么它将被丢弃并且永远不会再次用作目的地。此策略向后兼容 MySQL Router 2.x 的
mode读写行为 。它的局限性包括:-
选择的所有节点都被丢弃后,无法将服务器重新添加到列表中。
与其他策略不同,不会每秒钟探测一次无法到达的目的地的可用性
unreachable_destination_refresh_interval。 重启 MySQL Router 后,所有关于哪些服务器被丢弃的知识都将丢失,所有服务器再次可用。
元数据缓存不支持 next-available 路由策略,因为 next-available 仅适用于静态路由。
-
role默认值和可用组合 :-
PRIMARY:round-robin是默认行为(如果未设置 routing_strategy),而引导添加routing_strategy=first-available到生成的 MySQL Router 配置文件中。可用的策略值是first-available和 round-robin。笔记在 v8.0.16 中 ,bootstrap 值从 round-robin更改为 first-available 。
-
SECONDARY:round-robin是默认行为(如果未设置 routing_strategy),而引导添加routing_strategy=round-robin-with-fallback到生成的 MySQL Router 配置文件中。可用的策略值是first-available、 round-robin和 round-robin-with-fallback。笔记在 v8.0.16 中,bootstrap 值从 round-robin更改为 round-robin-with-fallback。
PRIMARY_AND_SECONDARY:round-robin是默认行为(如果未设置 routing_strategy)。可用的策略值是first-available, round-robin。
-
unreachable_destination_refresh_interval介绍 8.0.29 类型 整数 默认值 1最小值 1最大值 65535隔离机制跟踪无法到达的目的地,然后在它们重新联机时探测它们的可用性。此选项确定在将每个无法到达的候选目标添加回轮换之前对其可用性进行探测的频率(以秒为单位)。
[DEFAULT] unreachable_destination_refresh_interval = 1next-available除利用此行为 外的所有路由策略 。 -
类型 整数 默认值 512最小值 1最大值 65536每个路由可以限制路由或连接的数量。一种可能的用途是帮助防止可能的拒绝服务 (DOS) 攻击。默认值为 512,有效范围为 1 到 65536。
这类似于MySQL 服务器的 max_connections服务器系统变量。
[routing:mycluster_default_rw] max_connections = 512或者,使用更新的
max_total_connections配置选项为所有路由器部分组合设置一个值。MySQL Router 8.0.22 引入了将并发连接限制从大约 5,000 增加到 50,000 的功能。最大值取决于系统的轮询(或 linux_epoll)限制和可用 CPU 内核/线程的数量。另请参阅 [IO]
backend和threads配置选项。max_connections部分中的 可选设置[DEFAULT]为每个路由目标设置默认值。 -
介绍 8.0.27 类型 整数 默认值 512最小值 1最大值 9223372036854775807路由器处理的最大客户端连接数,以帮助防止文件描述符用完。
这类似于MySQL 服务器的 max_connections服务器系统变量。
[DEFAULT] max_total_connections = 512笔记legacy
max_connections选项为每个路由实例设置一个值,例如一个值用于只读,另一个值用于只写。该max_total_connections选项为组合的所有路由实例设置一个值。默认值为 512,它在该
[DEFAULT]部分下设置。这个选项是在 MySQL Router 8.0.27 中添加的。 -
介绍 8.0.12 类型 整数 默认值 64最小值 1最大值 65535为每个线程分配的堆栈大小。它以千字节为单位,默认为 64。
[DEFAULT] thread_stack_size=128 -
介绍 8.0.22 类型 整数 设置
net_buffer_lengthMySQL 服务器选项。 -
类型 整数 默认值 100最小值 1最大值 4294967295默认值为 100,有效范围为 1 到 2^32(4294967295,无符号整数)。
这类似于 MySQL 服务器的 max_connect_errors服务器系统变量。
如果应用程序执行频繁的重新连接,这可能会导致轻微的性能损失,因为 MySQL Router 会尝试发现是否存在与连接相关的错误。
成功的连接会重置错误计数器(自 8.0.14 起)。
每个路由都有自己的阻止主机列表。被阻止的客户端会收到 MySQL 服务器错误 1129 代码和稍微不同的错误消息:“1129:来自 fail.example.com 的连接错误太多”。路由器日志包含有关被阻止客户端的额外信息,例如: INFO [...] fail.example.com 的 1 个身份验证错误(最多 100) WARNING [...] 阻止客户端主机 fail.example.com
max_connect_errors = 100 -
类型 整数 默认值 9最小值 2最大值 31536000这类似于MySQL 服务器的 connect_timeout服务器系统变量。
默认值为 9,比 MySQL 5.7 默认值小 1。有效范围介于 2 和 31536000 之间。
client_connect_timeout = 9 -
介绍 8.0.20 类型 数字 默认值 2最小值 0.001最大值 3600授权缓存刷新尝试之间的时间(以秒为单位)。默认为 2。该值必须小于
auth_cache_ttl和大于ttl否则路由器将不会启动。如果 http_auth_backend部分的
backend选项设置为metadata_cache ,则应用此选项;这是路由器 REST API 功能。 -
介绍 8.0.20 类型 数字 默认值 -1最小值 0.001最大值 3600如果不刷新缓存变为无效的时间(以秒为单位)。默认为 -1(无限)。该值必须大于
auth_cache_refresh_interval,ttl否则 Router 将无法启动。如果 http_auth_backend部分的
backend选项设置为metadata_cache ,则应用此选项;这是路由器 REST API 功能。 -
类型 整数 MySQL 路由器 ID。
-
介绍 8.0.23 类型 细绳 默认为 SSL 曲线的安全列表。将此字符串格式化为以冒号分隔的曲线名称列表。
-
介绍 8.0.23 类型 细绳 默认为 SSL 密码的安全列表。将此字符串格式化为冒号分隔的密码名称列表。
-
介绍 8.0.23 类型 细绳 默认值 DISABLED有效值 DISABLEDVERIFY_CAVERIFY_IDENTITYSSL 验证默认设置为禁用。
-
介绍 8.0.23 类型 细绳 默认值 AS_CLIENT有效值 AS_CLIENTDISABLEDPREFERREDREQUIREDSSL 模式默认设置为 AS_CLIENT。另见 第 4.4 节,“TLS 配置”。
-
介绍 8.0.23 类型 细绳 如果指定且不为空,则使用此文件中的 DH 参数而不是内部默认 DH 参数。将 DH 参数文件格式化为 PEM 格式。
-
介绍 8.0.23 类型 细绳 客户端和 MySQL Router 之间允许哪些曲线,默认为 SSL 曲线的安全列表。将此字符串格式化为以冒号分隔的曲线名称列表。
-
介绍 8.0.23 类型 细绳 客户端和 MySQL Router 之间允许使用哪些密码,默认为 SSL 密码的安全列表。将此字符串格式化为冒号分隔的密码名称列表。
-
介绍 8.0.23 类型 细绳 默认值 PREFERRED有效值 PREFERREDDISABLEDPASSTHROUGHREQUIRED控制从 client 到 MySQL Router 的连接是否必须加密。另见 第 4.4 节,“TLS 配置”。
-
类型 细绳 默认值 PREFERRED有效值 PREFERREDDISABLEDREQUIREDVERIFY_CAVERIFY_IDENTITY用于连接到 MySQL 元数据服务器的 SSL 模式。
PREFERRED如果未设置 ,则默认为。当设置为 PREFERRED(默认值)时,引导程序将在未使用 SSL 且与元数据服务器的连接未加密时发出警告。
可用值为 DISABLED、PREFERRED、REQUIRED、VERIFY_CA 和 VERIFY_IDENTITY。对于mysql 客户端,此值不区分大小写。
还有一个用于引导的运行时选项;看
--ssl-mode。 -
弃用 8.0.14 类型 细绳 指向具有可以连接到的元数据的 MySQL 服务器列表。访问元数据后,元数据缓存切换到主 ReplicaSet 中存在的服务器来获取元数据。它们也称为引导服务器。
此选项在 MySQL Router 8.0.14 中已弃用,并且不再由引导程序生成。相反,该
dynamic_state选项是作为替代品添加的。 -
类型 细绳 生成的 MySQL 用户具有访问 MySQL 服务器元数据模式的权限。该用户的密码是自动生成的并存储在加密的 密钥环中。默认情况下,此密钥环的加密密钥存储在 配置文件中定义的读保护主密钥存储文件中。最常见的是,此用户和关联的密码是在引导过程中自动生成的。相关的命令行选项是
--force-password-validation和--password-retries。默认情况下,生成的密码通过 STRONG validate_password 强度。密码完全由 Router 管理,从不公开,并使用运行 MySQL Router 的操作系统帐户存储在本地密钥环系统中。然后 Router 可以使用它连接到 InnoDB Cluster 并检索当前的拓扑信息。默认情况下,路由器和元数据服务器之间的会话使用 SSL 加密。
生成的密钥环文件的存储位置取决于引导程序的配置方式。对于自包含安装(使用时
--directory),它存储run/在自包含目录下。对于系统范围的安装,它存储在系统范围的运行时状态目录中,并且该路径是特定于平台的。有关其他信息,请参阅master_key_path和keyring_path此用户被分配(并需要)以下权限:
Privileges needed by the Router account: On Metadata Server: SELECT ON mysql_innodb_cluster_metadata.* On Target Replica Sets: SELECT ON performance_schema.replication_group_members SELECT ON performance_schema.replication_group_member_stats生成的用户名遵循以下模式: mysql_router_
[0-9]{1,6}_[0-9a-z]{12},其中[0-9]{1,6}是数字路由器 ID,[0-9a-z]{12}是 12 个随机小写字母数字字符。router id 如果已经存在则重复使用,mysqlrouter.conf并且其长度不能超过 6 位。笔记该用户不同于
user本节定义[DEFAULT]的系统用户。 -
类型 细绳 InnoDB 集群的名称。
笔记列出 MySQL InnoDB 集群名称的 SQL 查询: SELECT * FROM mysql_innodb_cluster_metadata.clusters;
-
介绍 8.0.17 类型 整数 默认值 0有效值 01启用组复制通知。启用后,路由器会异步收到有关大多数集群更改的通知。它可以在引导程序
mysqlrouter.conf中使用--conf-use-gr-notifications命令行选项手动启用或在那里启用。当 Router 从 Group Replication 收到以下任何通知时,它会刷新集群元数据:
group_replication/membership/quorum_loss
group_replication/成员资格/视图
group_replication/status/role_change
group_replication/status/state_change
笔记组复制通知功能需要从路由器到每个实例的 X 协议连接,该实例必须运行 X 插件。如果 X 协议连接不可用,则元数据刷新会每隔一段时间执行一次,
ttl就像未启用通知功能一样。尽管 Group Replication 通知依赖于 X 协议连接,但收到的通知会触发使用经典 MySQL 协议连接到实例的元数据刷新。
启用后,Group Replication 通知功能允许更高的
ttl值,因为按时间间隔执行的元数据刷新ttl成为一种额外的保护措施,而不是使有关集群状态的信息保持最新的主要方式。禁用时,建议使用较低的ttl值(例如 0.5s,默认值)以避免重新连接到实例并经常查询它们的元数据更改的开销。 -
类型(≥ 8.0.12) 数字 类型 (8.0.11) 整数 默认值(≥ 8.0.12) 0.5默认值 (8.0.11) 5最小值 0最大值 (≥ 8.0.12) 3600最大值 (8.0.11) 4294967295元数据缓存中信息的生存时间(以秒为单位)。
接受整数或浮点值。粒度限制为毫秒,其中 0.001 等于一毫秒。精度被截断到支持的范围;例如TTL=0.0119被视为 11 毫秒。值为0表示元数据缓存模块在紧密循环中连续查询元数据。
该值必须小于
auth_cache_refresh_interval,auth_cache_ttl否则 Router 将不会启动。唯一支持的小数点分隔符是“.” (一个句点)无论语言环境如何,都支持科学记数法,例如 TTL=1.6E-2。
MySQL Router 8.0.12 中添加了浮点支持。
-
介绍 8.0.21 类型 细绳 默认值 (Windows) CON默认值(其他) /dev/stderr有效值 (Windows) CONNUL有效值(其他) /dev/null/dev/stderr/dev/stdout将控制台日志输出定向到此设备目标;在 [consolelog] 部分下设置。默认为 /dev/stderr,空值使用默认值。
可用值有:
/dev/stdout、/dev/stderr和/dev/null;或者CON和NUL在 Windows 上。[DEFAULT] logging_folder= [consolelog] destination=/dev/null -
介绍 8.0.21 类型 细绳 filename将日志输出重定向到 目录中 名为的特定文件logging_folder。它必须定义为文件名而不是文件路径,并且与 [logger] 和 [filelog] 部分一起使用。与 [logger] 一起使用
filename来定义 [filelog] 部分的默认值,它还将路由器的日志文件从更改mysqlrouter.log为这个新值。[DEFAULT] logging_folder=/path/to/logs/ [logger] filename = router_error.log如果在 [logger] 下设置了文件名但没有使用基于文件的记录器,路由器不会报告错误。
filename与 [文件日志] 一起 使用:[DEFAULT] logging_folder=/path/to/logs/ [filelog:a] filename = a_router_error.log [filelog:b] filename = b_router_error.log如果 filename 为空或未在 [filelog] 下设置,则使用 [logger] 下的文件名定义;
mysqlrouter.log如果未在 [logger] 下设置文件名, 则使用默认日志文件 ( )。相关的,将控制台输出定向到
/dev/null:[DEFAULT] logging_folder= [consolelog] destination=/dev/null -
类型 细绳 默认值 INFO有效值 (≥ 8.0.20) DEBUGNOTEINFOWARNINGERRORSYSTEMFATAL有效值(≤ 8.0.19) DEBUGINFOWARNINGERRORFATAL使用记录器插件记录通知、错误和调试信息。可用的日志级别为 DEBUG、NOTE、 INFO(默认)、 WARNING、ERROR、 SYSTEM和FATAL。这些值不区分大小写。
INFO级别 显示所有信息性消息、警告和错误消息。DEBUG级别显示来自路由器代码的附加诊断信息,包括成功的路由 。 SYSTEM包括诸如启动消息之类的消息。
[logger] level = DEBUG输出行为取决于
logging_folder选项。设置logging_folder为文件夹会保存一个以该文件夹命名的日志文件mysqlrouter.log。设置logging_folder为空值,或不设置,都会将日志输出到控制台。它在[DEFAULT]部分中设置。笔记MySQL Router 8.0.20 中添加了“SYSTEM”和“NOTE”错误级别。
--config引导程序接受使用记录器级别定义 的配置文件 。 -
介绍 8.0.18 类型 细绳 记录器时间戳精度;具有示例值的可用定义是:
second, sec, or s: 2019-05-10 12:10:25millisecond, msec, or ms: 2019-05-10 12:10:25.428microsecond, usec, or us: 2019-05-10 12:10:25.428754nanosecond, nsec, ns: 2019-05-10 12:10:25.428754000
-
介绍 8.0.16 类型 整数 默认值 8081监听 HTTP 请求的 TCP 端口;它默认为 8881。
-
介绍 8.0.16 类型 细绳 默认值 0.0.0.0绑定到 HTTP 的 IP 地址
port;它默认为 0.0.0.0。 -
介绍 8.0.16 类型 细绳 静态文件请求的基本目录;默认情况下它是空的。空值表示不提供静态文件。
-
介绍 8.0.16 类型 细绳 [http_auth_realm] 实例的名称。
-
介绍 8.0.16 类型 整数 默认值 1有效值 10值 1 启用 SSL,0 禁用它。需要支持 TLSv1.2 或更高版本的 TLS 客户端。这是在 [http_server] 部分下定义的。
-
介绍 8.0.16 类型 细绳 PEM 格式的证书及其链证书的文件名;如果 ssl=1,则需要。这是在 [http_server] 部分下定义的。
-
介绍 8.0.16 类型 细绳 PEM 格式的密钥文件名;如果 ssl=1,则需要。这是在 [http_server] 部分下定义的。
-
介绍 8.0.16 类型 细绳 密码规范(参见 openssl 的“密码”列表)。默认为所有已批准密码的逗号分隔列表。未知的密码被默默地忽略。如果密码列表为空且 ssl=1,则失败。这是在 [http_server] 部分下定义的。
-
介绍 8.0.16 类型 细绳 以 PEM 格式从该文件中读取 DH 参数。如果 ssl=1,则默认使用 RFC 5114 中的 dh-param。这是在 [http_server] 部分下定义的。
-
介绍 8.0.22 类型 细绳 默认值 (Windows) poll默认值(其他) linux_epoll有效值 (Windows) poll有效值(其他) linux_epollpoll处理异步操作的 IO 后端。通用轮询后端在所有平台上都可用,而每个平台都可以提供替代后端。
选项是 poll(所有平台)和 linux_epoll (Linux)。在 Linux 上默认为 linux_epoll。
笔记在 MySQL Router 8.0.22 中添加了支持。
[io] backend=linux_epoll threads=32路由器有三个“后端”选项,每个选项在不同的 [section] 中具有不同的含义。有“
[io] backend”(用于异步操作)、“[http_auth_realm] backend”(为与特定领域关联的后端定义自定义名称)和“[http_auth_backend] backend”(身份验证后端的类型)。为了帮助避免混淆,下面是一个演示所有这三者的示例: -
介绍 8.0.22 类型 数字 默认值 0最小值 0最大值 1024处理连接的 IO 线程数。
默认为 0(使用所有可用的 CPU 核心/线程),但也接受 1 到 1024 之间的数字。在运行时,系统可能会限制上限超过此值。
笔记在 MySQL Router 8.0.22 中添加了支持。
[io] backend=linux_epoll threads=32 -
介绍 8.0.29 类型 数字 默认值 5最小值 1最大值 4294967296在关闭连接池之前将空闲连接保留在连接池中的秒数。这在 [connection_pool] 部分中设置,并影响连接池中的所有路由。默认为 5,接受 1 到 4294967296 之间的值。
这个选项是在 MySQL Router 8.0.29 中添加的。
-
介绍 8.0.29 类型 数字 默认值 0最小值 0最大值 4294967296客户端断开后连接池中保持打开的连接;并在 [connection_pool] 部分中设置。默认为 0,接受 0 到 4294967296 之间的值。
这个选项是在 MySQL Router 8.0.29 中添加的。
-
介绍 8.0.16 类型 细绳 [http_auth_backend] 部分的名称。
路由器有三个“后端”选项,每个选项在不同的 [section] 中具有不同的含义。有“
[io] backend”(用于异步操作)、“[http_auth_realm] backend”(为与特定领域关联的后端定义自定义名称)和“[http_auth_backend] backend”(身份验证后端的类型)。 -
介绍 8.0.16 类型 细绳 默认值 basicHTTP认证方式;默认为基本。
-
介绍 8.0.16 类型 细绳 呈现给身份验证用户的领域名称。
-
介绍 8.0.16 类型 细绳 默认值 valid-user要求用户通过身份验证后端进行验证;默认为有效用户,启用此检查。
-
介绍 8.0.16 类型 细绳 默认值 file后端实现的名称;可接受的值为“文件”(默认)或“元数据缓存”。
笔记MySQL Router 8.0.20 中添加了 metadata_cache 支持。
[http_auth_backend:name] backend=metadata_cache [metadata_cache] auth_cache_refresh_interval=2 auth_cache_ttl=-1路由器有三个“后端”选项,每个选项在不同的 [section] 中具有不同的含义。有“
[io] backend”(用于异步操作)、“[http_auth_realm] backend”(为与特定领域关联的后端定义自定义名称)和“[http_auth_backend] backend”(身份验证后端的类型)。 -
介绍 8.0.16 类型 细绳 后端存储文件名,相对于
data_folder目录。 -
介绍 8.0.19 类型 细绳 有效值 grrs引导路由器的 AdminAPI 对象的类型,它是 InnoDB ReplicaSet (rs) 或 InnoDB Cluster (gr)。将“gr”用于群集集。
引导评估目标实例并在生成的配置文件中相应地设置此选项。
MySQL Router 8.0.19 新增此选项;添加了相同版本的 InnoDB ReplicaSet 支持。