MySQLRouter的安装部署
⽬录
01 MySQL Router介绍
MySQL Router是什么?
02 MySQL Router的安装部署
03 查看MySQL Router的元信息
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特点?
1、对应⽤透明。MySQL Router要做到对应⽤透明,它必须连接底层的MySQL,并知道当前哪个节点是Primary,这样,才能够在发⽣故障的时候进⾏故障转移。
2、使⽤场景。基于这个特性,它可以⽤在Innodb Cluster、Innodb Replicaset或者MGR的环境中。
3、MySQL Router会保留在线的MySQL实例的缓存列表,或者已经配置好的Innodb Cluster集的拓扑关系,除此启动的时候,这些信息将从MySQL Router的配置表中获取。
4、为保证缓存中的元信息能够得到即时更新,MySQL Router需要保证⾄少能够和集中的⼀个正常节点保持通信,它会从当前实例的Performance_schema表中获取数据库的原信息和实时状态。
5、当集中和MySQL Router通信的节点关闭时,MySQL Router会尝试访问集中的其他节点。并重新获取相关元数据信息。
02 MySQL Router的安装部署
为了获取更好的性能,通常情况下,MySQL Router会和应⽤程序部署在⼀起,这通常是基于下⾯的考虑:
1、可以通过socket套接字连接到MySQL Router,⽽不是tcp/ip⽅法
2、减少了⽹络上的延时
3、可以配置指定的账户来访问数据库,例如myapp@'host'⽽不是类似myapp@'%'这种全⽹段的账号,有利于提升安全性
4、通常,相⽐数据库服务器,应⽤服务器更容易扩展。
官⽅给的部署架构图如下:
下载安装过程:
1、直接登录官⽹下载MySQL Router的对应版本。
2、下载完成之后,解压,以8.0.20为例,由于是格式的⽂件,解压命令如下:
xz -d (解压成tar格式)
tar xvf xxx.tar (即可)
接下来就是初始化过程了,初始化的时候,需要我们的MySQL Server部署完毕,在之前的⽂章中,我们已经部署好了⼀个Innodb Replicaset架构,它有⼀主⼀从,IP地址分别是:
192.168.1.10 5607 Primary
192.168.1.20 5607 Secondary
初始化过程:
1、利⽤初始化命令初始化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
2、补充--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/f
# 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/f
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的操作就算成功了。
3、此时我们进⼊参数中指定的--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:f
-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
⽣成了⼀些配置⽂件和启停脚本,我们打开这个配置⽂件f看看内容:
# File automatically generated during MySQL Router bootstrap
[DEFAULT]
user=root
mysql下载完如何使用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
4、分析⽣成的配置⽂件,不难发现,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值。
5、使⽤命令在本地启动MySQL Router,指定本地⽣成的配置⽂件,命令如下:
[root@ mysql-router]# /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/f &
启动之后,我们使⽤刚才创建的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 | NUL +-----------+-------------+--------------+----
---------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+
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.ad
dress": "192.168.1.10:5607", "sql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} |
| 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 1 | NULL | 1 | {"instance.address": "192.168.1.10:5607", "sql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} |
| 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 2 | 1 | 0 | {"instance.address": "192.168.1.20:5607", "sql_server_uuid": "c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c"} |
+--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.01 sec)
以上就是MySQL Router的安装部署的详细内容,更多关于MySQL Router的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论