MySQL Router 8 详解

wzy0623 2019-09-03 15:35:32

版权

目录

一、功能介绍

1. 透明路由

2. 元数据缓存

3. 简单重定向

4. MySQL Router 8.0的新特性

二、安装与启动

1. 安装

2. 启动

三、配置

1. 配置文件位置

2. 配置文件语法

3. 配置文件示例

MySQL Router最早是作为MySQL-Proxy的替代方案出现的。作为一个轻量级中间件,MySQL Router可在应用程序和后端MySQL服务器之间提供透明路由和负载均衡,从而有效提高MySQL数据库服务的高可用性与可伸缩行。

MySQL Router 2.0是其初始版本,适用于MySQL Fabric用户,但已被弃用,不再支持。MySQL Router 2.1为支持MySQL InnoDB Cluster而引入,MySQL Router 8.0则是MySQL Router 2.1上的扩展,版本号与MySQL服务器版本号保持一致。即Router 2.1.5作为Router 8.0.3(以及MySQL Server 8.0.3)发布,2.1.x分支被8.0.x取代。这两个分支完全兼容。当前最新版本为8.0.17,MySQL强烈建议使用Router 8与MySQL Server 8和5.7一起使用。

一、功能介绍

1. 透明路由

MySQL Router通过智能地将客户端连接路由到MySQL服务器来简化应用程序开发。MySQL使用组复制在多个服务器之间复制数据,当服务器发生故障时执行自动故障转移,基于paxos协议在剩余实例中选举一个新的主库。这里存在一个问题,如果应用程序直连主库,当发生主库切换时可用的数据库IP地址发生变化,客户端应用程序必须自行修改它的连接配置。这种方案极不现实,因为需要应用程序了解组复制的拓扑结构并知道哪个MySQL实例是主库,对于应用程序显然是强人所难,这些处理逻辑本应对应用透明。

而这正是MySQL Router的用武之地。当与InnoDB Cluster一起使用时,MySQL Router充当代理,向应用程序隐藏网络上的多个MySQL实例,并将数据请求映射到其中一个集群实例。只要有足够的在线副本并且组件之间的通信完好无损,客户端就能够连接其中一个实例,保持对外服务的连续性。应用程序要做的只是连接到Router,而不是直连MySQL数据库实例,其它的交给Router处理即可。

MySQL Router的推荐部署模型是与InnoDB Cluster集成,其中Router与应用程序最好位于同一主机上。

2. 元数据缓存

MySQL Router处于应用程序和MySQL服务器之间。当应用程序连接到Router时,Router从其候选池中选择合适的MySQL服务器连接,此后Router转发应用程序和MySQL之间的所有往返网络流量。

MySQL Router保留在线MySQL服务器的缓存列表,或配置的InnoDB Cluster的拓扑和状态。Router启动时,列表从Router的配置文件加载。当使用--bootstrap选项引导Router时,此列表由InnoDB群集服务器生成。为了更新缓存,Router元数据缓存组件与包含元数据的InnoDB Cluster服务器之一保持连接,通过从该MySQL实例的performance_schema库表查询元数据和实时状态信息来实现。每当修改InnoDB集群时都会更改集群元数据,并且只要检测到集群状态更改,就会通过MySQL服务器的Group Replication插件实时更新performance_schema库表。

当Router检测到连接的MySQL服务器关闭时,它会尝试连接到不同的MySQL服务器以从新的服务器获取元数据和InnoDB Cluster状态。关闭的MySQL服务器的应用程序连接会自动关闭。应用程序必须重新连接到Router,这要求应用程序实现重连机制。Router将它们重定向到在线MySQL服务器。

3. 简单重定向

Router将MySQL连接重定向到可用的MySQL服务器,这意味着数据包是在未经检查的情况下整体路由的。如果连接失败,应用程序须要重试连接,MySQL Router在尝试连接失败后选择新的MySQL服务器。这被称为简单重定向连接路由,因为它需要应用程序重试连接。也就是说,如果从MySQL Router到MySQL服务器的连接中断,则应用程序会遇到连接失败,但新的连接尝试会触发Router查找并连接到另一台MySQL服务器。路由连接的服务器和路由策略在配置文件中定义。

使用MySQL Router不需要特定的库或接口,与不使用Router相比,应用程序所感知的唯一区别是如何建立与MySQL服务器的连接。因为MySQL Router在尝试连接时只是单纯重定向,并不读取数据包或执行分析,所以应用程序需要捕获连接错误并重试连接到Router。

使用MySQL Router的工作流程如下:

