返回顶部
首页 > 资讯 > 数据库 >MySQL Router的安装部署
  • 673
分享到

MySQL Router的安装部署

MySQLRouter安装MySQLRouter部署 2022-05-16 17:05:41 673人浏览 安东尼
摘要

01 Mysql Router介绍     前面的文章中,我们说了ReplicaSet的基本概念mysql shell工具以及如何使用Mysql Shell搭建Innodb Replicaset。

01 Mysql Router介绍

    前面的文章中,我们说了ReplicaSet的基本概念mysql shell工具以及如何使用Mysql Shell搭建Innodb Replicaset。今天我们来看InnoDB ReplicaSet部署过程中的另一个重要组件MySQL Router。

MySQL Router是什么?

    为了更好的理解Innodb Replicaset,我们把之前的那张图搬迁过来,如下: 

通过上面的图,不难看出,MySQL Router是应用程序连接的入口,它的存在,让底层的架构对应用程序透明,应用程序只需要连接MySQL Router就可以和底层的数据库打交道,而数据库的主从架构,都是记录在MySQL Router的原信息里面的。

版本

    MySQL Router是MySQL官方的一款轻量级的高性能中间件,它介于应用程序和MySQL Server之间,应用程序通过连接MySQL Router和底层的MySQL Server之间通信,它对应用程序是透明的。官方文档建议搭配MySQL8.0或者MySQL5.7的Server使用。目前最新的版本是MySQL Router 8,如果您使用过MySQL Router的2.0或者2.1版本,强烈建议升级到MySQL Router 8。

MySQL Router特点?

对应用透明。MySQL Router要做到对应用透明,它必须连接底层的MySQL,并知道当前哪个节点是Primary,这样,才能够在发生故障的时候进行故障转移。

使用场景。基于这个特性,它可以用在Innodb Cluster、Innodb Replicaset或者MGR的环境中。

MySQL Router会保留在线的MySQL实例的缓存列表,或者已经配置好的Innodb Cluster集群的拓扑关系,除此启动的时候,这些信息将从MySQL Router的配置表中获取。

为保证缓存中的元信息能够得到即时更新,MySQL Router需要保证至少能够和集群中的一个正常节点保持通信,它会从当前实例的PerfORMance_schema表中获取数据库的原信息和实时状态。

当集群中和MySQL Router通信的节点关闭时,MySQL Router会尝试访问集群中的其他节点。并重新获取相关元数据信息。

02 MySQL Router的安装部署

      为了获取更好的性能,通常情况下,MySQL  Router会和应用程序部署在一起,这通常是基于下面的考虑:

可以通过Socket套接字连接到MySQL Router,而不是tcp/ip方法

减少了网络上的延时

可以配置指定的账户来访问数据库,例如myapp@'host'而不是类似myapp@'%'这种全网段的账号,有利于提升安全

通常,相比数据库服务器,应用服务器更容易扩展。

官方给的部署架构图如下:

下载安装过程:

直接登录官网下载MySQL Router的对应版本。

https://downloads.mysql.com/arcHives/router/

下载完成之后,解压,以8.0.20为例,由于是tar.xz格式的文件,解压命令如下:

xz -d xxx.tar.xz  (解压成tar格式)

tar xvf xxx.tar     (即可)

接下来就是初始化过程了,初始化的时候,需要我们的MySQL Server部署完毕,在之前的文章中,我们已经部署好了一个Innodb Replicaset架构,它有一主一从,IP地址分别是:

192.168.1.10  5607 Primary

192.168.1.20  5607 Secondary

初始化过程:

利用初始化命令初始化MySQL Router:


mysqlrouter
   --bootstrap superdba@'10.13.3.129':5607 
   --directory /data1/yazhou5/mysql/mysql-router
   --conf-use-sockets 
   --account routerfriend 
   --account-create always

这里,需要解释一下其中的几个参数:


--bootstrap          代表引导的实例,后面接一个连接信息的URL;
--directory          代表生成的配置目录
--conf-use-sockets   代表是否启用套接字连接(是否生成套接字文件)
--account            代表初始化后MySQL Router使用什么账号连接MySQL Server
--account-create     代表账号创建策略,always代表只有在account不存在的时候才进行bootstrap操作

这个命令敲下去之后,返回报错信息如下:


Error: You are bootstraping as a superuser.
This will make all the result files (config etc.) privately owned by the superuser.
Please use --user=username option to specify the user that will be running the router.
Use --user=root if this really should be the superuser.

系统检测到我们使用root账号来进行的MySQL Router初始化,提示我们如果使用root操作,需要在最后面补充--user=root

补充--user=root之后,重新执行命令,结果如下:


[root mysql-router]# /usr/local/mysql-router-8.0.20/bin/mysqlrouter --bootstrap superdba@10.185.13.195:5607  --directory /data1/yazhou5/mysql/mysql-router --conf-use-sockets  --account routerfriend  --account-create always --user=root --force
Please enter MySQL passWord for superdba:   # 这里输入我们已知的superdba账号密码
# Bootstrapping MySQL Router instance at '/data1/yazhou5/mysql/mysql-router'...

Please enter MySQL password for routerfriend: # 这里创建新的account账号的密码
- Creating account(s) 
- Verifying account (using it to run SQL queries that would be run by Router)
- Storing account in keyring
- Adjusting permissions of generated files
- Creating configuration /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf

# MySQL Router configured for the InnoDB ReplicaSet 'yeyz_test'

After this MySQL Router has been started with the generated configuration

    $ /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf

the cluster 'yeyz_test' can be reached by connecting to:

## MySQL Classic protocol

- Read/Write Connections: localhost:6446, /data1/yazhou5/mysql/mysql-router/mysql.sock
- Read/Only Connections:  localhost:6447, /data1/yazhou5/mysql/mysql-router/mysqlro.sock

## MySQL X protocol

- Read/Write Connections: localhost:64460, /data1/yazhou5/mysql/mysql-router/mysqlx.sock
- Read/Only Connections:  localhost:64470, /data1/yazhou5/mysql/mysql-router/mysqlxro.sock

可以看到,提示我们输入两次密码之后,bootstrap的操作就算成功了。

此时我们进入参数中指定的--directory目录中,查看生成的初始化文件,可以看到:


drwx------ 2 root root 4096 Apr 12 23:15 data
drwx------ 2 root root 4096 Apr 12 23:15 log
-rw------- 1 root root 1532 Apr 12 23:15 mysqlrouter.conf
-rw------- 1 root root  104 Apr 12 23:15 mysqlrouter.key
drwx------ 2 root root 4096 Apr 12 23:15 run
-rwx------ 1 root root  353 Apr 12 23:15 start.sh
-rwx------ 1 root root  209 Apr 12 23:15 stop.sh

生成了一些配置文件和启停脚本,我们打开这个配置文件mysqlrouter.conf看看内容:


# File automatically generated during MySQL Router bootstrap
[DEFAULT]
user=root
logging_folder=/data1/yazhou5/mysql/mysql-router/log
runtime_folder=/data1/yazhou5/mysql/mysql-router/run
data_folder=/data1/yazhou5/mysql/mysql-router/data
keyring_path=/data1/yazhou5/mysql/mysql-router/data/keyring
master_key_path=/data1/yazhou5/mysql/mysql-router/mysqlrouter.key
connect_timeout=15
read_timeout=30
dynamic_state=/data1/yazhou5/mysql/mysql-router/data/state.JSON

[logger]
level = INFO

[metadata_cache:yeyz_test]
cluster_type=rs
router_id=1
user=routerfriend
metadata_cluster=yeyz_test
ttl=0.5
auth_cache_ttl=-1
auth_cache_refresh_interval=2

