MySQL路由器8.0(三)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 Ubuntu Oracle
MySQL路由器8.0(二)
MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它可用于各种用例,例如通过有效地将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。
1241 0
|
缓存 前端开发 网络协议
MySQL路由器8.0(一)
MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它可用于各种用例,例如通过有效地将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。
500 0
|
网络架构
FreeRadius+Mysql做cisco路由器登入认证
http://www.godupgod.com/post/42.html http://sec.
765 0
|
27天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
104 6
|
1天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
9 4
|
25天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
57 3
Mysql(4)—数据库索引
|
27天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
62 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
10天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
46 2
|
13天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
54 4
|
18天前
|
存储 关系型数据库 MySQL
如何在MySQL中创建数据库?
【10月更文挑战第16天】如何在MySQL中创建数据库?