MySQL客户端连接到MySQL Router。

Router检查可用的MySQL服务器。

Router打开一个适用MySQL服务器的连接。

Router在应用程序和MySQL服务器之间来回转发数据包

如果连接的MySQL服务器出现故障, Router将断开连接。当应用程序重试连接到Router时,Router选择另一个可用MySQL服务器。

部署MySQL Router时建议但不强制遵循两点:

在与应用程序相同的主机上安装并运行MySQL Router。

使用配置文件中的bind_port = 127.0.0.1:<port>将 Router绑定到localhost,或者禁用TCP连接(--conf-skip-tcp)并将其限制为仅使用Unix套接字连接(--conf-use-sockets)。

建议主要出于性能考虑。每当在网络中引入通信组件时,都会产生一定的开销,并且会受到工作负载的严重影响。幸运的是,MySQL Router的性能影响非常小。官方文档显示,当前版本的简单重定向连接路由,其速度与直连数据库相比仅慢约1%。

4. MySQL Router 8.0的新特性

较之以前2.x版本,MySQL Router 8.0新增了如下主要功能:

添加了可选的routing_strategy配置选项。可用值为first-available、next-available、round-robin和round-robin-with-fallback。以前版本中,这些策略对应mode选项中的调度模式,其中read-write对应first-available,而read-only对应round-robin。它们保留了这些模式的先前行为。

添加了--ssl-key和--ssl-cert命令行选项,指定客户端证书和私钥以方便客户端身份验证。用于使用REQUIRE X509创建root帐户时。

添加了connect_timeout和read_timeout元数据配置文件选项。它们在[DEFAULT]命名空间下定义,并影响元数据服务器连接等内部操作。

Bootstrap接受InnoDB Cluster的任何成员,并自动查找并重新连接到可写服务器。以前只接受主库。

Bootstrap接受--config选项并读取[logger]级别选项的定义。

最大并发客户端连接数从500增加到5000。

添加了一个新的mysqlrouter_plugin_info实用程序来帮助调试MySQL Router插件。

二、安装与启动

1. 安装

MySQL Router的安装过程依赖于所使用的操作系统和安装介质,二进制包的安装通常非常简单,而源码包则需要先编译再安装。例如在Linux上的安装最新的MySQL Router二进制包,只需要用mysql用户执行一条解压命令就完成了:

tar -Jxvf mysql-router-8.0.17-linux-glibc2.12-x86_64.tar.xz

解压后生成如下目录:

[mysql@hdp1~]$ll mysql-router-8.0.17-linux-glibc2.12-x86_64

total 108

drwxrwxr-x 2 mysql mysql    126 Sep  2 15:26 bin

drwxrwxr-x 3 mysql mysql   4096 Sep  2 15:26 lib

-rw-r--r-- 1 mysql mysql 101805 Jun 25 18:23 LICENSE.router

drwxrwxr-x 3 mysql mysql     17 Sep  2 15:22 man

-rw-r--r-- 1 mysql mysql    700 Jun 25 18:23 README.router

drwxrwxr-x 3 mysql mysql     16 Sep  2 15:22 share

bin目录下存放的是可执行文件,可将该目录添加到PATH环境变量中方便执行,例如:

export PATH=.:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/home/mysql/mysql-5.6.14/bin:/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin;

然后就可以执行mysqlrouter命令,如检查版本或显示帮助:

[mysql@hdp1~]$mysqlrouter --version

MySQL Router  Ver 8.0.17 for linux-glibc2.12 on x86_64 (MySQL Community - GPL)

[mysql@hdp1~]$mysqlrouter --help

[mysql@hdp1~]$mysqlrouter --help

MySQL Router  Ver 8.0.17 for linux-glibc2.12 on x86_64 (MySQL Community - GPL)

Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Configuration read from the following files in the given order (enclosed

in parentheses means not available for reading):

(/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/.././mysqlrouter.conf)

(/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/.././mysqlrouter.ini)

(/home/mysql/.mysqlrouter.conf)

(/home/mysql/.mysqlrouter.ini)

...

各种安装包的下载地址为https://dev.mysql.com/downloads/router/。其它情况的安装可参考https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-installation.html。

2. 启动

MySQL Router启动时需要读取其配置文件,获取基本连接路由信息。Router插件执行基于连接的路由,这意味着它将数据包转发到服务器而不检查它们。这是一种提供高吞吐量的简单方法。一个基本的连接路由设置如下所示:

[logger]

level = INFO

[routing:secondary]

bind_address = localhost

bind_port = 7001