[routing:yeyz_test_rw]
bind_address=0.0.0.0
bind_port=6446
socket=/data1/yazhou5/mysql/mysql-router/mysql.sock
destinations=metadata-cache://yeyz_test/?role=PRIMARY
routing_strategy=first-available
protocol=classic

[routing:yeyz_test_ro]
bind_address=0.0.0.0
bind_port=6447
socket=/data1/yazhou5/mysql/mysql-router/mysqlro.sock
destinations=metadata-cache://yeyz_test/?role=SECONDARY
routing_strategy=round-robin-with-fallback
protocol=classic

[routing:yeyz_test_x_rw]
bind_address=0.0.0.0
bind_port=64460
socket=/data1/yazhou5/mysql/mysql-router/mysqlx.sock
destinations=metadata-cache://yeyz_test/?role=PRIMARY
routing_strategy=first-available
protocol=x

[routing:yeyz_test_x_ro]
bind_address=0.0.0.0
bind_port=64470
socket=/data1/yazhou5/mysql/mysql-router/mysqlxro.sock
destinations=metadata-cache://yeyz_test/?role=SECONDARY
routing_strategy=round-robin-with-fallback
protocol=x

分析生成的配置文件,不难发现,MySQL Router配置了4个端口,分别是6446、6447、64460、64470和对应的套接字文件。

当然,我们可以通过一些参数的配置改变默认的端口和套接字,例如:


--conf-use-sockets:(可选)为所有四种连接类型启用UNIX域套接字,。
--conf-skip-tcp:   (可选)禁用TCP端口,如果只希望使用套接字,则可以通过--conf-use-sockets传递该选项。
--conf-base-port:  (可选)更改端口范围,而不使用默认端口。 默认为6446。
--conf-bind-address:(可选)更改每个路由的bind_address值。 

使用命令在本地启动MySQL Router,指定本地生成的配置文件,命令如下:


[root@ mysql-router]# /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf &

启动之后,我们使用刚才创建的routerfriend账号以及6446这个读写端口来连接MySQL Router:


[root@ mysql-router]# mysql -u routerfriend -h 127.0.0.1 -P 6446  -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 95696
Server version: 8.0.19 MySQL CommUnity Server - GPL

Copyright (c) 2000, 2013, 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.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

routerfriend@127.0.0.1 [(none)] 23:42:00>
routerfriend@127.0.0.1 [(none)] 23:42:01>select @@port;
+--------+
| @@port |
+--------+
|   5607 |
+--------+
1 row in set (0.00 sec)

我们通过6446端口连接MySQL Router之后,然后在MySQL Router中执行select @@port命令查看当前的端口号信息,可以看到,返回值是5607,说明MySQL Router已经帮我们路由到了底层的MySQL Server上面。

   这个routerfriend账号的权限可能不够,我们也可以换成superdba的高权限账号去连接mysqlrouter,这样就可以对MySQL Server中的库表进行读写操作。

03 查看MySQL Router的元信息

    MySQL Router搭建完毕后,可以通过查看元信息库mysql_innodb_cluster_metadata里面的表信息,包含cluster表、router表、以及instances表,对应的如下:


superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:20>select * from instances;
+-------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+
| instance_id | cluster_id                           | address            | mysql_server_uuid                    | instance_name      | addresses                              | attributes | description |
+-------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+
|           1 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.10:5607 | 0609f966-690f-11eb-bd89-fa163ebd2444 | 192.168.1.10:5607 | {"mysqlClassic": "192.168.1.10:5607"} | {}         | NULL        |
|           2 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.20:5607  | c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c | 192.168.1.20:5607  | {"mysqlClassic": "192.168.1.20:5607"}  | {}         | NULL        |
+-------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+
2 rows in set (0.00 sec)

superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:30>
superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:30>select * from clusters;
+--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+
| cluster_id                           | cluster_name | description        | options | attributes                                     | cluster_type | primary_mode | router_options |
+--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+
| 94d5f935-990e-11eb-8832-fa163ebd2444 | yeyz_test    | Default ReplicaSet | NULL    | {"adopted": 0, "opt_gtidSetIsComplete": false} | ar           | pm           | NULL           |
+--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+
1 row in set (0.00 sec)

superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:57>
superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:58>select * from routers;
+-----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+
| router_id | router_name | product_name | address     | version | last_check_in       | attributes                                                                                                                   | cluster_id                           | options |
+-----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+
|         1 |             | MySQL Router | 10.13.3.129 | 8.0.20  | 2021-04-12 23:52:29 | {"ROEndpoint": "6447", "RWEndpoint": "6446", "ROXEndpoint": "64470", "RWXEndpoint": "64460", "MetadataUser": "routerfriend"} | 94d5f935-990e-11eb-8832-fa163ebd2444 | NULL    |
+-----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+
1 row in set (0.00 sec)

还可以从表中查看当前的primary节点信息,primary_master字段为1的,即为primary节点。


superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:52:29>select * from async_cluster_members;
+--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+
| cluster_id                           | view_id | instance_id | master_instance_id | primary_master | attributes                                                                                                       |
+--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+
| 94d5f935-990e-11eb-8832-fa163ebd2444 |       2 |           1 |               NULL |              1 | {"instance.address": "192.168.1.10:5607", "instance.mysql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} |
| 94d5f935-990e-11eb-8832-fa163ebd2444 |       3 |           1 |               NULL |              1 | {"instance.address": "192.168.1.10:5607", "instance.mysql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} |
| 94d5f935-990e-11eb-8832-fa163ebd2444 |       3 |           2 |                  1 |              0 | {"instance.address": "192.168.1.20:5607", "instance.mysql_server_uuid": "c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c"}  |
+--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.01 sec)

以上就是MySQL Router的安装部署的详细内容,更多关于MySQL Router的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL Router的安装部署

本文链接: https://lsjlt.com/news/10310.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL Router的安装部署
    01 MySQL Router介绍     前面的文章中,我们说了ReplicaSet的基本概念MySQL Shell工具以及如何使用MySQL Shell搭建Innodb Replicaset。...
    99+
    2022-05-16
    MySQL Router安装 MySQL Router部署
  • 安装部署MySQL HA
    1.部署MHA接下来部署MHA,具体的搭建环境如下(所有操作系统均为CentOS7.4 64bit):IP地址主机名角色软件192.168.12.106Master.cnmanagermha4mysql-manager、mha4mysql-...
    99+
    2014-06-28
    安装部署MySQL HA 数据库入门 数据库基础教程 数据库 mysql
  • MySQL Group Replication的安装部署
    这次给大家介绍下MySQL官方最新版本5.7.17中GA的新功能 Group Replication 。 Group Replication是一种可用于实现容错系统的技术。复制组是一组通过消息传递相互交互的服务...
    99+
    2023-01-31
    MySQL Group Replication
  • MySQL安装部署(四种安装方法)
    目录 1.仓库安装  2.本地安装 3.容器安装  4.源码安装 MySQL数据库存在多种版本,不同的版本在不同的平台上(OS,也就是操作系统上)安装方式可 能有所不同,因此安装时一定要参照官方文档进行安装。MySQL :: MySQL ...
    99+
    2023-09-26
    mysql 数据库
  • MySQL in CentOS 7 安装部署
    1. 下载上传安装包到服务器 下载链接: https://pan.baidu.com/s/1YNaEq9E8lugXC8ebKyegwA 提取码:ienf 2. 解压及创建目录 解压 tar xzvf mysql-5.7.1...
    99+
    2018-02-25
    MySQL in CentOS 7 安装部署
  • MySQL 5.7安装部署总结
    之前搭建MySQL环境都是使用公司内部使用的脚本,其实说实话屏蔽了很多细节,对MySQL的安装还是了解比较肤浅,今天有个MySQL 5.7的数据迁移的任务,也是为了熟悉安装过程就走了一遍安装的流程,整...
    99+
    2024-04-02
  • MySQL Cluster7.2.4怎么安装部署
    本篇内容主要讲解“MySQL Cluster7.2.4怎么安装部署”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL Cluster7.2.4怎么安装部署...
    99+
    2024-04-02
  • MySQL所有的安装部署方式
    介绍MySQL所有的安装部署方式 目录一.前言二.关于MySQL的安装三.部署规划3.1 服务器规划3.2 数据库目录规划四.准备工具五.通用二进制包安装MySQL5.1 上传MySQL通用二进制安装包...
    99+
    2017-01-11
    MySQL所有的安装部署方式
  • MHA的安装部署
    本篇内容主要讲解“MHA的安装部署”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MHA的安装部署”吧! MHA 0.56 is n...
    99+
    2024-04-02
  • Python的安装部署
    为了更好的学习,我们在Windows和Linux上都安装Python 2.7和Python 3.5https://www.python.org/downloads/为了避免冲突,把Python3.5解压后的python.exe改为pytho...
    99+
    2023-01-31
    Python
  • MySQL-5.6.38 安装部署及介绍
    第1章 MySQL简介及部署1.1 介绍1.1.1 什么是数据数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符...
    99+
    2024-04-02
  • Linux下安装部署Mysql教程
    下面讲讲关于Linux下安装部署Mysql教程,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完Linux下安装部署Mysql教程这篇文章你一定会有所受益。1:获取mysql YU...
    99+
    2024-04-02
  • mysql 5.7数据库安装部署
    一、安装依赖环境: yum -y install libaio libaio-devel libtool make automake autoconf numactl numactl-devel bz...
    99+
    2024-04-02
  • MySQL怎么进行安装部署
    这篇文章将为大家详细讲解有关MySQL怎么进行安装部署,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL安装部署1.二进制安装1.清除残留软件rpm -q...
    99+
    2024-04-02
  • sqlserver2014部署安装
    百度云网址链接: https://pan.baidu.com/s/1BwgdnESI8Fqlos9EIOLv1A 提取码: wsy5 解压ISO镜像文件,点击setup安装程序       进入安装界面       点击全新SQ...
    99+
    2014-07-23
    sqlserver2014部署安装
  • DolphinScheduler安装部署
    文章目录 1.安装环境及软件准备1.1环境 2.准备工作3.安装DolphinScheduler3.1DolphinSchedule源数据库配置3.2DolphinScheduler配置及...
    99+
    2023-09-12
    数据库 mysql apache
  • DVWA安装部署
    DVWA安装部署 前言一、DVWA是什么?二、phpstudy安装部署三、DVWA安装部署 前言 为了更好、更具体的学习了解网络安全相关的知识,笔者开始着手学习渗透测试相关内容。相关系列...
    99+
    2023-08-31
    php 安全 web安全
  • 安装golang部署
    一、前言Go是一门非常受欢迎的开源编程语言,其诞生于Google,目的是为了解决通用编程语言缺乏简洁、高效和安全性问题。越来越多的企业开始使用Go作为后端开发语言,例如Uber、Netflix等。在本篇文章中,我们将介绍如何在Linux系统...
    99+
    2023-05-22
  • Redis的安装和部署
    这篇文章给大家分享的是有关Redis的安装和部署。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。redis的数据类型有:字符串(string)、哈希(Map)、列表(list)、集合(s...
    99+
    2024-04-02
  • MySQL 57安装部署(Zip版)(Windows版)
      在的根目录下新建一个my.ini写入以下内容      [mysqld] port = 3306 basedir=D:mysqlmysql-5.7.22-winx64 # MySQL程序安装目录 datadir=D:mysqlmy...
    99+
    2020-12-03
    MySQL 57安装部署(Zip版)(Windows版)
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作