MySql Router使用

简介

MySQL Router是MySQL Proxy的替换产品。支持读写分离,故障自动切换。
目前的最新版本为8.0.21。
操作系统为Windows10。

下载&配置

从官方网站进行下载:

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

下载后是个zip文件,解压。打开根目录。

  1. 在根目录下添加一个3个文件夹,分别命名为:log,run,data。
  2. 在根目录下添加一个mysqlrouter.ini文件。

配置文件

打开添加的mysql-router.ini

[DEFAULT]
logging_folder=D:\Program Files\mysql-router\log
runtime_folder=D:\Program Files\mysql-router\run
data_folder=D:\Program Files\mysql-router\data
connect_timeout=30
read_timeout=30

[logger]
# debug、info(默认)、warning、error、fatal,不区分大小写
level = INFO

[routing:failover]
bind_address = 0.0.0.0
bind_port = 3307
max_connections = 1024
mode = read-write
destinations = 192.168.15.98:3306,192.168.15.115:3306

[routing:balancing]
bind_address = 0.0.0.0
bind_port = 3308
max_connections = 1024
mode = read-only
destinations = 192.168.15.98:3306,192.168.15.115:3306

[keepalive]
interval = 60

其中:

  • 只支持单行#;注释,不支持行中/行尾注释。
  • 节点名称用[routing:xxx]定义。所有节点平行,即其中xxx内容不重要,关键看其下的配置。
  • [routing:failover]节点为主节点。多个主节点之间用,隔开。Router会优先使用前面的节点。一旦前面的节点故障,会在30s内切换到后面的节点。
  • [routing:balancing]节点为负载均衡节点。多个主节点之间用,隔开。Router会轮询使用所有的可用节点。
  • mode可设为read-write(首个可用)或者read-only(轮询)。主节点通常会设为read-write,负载均衡节点通常设为read-only

可以看到读写分离是需要设置不同的端口的。这意味着使用者必须明确区分哪几个端口用于读,哪几个端口用于写,而不能统一端口交给MySQL Router负责。

read-write(首个可用)与read-only(轮询)

read-write,在这里并非是字面意思读-写,而是首个可用的意思。在其下配置的多个server,首先使用最前面的。若前面的不可用,就替换为后面的。需要注意的就是整个列表不会循环,一旦整个列表验证到末尾都不可用,则整个服务将不可用。
read-only,在这里并非是字面意思只读,而是轮询的意思。在其下配置的多个server都保持心跳,并维持可用列表。当有链接请求时,便从可用列表中依次取出server。一个server不可达,但过一段时间心跳恢复,则该server会被重新加入到可用列表中。
需要注意的是,Router只会将新连接分配给server,而不会将一个server正在进行的连接分配给另一个。所以有可能会出现一种现象:一开始两个server承担的连接数差距不大;后来一个server的连接都断开,但另一个server的连接都保持。于是此时一个server没有连接,一个server却有很多连接。但Router并不做均衡,依然是保持现状。当然,新来的连接,会更多地被分配给空闲的server。
一个解决方案就是设置连接的maxAge属性,也就是生命周期。

实例

设有两台服务器A和B:

[routing:failover]
bind_address = 0.0.0.0
bind_port = 3307
mode = read-write
destinations = A,B

[routing:balancing]
bind_address = 0.0.0.0
bind_port = 3308
mode = read-only
destinations = A,B

如上,read-writeread-only下均配置A、B。

  • A,B均正常,则:应用访问3307端口,一定会分配到A。应用访问3308端口,会A、B顺序分配。
  • 在前一步基础上,关掉A。则:应用访问3307端口,一定会分配到B。应用访问3308端口,会分配到B。
  • 在前一步基础上,打开A。则:应用访问3307端口,一定会分配到B。应用访问3308端口,会A、B顺序分配。
  • 在前一步基础上,关掉B。则:应用访问3307端口,无法访问,即使此时A可访问。应用访问3308端口,会A、B顺序分配。

关于读写分离

Router不对请求拆包,因此Router是无法判断请求语句的读写类型的。
故而,Router的读写分离并非是自身实现的,而是提供多个端口,人为约定哪个端口负责读写,哪个端口负责读,然后由应用自行调用。这也意味着,就算是应用调用了只读端口来写数据,也是可以的,毕竟Router没有任何约束。
然而,如上的配置表示多个server的数据库都是独立的,Router并不会负责多个server数据库之间的同步。也就是说,写入A的数据库后,并不会将数据同步到B。
故而,生产环境中需要MySQL Router配合组复制来使用,MySQL Router负责读写分离,组复制负责主从同步。集成方案为InnoDB Cluster。使用InnoDB Cluster时,MySQL Router的配置可自动生成,不需要手动配置。

启动MySQL Router

打开CMD,cd到 /mysql-router/bin/ 目录下。运行命令:

mysqlrouter --config “D:\Program Files\mysql-router\mysqlrouter.ini”

run

如上,新的一行出现小横线且无法再输入,即运行成功。

查看日志

运行后,文件夹下会生成mysqlrouter.log文件。打开即可看到运行的日志。定期刷新。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值