destinations = 172.16.1.125:3306,172.16.1.126:3306,172.16.1.127:3306

routing_strategy = round-robin

[routing:primary]

bind_address = localhost

bind_port = 7002

destinations = 172.16.1.125:3306,172.16.1.126:3306,172.16.1.127:3306

routing_strategy = first-available

这里设置了两个路由策略:通过本地7001端口,循环连接到172.16.1.125:3306、172.16.1.126:3306、172.16.1.127:3306三个MySQL实例,由round-robin路由策略所定义;通过本地7002端口,对同样的三个MySQL实例设置首个可用策略。首个可用策略使用目标列表中的第一个可用服务器,即当172.16.1.125:3306可用时,所有7002端口的连接都转发到它,否则转发到172.16.1.126:3306,以此类推。Router不会检查数据包,也不会根据分配的策略或模式限制连接,因此应用程序可以据此确定将读写请求发送到不同的服务器。本例中可将读请求发送到本地7001端口,将读负载均衡到三台服务器。同时将写请求发送到7002,这样只写一个服务器,从而实现的读写分离。

将以上配置保存到/home/mysql/.mysqlrouter.conf文件,并后台启动MySQL Router:

[mysql@hdp1~]$mysqlrouter -c /home/mysql/.mysqlrouter.conf &

查看进程确认MySQL Router已经启动:

[mysql@hdp1~]$ps -ef | grep router

mysql    327410 326543  0 16:31 pts/0    00:00:00 mysqlrouter -c /home/mysql/.mysqlrouter.conf

...

缺省的日志文件中显示如下信息:

[mysql@hdp1~]$more ~/mysql-router-8.0.17-linux-glibc2.12-x86_64/mysqlrouter.log

2019-09-02 16:42:36 routing INFO [7f151540b700] [routing:primary] started: listening on localhost:7002, routing strategy = first-available

2019-09-02 16:42:36 routing INFO [7f1514c0a700] [routing:secondary] started: listening on localhost:7001, routing strategy = round-robin

[mysql@hdp1~]$

查看监听状态:

[mysql@hdp1~]$netstat -tnlp

(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all.)

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -

tcp        0      0 127.0.0.1:199           0.0.0.0:*               LISTEN      -

tcp6       0      0 :::80                   :::*                    LISTEN      -

tcp6       0      0 :::22                   :::*                    LISTEN      -

tcp6       0      0 ::1:7001                :::*                    LISTEN      329852/mysqlrouter

tcp6       0      0 ::1:7002                :::*                    LISTEN      329852/mysqlrouter

[mysql@hdp1~]$

现在,MySQL Router正在侦听端口7001和7002,并将请求发送到适当的MySQL实例:

[mysql@hdp1~]$mysql -uwxy -p123456 -P7001 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$mysql -uwxy -p123456 -P7001 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp3       |

+------------+

[mysql@hdp1~]$mysql -uwxy -p123456 -P7001 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp4       |

+------------+

[mysql@hdp1~]$mysql -uwxy -p123456 -P7001 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$

由上可见,发送到本地7001端口的请求,被循环转发到三个服务器,而发送到本地7002端口的请求,全部被转发到172.16.1.125:3306。

routing_strategy是MySQL Router的核心选项,从8.0.4版本开始引入,当前有效值为first-available、next-available、round-robin、round-robin-with-fallback。顾名思义,该选项实际控制路由策略,即客户端请求最终连接到哪个MySQL服务器实例。相对于以前版本mode的选项,routing_strategy选项更为灵活,并且不能同时设置routing_strategy和mode,静态路由的设置只能选择其中之一。对于InnoDB Cluster而言,该设置时可选的,缺省使用round-robin策略。

round-robin:每个新连接都以循环方式连接到下一个可用的服务器,以实现负载平衡。

round-robin-with-fallback:用于InnoDB Cluster。每个新的连接都以循环方式连接到下一个可用的SECONDARY服务器。如果SECONDARY服务器不可用,则以循环方式使用PRIMARY服务器。

first-available:新连接从目标列表路由到第一个可用服务器。如果失败,则使用下一个可用的服务器,如此循环,直到所有服务器都不可用为止。

next-available:与first-available类似,新连接从目标列表路由到第一个可用服务器。与first-available不同的是,如果一个服务器被标记为不可访问,那么它将被丢弃,并且永远不会再次用作目标。重启Router后,所有被丢弃服务器将再次可选。此策略向后兼容MySQL Router 2.x中mode为read-write的行为。

现在7002端口的路由策略为first-available,下面依次停止172.16.1.125:3306、172.16.1.126:3306、172.16.1.127:3306,观察7002端口的访问情况。

