MySQL路由器8.0(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它可用于各种用例,例如通过有效地将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。

第3章部署MySQL路由器


目录

3.1引导MySQL路由器

3.2在沙盒中试用MySQL路由器

3.3基本连接路由


绩效建议

为了获得最佳性能,MySQL路由器通常与使用它的应用程序安装在同一主机上。可能的原因包括:

允许本地UNIX域套接字连接到应用程序,而不是TCP / IP。


注意

Unix域套接字可以与连接到MySQL路由器的应用程序一起使用,但不适用于连接到MySQL服务器的MySQL路由器。

减少网络延迟。


允许MySQL路由器连接到MySQL,而不需要为路由器的主机提供额外的帐户,对于专门为应用程序主机创建的MySQL帐户,例如 myapp@198.51.100.45而不是像myapp @%这样的值 。


通常,应用程序服务器最容易扩展。

您可以在网络上运行多个MySQL路由器实例,而无需将MySQL路由器隔离到单个计算机上。这是因为MySQL路由器对任何特定服务器或主机都没有亲和力。

13CP08LYBZ3_`M}RTW}[5LG.png

图3.1 MySQL路由器部署示例

示例部署显示了一个中央组复制和高可用性设置,其中有三个实体指向或连接到它:MySQL Shell和两个堆栈,每个堆栈包括MySQL路由器,MySQL连接器和应用程序。


3.2在沙盒中试用MySQL路由器

通过使用InnoDB集群设置路由器沙箱来测试MySQL路由器安装。在这种情况下,路由器充当中间节点,将客户端连接重定向到服务器列表。如果一台服务器出现故障,客户端将重定向到列表中的下一个可用服务器。


设置MySQL服务器沙箱

首先启动三个MySQL服务器。您可以通过多种方式执行此操作,包括:

使用InnoDB集群提供的MySQL Shell AdminAPI接口。这是推荐且最简单的方法,本节将对此进行介绍。有关其他信息,请参阅 InnoDB Cluster。


有关脚本方法,请参阅 Scripting AdminAPI或 https://github.com/mattlord/D...

通过在三个不同的主机上或在同一主机上安装三个MySQL Server实例。


使用mysql-test-run.plMySQL Test Suite框架中的脚本。有关其他信息,请参阅MySQL测试套件。


使用mysqlcloneserver MySQL实用程序。


以下示例使用AdminAPI方法设置我们的群集沙箱。这是一个简要的概述,请参阅 InnoDB集群手册中的InnoDB Cluster的Sandbox部署以获取更多详细信息。以下假设您安装了当前版本的MySQL Shell,MySQL Server和MySQL Router。

部署沙箱群集


此示例使用MySQL Shell AdminAPI来设置具有三个MySQL实例(一个主要和两个辅助实例)的InnoDB集群,以及带有生成配置文件的自举独立MySQL路由器。使用“......”缩短输出。

shell> mysqlsh
mysql-js> dba.deploySandboxInstance(3310)
...
mysql-js> dba.deploySandboxInstance(3320)
...
mysql-js> dba.deploySandboxInstance(3330)
...
mysql-js> connect root@localhost:3310
...
mysql-js> cluster = dba.createCluster("myCluster")
...
mysql-js> cluster.addInstance("root@localhost:3320")
...
mysql-js> cluster.addInstance("root@localhost:3330")
...
mysql-js> cluster.status()
{
"clusterName": "myCluster", 
"defaultReplicaSet": {
    "name": "default", 
    "primary": "localhost:3310", 
    "ssl": "REQUIRED", 
    "status": "OK", 
    "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", 
    "topology": {
        "localhost:3310": {
            "address": "localhost:3310", 
            "mode": "R/W", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }, 
        "localhost:3320": {
            "address": "localhost:3320", 
            "mode": "R/O", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }, 
        "localhost:3330": {
            "address": "localhost:3330", 
            "mode": "R/O", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }
    }
}, 
"groupInformationSourceMember": "mysql://root@localhost:3310"
}
mysql-js> q
Bye!


设置路由器

接下来,设置MySQL Router以重定向到这些MySQL实例。我们将使用bootstrapping(using --bootstrap),并使用 创建一个独立的MySQL路由器安装 --directory。这使用元数据缓存插件来安全地存储凭据。

shell> mysqlrouter --bootstrap root@localhost:3310 --directory /tmp/myrouter

Please enter MySQL password for root:

Bootstrapping MySQL Router instance at '/tmp/mysqlrouter'...

MySQL Router has now been configured for the InnoDB cluster 'myCluster'.

The following connection information can be used to connect to the cluster.

Classic MySQL protocol connections to cluster 'myCluster':

  • Read/Write Connections: localhost:6446
  • Read/Only Connections: localhost:6447

X protocol connections to cluster 'myCluster':

  • Read/Write Connections: localhost:64460
  • Read/Only Connections: localhost:64470

shell> cd /tmp/myrouter

shell> ./start.sh


MySQL路由器现已配置并运行,并且正在使用我们之前设置的 myCluster集群。

测试路由器


现在通过连接到配置的MySQL路由器端口,像连接任何其他MySQL服务器一样连接到

MySQL路由器。

以下示例连接到端口6446上的MySQL路由器,我们为读写连接配置的端口:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p

mysql> SELECT @@port;

@@port
3310


如图所示,我们使用端口6446连接到MySQL路由器,但是看到我们连接到端口3310(我们的PRIMARY)上的MySQL实例。接下来让我们连接到一个只读的MySQL实例:

shell> mysql -u root -h 127.0.0.1 -P 6447 -p

mysql> SELECT @@port;

@@port
3320


如图所示,我们使用端口6447连接到MySQL路由器,但是看到我们连接到端口3320(我们的辅助设备之一)上的MySQL实例。只读模式默认为循环策略,其中下一个连接引用不同的辅助:

shell> mysql -u root -h 127.0.0.1 -P 6447 -p

mysql> SELECT @@port;

@@port
3330

如图所示,我们与端口6447的第二个只读连接连接到不同的MySQL辅助节点,在这种情况下连接到端口3330而不是3320。

现在通过首先杀死我们连接到上面的主MySQL实例(端口3310)来测试故障转移。

shell> mysqlsh --uri root@127.0.0.1:6446

mysql-js> dba.killSandboxInstance(3310)

The MySQL sandbox instance on this host in

/home/philip/mysql-sandboxes/3310 will be killed

Killing MySQL instance...

Instance localhost:3310 successfully killed.

您可以继续使用MySQL Shell检查连接,但让我们使用上面我们做的相同的mysql客户端示例:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p

mysql> SELECT @@port;

@@port
3320

shell> mysql -u root -h 127.0.0.1 -P 6447 -p

mysql> SELECT @@port;

@@port
3330

如图所示,尽管连接到相同的端口(主端口为6446,辅助端口为6447),但底层端口已更改。我们的新主服务器从端口3310更改为3320,而我们的辅助服务器从3320更改为3330。

我们现在已经演示了MySQL路由器执行简单的重定向到主要和次要MySQL实例的列表。


3.3基本连接路由

该连接路由插件执行基于连接的路由,这意味着它的数据包转发到服务器,而不检查它们。这是一种提供高吞吐量的简单方法。有关连接路由的其他常规信息,请参见 第1.3节“连接路由”。

一个简单的基于连接的路由设置如下所示。第4.3.2节“配置文件选项”中介绍了这些和其他选项 。

[logger]
level = INFO
[routing:secondary]
bind_address = localhost
bind_port = 7001
destinations = foo.example.org:3306,bar.example.org:3306,baz.example.org:3306
routing_strategy = round-robin
[routing:primary]
bind_address = localhost
bind_port = 7002
destinations = foo.example.org:3306,bar.example.org:3306
routing_strategy = first-available


在这里,我们使用连接路由来循环MySQL连接到端口7001上的三个MySQL服务器,如循环法 所定义 routing_strategy。此示例还使用端口7002为两个服务器配置第一个可用策略。第一个可用策略使用目标列表中的第一个可用服务器。分配给每个实例的MySQL实例数 destinations取决于您,因为这只是一个示例。路由器不会检查数据包,也不会根据分配的策略或模式限制连接,因此应用程序可以确定在何处发送读取和写入请求,在我们的示例中为端口7001或7002。

注意在MySQL Router 8.0之前,使用了现已弃用的 mode选项,而不是routing_strategy MySQL Router 8.0中添加的选项。


假设所有三个MySQL实例都在运行,接下来通过传入配置文件启动MySQL路由器:

shell> ./bin/mysqlrouter -config=/etc/mysqlrouter-config.conf

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

shell> ./bin/mysql --user=root --port 7001 --protocol=TCP

首先连接到foo.example.org,然后是bar.example.org,然后是baz.example.org,第四个调用将返回foo.example.org。相反,我们以不同方式配置端口7002的行为:

shell> ./bin/mysql --user=root --port 7002 --protocol=TCP

首先连接到foo.example.org,其他请求将继续连接到foo.example.org,直到出现故障,此时bar.example.org现在被使用。有关此行为的其他信息,请参阅 mode。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 Ubuntu Oracle
MySQL路由器8.0(二)
MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它可用于各种用例,例如通过有效地将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。
1322 0
|
缓存 前端开发 网络协议
MySQL路由器8.0(一)
MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它可用于各种用例,例如通过有效地将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。
637 0
|
网络架构
FreeRadius+Mysql做cisco路由器登入认证
http://www.godupgod.com/post/42.html http://sec.
799 0
|
1月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
73 3
|
1月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
24天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
25天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
26天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
25天前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。

推荐镜像

更多
下一篇
oss教程