# 停止 172.16.1.125:3306

[mysql@hdp2~]$mysqladmin -uwxy -p123456 -h172.16.1.125 -P3306 shutdown

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

[mysql@hdp2~]$

# 访问7002

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp3       |

+------------+

# 停止 172.16.1.126:3306

[mysql@hdp3~]$mysqladmin -uwxy -p123456 -h172.16.1.126 -P3306 shutdown

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

[mysql@hdp3~]$

# 访问7002

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp4       |

+------------+

[mysql@hdp1~]$

# 停止 172.16.1.127:3306

[mysql@hdp4~]$mysqladmin -uwxy -p123456 -h172.16.1.127 -P3306 shutdown

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

[mysql@hdp4~]$

# 启动172.16.1.125:3306

[mysql@hdp2~]$mysqld_safe --defaults-file=/etc/my.cnf &

# 访问7002

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$

first-available总是循环查找目标列表中第一个可用服务器并连接它。将7002的策略改为next-available,把上面的步骤再做一遍,会看到最后的查询失败。即使此时172.16.1.125:3306可用也不会再次连接它,除非重启Router。

# 最后的查询连接失败

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

ERROR 2003 (HY000): Can't connect to remote MySQL server for client connected to 'localhost:7002'

# 重启路由

[mysql@hdp1~]$kill `ps -ef | grep router | grep -v grep | awk '{print $2}'`

[mysql@hdp1~]$mysqlrouter -c ~/.mysqlrouter.conf &

# 再次查询

[mysql@hdp1~]$mysql -uwxy -p123456 -P7002 --protocol=TCP -e"select @@hostname"

Warning: Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| hdp2       |

+------------+

[mysql@hdp1~]$

可以在网络上的单台或多台主机上运行多个MySQL路由器实例,而无需将MySQL Router隔离到单个机器上。这是因为MySQL Router对任何特定服务器或主机都不具有亲和性。要停止MySQL Router,只需用kill或killall命令直接杀掉相关进程。MySQL Router只起到一个转发流量的作用,它实在太“轻”了,以至都没有一个单独的停止命令。

三、配置

MySQL Router启动时可以从配置文件、扩展配置文件、命令行选项三个地方获取配置信息。本节说明MySQL Router配置文件的位置、配置文件语法和配置选项。

1. 配置文件位置

(1)缺省配置文件

MySQL Router在启动时扫描缺省配置文件,并可选择在运行时从命令行加载用户定义的配置文件。默认情况下,MySQL Router扫描依赖于操作系统的特定位置以查找配置文件。执行mysqlrouter --help可以查看系统上的缺省配置文件位置:

[mysql@hdp1~]$mysqlrouter --help | more

MySQL Router  Ver 8.0.17 for linux-glibc2.12 on x86_64 (MySQL Community - GPL)

Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Configuration read from the following files in the given order (enclosed

in parentheses means not available for reading):

(/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/.././mysqlrouter.conf)

(/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/.././mysqlrouter.ini)

/home/mysql/.mysqlrouter.conf

(/home/mysql/.mysqlrouter.ini)

Plugins Path:

/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/lib/mysqlrouter

Default Log Directory:

/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64

Default Persistent Data Directory:

/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/../var/lib/mysqlrouter

Default Runtime State Directory:

/home/mysql/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/../run

...

从帮助信息的开始部分可以看到MySQL Router查找的缺省配置文件和查找顺序。括号中的文件不可用,这里只有/home/mysql/.mysqlrouter.conf一个可用缺省配置文件。注意,如果使用-c或--config选项传入用户定义的配置文件,则不会加载缺省配置文件。

(2)用户定义和扩展配置文件

用户定义配置文件由-c或--config命令行选项指定,扩展配置文件由-a或--extra-config命令行选项指定。从缺省配置文件或使用--config选项指定的文件读取配置后,读取扩展配置文件:

shell> mysqlrouter --config /custom/path/to/router.conf --extra-config /another/config.conf

可以传入多个扩展配置选项,并按照输入的顺序加载文件:

shell> mysqlrouter --config b.conf --extra-config a.conf --extra-config c.conf

在上面的示例中,首先加载b.conf,然后按顺序加载a.conf和c.conf。此外由于使用了--config,不会加载缺省配置文件。每个加载的配置文件都会覆盖先前读取的配置文件中的设置。

2. 配置文件语法

MySQL Router配置文件格式类似于MySQL服务器的配置文件,符合传统INI文件格式,其中包含多个段,每个段中包含多个选项。选项中的目录支持支持正斜杠和反斜杠,反斜杠无条件复制而不是转义字符。配置文件可以包含注释行,注释行以井号(#)或分号(;)开头,并继续到行尾。注意只支持整行注释,不支持行中、行尾注释。(1)段

每个配置文件都包含一个配置段列表,其中每个段包含一系列配置选项,每个配置选项都有名称和值,例如:

[section name]

option = value

option = value

option = value

[section name:optional section key]

option = value

option = value

option = value

中括号中的是段名和可选的段键,段名与段键之间用冒号(:)分隔。段名和段键的组合对于配置是唯一的,中括号内不能有首尾空格。段名与段键由一个或多个字母、数字或下划线(_)的序列组成,不允许使用其它字符。

段类似于命名空间。例如user选项,其含义取决于其关联的段。[DEFAULT]段中的user指的是运行MySQL Router的系统用户,该用户也受--user命令行选项控制。[metadata_cache]段中定义的user,指的是访问MySQL服务器元数据的MySQL用户。

下面列举几个主要的段:

[DEFAULT]:DEFAULT是一个特殊的段,用于选项缺省值,在该段中查找其它段中没出现的选项,通常配置扩展配置文件的目录、日志的目录、MySQL Router运行时的目录(如pid文件)等。DEFAULT段不接受段键。

[logger]:logger段只有一个选项,设置日志的记录级别。

[routing:NAME]:该段是MySQL Router主要配置部分,设置不同的路由实例,其中NAME是自定义的段键名。

(2)选项

在段名之后,可以有一个零或多个选项行,其中每个选项行的形式如下:

name = value

处理之前将删除选项名称或选项值上的任何首尾空格。选项名称不区分大小写。选项值支持在大括号中引用选项名称,作为变量插入值。变量引用值是在检索选项值时完成的,而不是在读取配置文件时。如果变量未定义,则不进行替换,并按字面读取选项值。考虑下面的示例配置文件:

[DEFAULT]

prefix = /usr/

[sample]

bin = {prefix}bin/{name}

lib = {prefix}lib/{name}

name = magic

directory = /data/{mysqlrouterdata}

这里bin的值是“/usr/bin/magic”,lib的值是“/usr/lib/magic”。由于未定义名为“{mysqlrouterdata}”的变量,directory的值是“/data/{mysqlrouterdata}”。

MySQL Router定义了配置文件可用的如下预定义变量。变量使用大括号,例如{program}作为Router可执行程序预定义变量。

program:程序的名称,通常是mysqlrouter。

origin:二进制文件所在目录。

logging_folder:日志文件所在目录。

plugin_folder:插件文件所在目录。

runtime_folder:运行时数据文件所在目录。

config_folder:配置文件所在目录。

3. 配置文件示例

启动时,MySQL Router会读取配置文件列表,这些配置文件一起构成Router的配置。至少需要一个配置文件,否则启动Router时会报 Error: No valid configuration file available 错误。下面是一个名为mycluster的MySQL InnoDB cluster的基本连接路由示例,读写流量发送到6446端口,只读访问使用6447端口。

[DEFAULT]

logging_folder=/opt/routers/myrouter/log

runtime_folder=/opt/routers/myrouter/run

data_folder=/opt/routers/myrouter/data

connect_timeout=30

read_timeout=30

[logger]

level = INFO

[metadata_cache:mycluster]

router_id=5

bootstrap_server_addresses=mysql://localhost:3310,mysql://localhost:3320,mysql://localhost:3330

user=mysql_router

metadata_cluster=mycluster

ttl=5

[routing:mycluster_default_rw]

bind_address=0.0.0.0

bind_port=6446

destinations=metadata-cache://mycluster/default?role=PRIMARY

routing_strategy=round-robin

[routing:mycluster_default_ro]

bind_address=0.0.0.0

bind_port=6447

destinations=metadata-cache://mycluster/default?role=SECONDARY

routing_strategy=round-robin

该配置中定义了五个段:

[DEFAULT]中定义了数据文件目录、日志文件目录、运行时文件目录的位置,以及连接和读取MySQL元数据服务器的超时时间为30秒。

[logger]中定义日志级别为info,可选值有info、debug、warning、error、fatal,不区分大小写。

[metadata_cache:mycluster]中定义MySQL服务器元数据访问信息:router_id是整型的路由ID。bootstrap_server_addresses是逗号分隔的InnoDB cluster中的MySQL实例。user定义访问元数据的用户。metadata_cluster定义InnoDB cluster名称。ttl定义缓存时间为5秒。

[routing:mycluster_default_rw]和[routing:mycluster_default_ro]分别定义读写路由和只读路由。bind_address指定路由使用本机IP地址。配置文件中的bind_address选项只接受一个地址,但是可以使用bind_addres = 0.0.0.0绑定到localhost上的所有地址。bind_port指定客户端连接Router使用的端口。destinations引用由metadata-cache定义的目标地址,以利用InnoDB Cluster的元数据缓存来动态配置主机信息。如果不使用InnoDB Cluster,destinations可以指定为逗号分隔的IP:port地址,但bind_address中的地址不能出现在destinations列表中。routing_strategy定义路由策略,本例中读写和只读均为循环访问三个节点。

配置选项的完整说明,参见https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-conf-options.html。

总的来说,MySQL Router从原理、安装、配置到部署使用都是如此轻而易举,可满足简单高可用应用场景的需求。

点赞

5

评论

4

分享

已收藏

28

举报

关注

一键三连

MySQL-Router 8.0安装与配置.docx

10-17

本文详细描述了MySQL Replication(1主2从)搭配MySQL-Router(8.0)中间件实现高可用方案,主要描述MySQL-Router中间件的安装与配置步骤,保证一次成功。

Mysql8.0安装以及MySQL InnoDB Cluster集群安装

萧何的博客

6853

mysql8安装以及MySQL InnoDB Cluster集群安装安装环境介绍mysql安装mysql shell安装mysql router安装 安装环境介绍 mysql官方下载地址:https://dev.mysql.com/downloads/ Centos7(CentOS-7-x86_64-Everything-1708.iso) Mysql8.0.13(mysql-8.0.11-1.e...

开挂的兔子:~/Share/mysql$ mysqlrouter -c ./.mysqlrouter.conf Encryption key for router keyring: 按照3. 配置文件示例写的配置文件,启动时怎么提示让输入keyring呢 直接回车报错Error: Failed to load keyring file: ***/mysql-router-8.0.17-linux-glibc2.12-x86_64/bin/../var/lib/mysqlrouter/keyring: No such file or directory2 年前回复

陌殇流苏:我也安装的是MySQL-router 8.0.17 但是在启动时报找不到routin.so 不知道是为何2 年前回复

陌殇流苏回复wzy0623: 谢谢,问题解决,原因时之前rpm安装失败后,有些文件没有清理干净,影响了2 年前回复

wzy0623回复: 还装过其它版本吧。设置LD_LIBRARY_PATH环境变量试试2 年前回复

相关推荐

mysql-router设置_mysql-router配置_陶韵的博客

4-11

db: mysql 8.0.18 innodb cluster 是 mysql group replication + mysql-shell + mysql-router ,其中 mysql-router 是和应用安装在一起提供高可用. mysqlrouter 生成配置文件 # /usr/local/mysql-router-8.0.18-linux-glibc2.12...

mysql-router配置_一名数据库爱好者的专栏_mysql router...

4-5

router_id=1 user=mysql_router1_fucrtwhosizh metadata_cluster=production ttl=0.5 use_gr_notifications=0 [routing:production_default_rw] bind_address=0.0.0.0 bind_port=6446 socket=/usr/local/mysql-router-8.0.18-...

Mysql-router 8.0+Mysql8.0的MGR(单主模式)的配置与测试

zhangwenjiang001的博客

4892

本文仅供参考,亦有参考其他作者的文档及官方文档,在此一并致谢。 一、环境及软件:VMware,CenOS7.3,mysql 8.0,mysql-router 8.0 测试组合: mysql-router 8.0+MGR单主集群 ------------------------------------- 写在前面的总结: 1、MGR单主模式,不太合适,因为MGR单主模式下主库failove...

MySQL Router 安装与配置

weixin_34006965的博客

5026

2019独角兽企业重金招聘Python工程师标准>>> ...

mysqlrouter详解_was3711537的博客

4-15

如果连接失败,应用程序须要重试连接,MySQL Router在尝试连接失败后选择新的MySQL服务器。这被称为简单重定向连接路由,因为它需要应用程序重试连接。也就是说,如果从MySQL Router到MySQL服务器的连接中断,则应用程序会遇到连接失败,但新的...

安装mysql的router_mysql-router的安装与使用_weixin_3...

4-7

mysql-router是mysql官方的轻量级的中间件主要有如下工能: 功能& 特性: 1、流量分发(只向一个实例导入流量、如果当前的实例宕机了、就会向集群的下一个实例导入流量) 2、一定的高可用能力 ...

使用MySQL Router实现高可用、负载均衡、读写分离的详细教程

weweeeeeeee的博客

618

一、MySQL Router简介 MySQL Router是MySQL官方提供的一个轻量级中间件,可以在应用程序与MySQL服务器之间提供透明的路由方式。主要用以解决MySQL主从库集群的高可用、负载均衡、易扩展等问题。Router可以与MySQL Fabric无缝连接,允许Fabric存储和管理用于路由的高可用数据库服务器组,使管理MySQL服务器组更加简单。 MySQL Router是一个...

使用MySQL Router实现高可用、负载均衡、读写分离

wzy0623的专栏

2万+

目录 一、MySQL Router简介 1. 功能 2. 架构 3. 使用 二、安装配置 三、自动失败切换 四、负载均衡 五、读写分离 六、多实例 1. 环境 2. 配置文件 3. 功能测试 参考: 一、MySQL Router简介         MySQL Router是MySQL官方提供的一个轻量级中间件,可以在应用程序与MySQL服务器之间提供透明的路由方式。...

mysqlrouter的介绍与使用

wnccmyr的博客

1062

[root@server2 mysqlrouter]# mysqlrouter -V MySQL Router Ver 8.0.21 for Linux on x86_64 (MySQL Community - GPL) MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy。 既然MySQL Router是一个数据库的中间件,那么MySQL Router必须能够分析来自前面客户端的SQL请求是写请求还是读请求,以便决定这个SQL请求是发送给

3.(MySQL Router+MGR)MySQL Router安装与配置

u010719917的专栏

5939

5. Using MySQL Router with InnoDB Cluster --bootstrap 5.1 生成MySQL Router配置文件 [root@wn19testcdb1001 ~]# mysqlrouter --bootstrap root@192.168.136.128:13306 --directory /root/mysqlrouter --user=root ...

mysql router 介绍_mysql router是什么?mysql router主要功能有哪些 | 学步园

weixin_30691643的博客

37

今天我们来简单介绍一下Oracle官方出品的数据库负载均衡利器——MySQL Router。什么是MySQL Router?MySQL Router是一个介于应用层和DB层之间的开源的轻量级中间件,它能够将前端应用的请求分析转发给后端DB服务器处理,从而实现DB的负载均衡,可以说它是先前MySQL Proxy的替代品,我们可以在Github找到它的源码。类似的工具有360的Atlas、美团点评的D...

mysql router手册_mysql router使用配置

weixin_33533460的博客

193

MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询...

1.(MySQL Router+MGR)MySQL Shell安装与用法

u010719917的专栏

1310

环境 MySQL5.7.20 + MyShell8.0.13+Redhat7.3 安装: yum -y install mysql-shell-8.0.13-1.el7.x86_64.rpm IP配置: 192.168.136.128 wn19testcdb1001 192.168.136.129 wn19testcdb1002 192.168.136.130 wn19testc...

轻量级中间件MySQL Router介绍与性能测试

1120

http://www.innomysql.net/article/25361.html#rd?sukey=014c68f407f2d3e115d27f247b7e04b154f8eb4fdf63c87b62a39443d0ee10267f3e328e59e7f4fac657921683f1fe2a 官方对于MySQL Router的定义是: MySQL Router is

MySQL Router搭建MySQL读写分离集群(Innodb)

oQingTian123456的专栏

999

案例使用MySQL5.7.24 + MySQL Shell8.0.13 + MySQL Router8.0.13搭建读写分离的主从集群。案例中使用两台机器,分别为m1和m2,系统版本为CentOS7。 MySQL和MySQL Shell采用zip包的安装方式,MySQL Router采用RPM安装。 安装包下载链接(含配置文件my.cnf): 链接:https://pan.baidu.com...

C++ 类模板与模板类详解

weixin_30907935的博客

4045

  在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?   事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template<class T>,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键...

高性能mysql之MySQL Router基于端口实现读写分离

weixin_46074899的博客

235

文章目录1.MySQL Router的介绍1.1MySQL Router简介1.2为什么要用MySQL Router?1.3MySQL Router关系图2.MySQL Router的使用 1.MySQL Router的介绍 1.1MySQL Router简介 MySQL Router是MySQL官方提供的一个轻量级中间件,是InnoDB Cluster的一部分,可在应用程序和后端MySQL服务器之间提供透明路由。主要用以解决MySQL主从库集群的高可用、负载均衡、易扩展等问题。Router作为一个流量转发

mysql router是干什么的_mysql router是什么

weixin_32259855的博客

43

今天我们来简单介绍一下Oracle官方出品的数据库负载均衡利器——MySQL Router。什么是MySQL Router?MySQL Router是一个介于应用层和DB层之间的开源的轻量级中间件,它能够将前端应用的请求分析转发给后端DB服务器处理,从而实现DB的负载均衡,可以说它是先前MySQL Proxy的替代品,我们可以在Github找到它的源码。类似的工具有360的Atlas、美团点评的D...

原理 rpm_官方工具|MySQL Router高可用原理与实战

weixin_42097208的博客

4

Mysql route介绍什么是mysql routeMySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。(1)Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应...

mysql router安装教程_mysql-router的安装与使用

weixin_29085151的博客

169

mysql-router是mysql官方的轻量级的中间件主要有如下工能:功能 & 特性:1、流量分发(只向一个实例导入流量、如果当前的实例宕机了、就会向集群的下一个实例导入流量)2、一定的高可用能力3、比之前的官方中间件mysql-proxy性能上有好一点4、可以与mysql-fabric整合1、下载https://dev.mysql.com/get/Downloads/MySQL-Rou...

MySQL Router简介

supermancoke的博客

9818

参考资料:https://dev.mysql.com/doc/mysql-router/2.0/en/mysql-router-configuration-file-example.html简介MySQL Router用于取代MySQL Proxy,建议MySQL Router与应用程序部署在一台机器。应用程序像访问MySQL一样访问MySQL Proxy,由MySQL Proxy将数据转发给后端的

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页

关于我们

招贤纳士

广告服务

开发助手

400-660-0108

kefu@csdn.net

在线客服

工作时间 8:30-22:00

公安备案号11010502030143

京ICP备19004658号

京网文〔2020〕1039-165号

经营性网站备案信息

北京互联网违法和不良信息举报中心

网络110报警服务

中国互联网举报中心

家长监护

Chrome商店下载

©1999-2021北京创新乐知网络技术有限公司

版权与免责声明

版权申诉

出版物许可证

营业执照

————————————————

版权声明:本文为CSDN博主「wzy0623」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wzy0623/article/details/100518636

(0)

相关推荐

  • MySQL8.0新特性

    MySQL从5.7一跃直接到8.0,这其中的缘由,咱就不关心那么多了,有兴趣的朋友自行百度,本次的版本更新,在功能上主要有以下6点: 账户与安全 优化器索引 通用表表达式 窗口函数 InnoDB 增强 ...

  • Mysql加锁过程详解

    Mysql加锁过程详解(1)-基本知识Mysql加锁过程详解(2)-关于mysql 幻读理解Mysql加锁过程详解(3)-关于mysql 幻读理解Mysql加锁过程详解(4)-select for u ...

  • 性能调优-MySQL索引数据结构详解与索引优化

    本篇文章主要学习了MySQL的索引的数据结构的认识,做一个大概的了解即可. 一.索引 在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储数据结构,它是某个表中一列或若 ...

  • MySQL写马详解

    日志写马 条件 1.全局变量general_log为ON MySQL的两个全局变量: general_log指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭. genera ...

  • MySQL checkpoint机制详解

    MySQL为了保证数据会做很多checkpoint动作.特别是InnoDB采用Write Ahead Log策略来防止宕机导致的数据丢失:即事务提交时,先写重做日志,再修改内存数据页的方式脏数据刷新等 ...

  • Mysql—mysqladmin 命令详解

    mysqladmin是一个执行管理操作的客户端程序.它可以用来检查服务器的配置和当前状态.创建和删除数据库等. mysqladmin工具的使用格式:mysqladmin [option] comman ...

  • MySQL主从复制集群—gtid实现详解

    老哥唠叨 上一篇发了MySQL主从复制集群搭建流程,不过好像小伙伴们对这个文章并不感兴趣,但是老哥出于对技术的热爱,和对小伙伴们的负责,我还是要写主从复制另一种实现方式:GTID.这些技术真的蛮重要的 ...

  • MySQL行锁、表锁、间隙锁详解

    前言 我们前几篇讲了索引是什么,如何使用explain分析索引使用情况,如何去优化索引,以及show profiles分析SQL语句执行资源消耗的学习.今天我们来讲讲MySQL的各种锁,这里存储引擎我 ...

  • MySQL性能分析show profiles详解

    前言 前几篇文章我们讲了什么是 MySQL 索引,explain分析SQL语句是否用到索引,以及索引的优化等一系列的文章,今天我们来讲讲Show profiles,看看SQL耗时到底出现在哪个环节. ...

  • Mysql之锁、事务绝版详解

    一 锁的分类及特性 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能 ...