MySQL Router 是InnoDB Cluster的一部分,是轻量级的中间件,可在应用程序和后端MySQL服务器之间提供透明的路由。它用于各种用例,例如通过将数据库流量路由到适当的后端MySQL服务器来提供高可用性和可伸缩性。
Windows安装
方法1:
https://dev.mysql.com/downloads/windows/installer/下载MySQL Installer,安装时选择MySQL Router;通常安装在C:\Program Files\MySQL\MySQL
方法2:
https://dev.mysql.com/downloads/router/下载ZIP存档,安装必备组件(Visual Studio 2015)后,解压缩ZIP存档按bin/mysqlrouter.exe的方式执行。
linux安装
如果mysql不是使用yum安装的,那么需要先获取mysql的rpm
yum install mysql-router
启动
systemctl start mysqlrouter.service
MySQL Router的工作流程
MySQL客户端或连接器连接到MySQL路由器到例如端口6446。
路由器检查可用的MySQL服务器。
路由器打开与合适的MySQL服务器的连接。
路由器在应用程序和MySQL服务器之间来回转发数据包
如果连接的MySQL服务器出现故障,路由器将断开应用程序的连接。然后,应用程序可以重试连接到路由器,然后路由器选择其他可用的MySQL服务器。
使用情境
作为开发人员,我希望我的应用程序连接到服务,以便默认情况下它与组复制群集的当前主数据库建立连接。
作为管理员,我想设置多个服务,以便MySQL Router在每个高可用副本集的不同端口上侦听。
作为管理员,我希望能够在端口3306上运行连接路由服务,以便它对用户或应用程序更加透明。
作为管理员,我想为每个连接路由服务配置一个模式,以便我可以指定返回主服务器还是辅助服务器。
使用建议
在与应用程序相同的主机上安装并运行MySQL Router
在配置文件中使用bind_port = 127.0.0.1将路由器绑定到本地主机。或者在Linux上,禁用TCP连接(--conf-skip-tcp),并将其限制为仅使用Unix套接字连接(--conf-use-sockets)。
为了获得最佳性能,MySQL路由器通常与使用它的应用程序安装在同一主机上。可能的原因包括:
- 允许本地UNIX域可以连接到应用程序,而不是TCP/IP。Unix域可以与连接到MySQL Router的应用程序一起使用,但不能用于连接到MySQL Server的MySQL Router。
- 减少网络延迟
- 为了允许MySQL路由器连接到MySQL而不需要路由器主机的额外帐户,为了专门为应用程序主机创建的MySQL帐户(例如myapp@198.51.100.45),而不是像myapp @%这样的值。
- 通常,应用程序服务器最容易扩展
- 您可以在网络上运行多个MySQL Router实例,而不必将MySQL Router隔离到就是因为MySQL路由器对任何特定的服务器或主机都没有亲和力。
使用
简单的基于连接的路由设置
[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的服务器配置了first-available策略。第一个可用策略使用了目的地列表中的第一个可用服务器。分配给每个实例的MySQL实例的数量destinations取决于您,因为这只是一个示例。路由器不检查数据包,也不基于分配的策略或模式限制连接,因此由应用程序决定在哪里发送读和写请求,在我们的示例中是端口7001或7002。
启动
shell> ./bin/mysqlrouter -config=/etc/mysqlrouter-config.con
测试1
首先将连接到foo.example.org,
然后连接到bar.example.org,
然后是baz.example.org,
第四个调用返回到foo.example.org
shell> ./bin/mysql --user=root --port 7001 --protocol=TCP
测试2
首先连接到foo.example.org,
然后其他请求将继续连接到foo.example.org,
直到出现故障为止,将使用bar.example.org
shell> ./bin/mysql --user=root --port 7002 --protocol=TCP
优点
并发客户端连接的最大数量从大约500个增加到超过5000个,此限制现在取决于操作系统。为此,将基于select()的fd事件调用替换为poll()(或Windows上的WSAPoll())。
命令
查看系统上的默认配置文件位置
mysqlrouter --help
重置日志
方法1:重命名日志文件,然后通知Router,以便它创建并切换到新的日志文件
sudo mv /var/log/mysqlrouter/mysqlrouter.log /var/log/mysqlrouter/mysqlrouter.log.old
kill -HUP $(pidof mysqlrouter)
方法2:重置后,将通知路由器重新打开日志文件,这是通过将HUP发送到路由器进程来完成的
logrotate配置文件
/var/log/mysqlrouter/mysqlrouter.log {
rotate 9
size 10M
create 0755 mysqlrouter mysqlrouter
postrotate
kill -HUP $(pidof mysqlrouter)
endscript
}
该示例将日志循环为mysqlrouter.log,mysqlrouter.log.1,...,mysqlrouter.log.9。仅当大小大于10MB时,才会根据当前mysqlrouter.log文件的大小触发轮换
[sudo] logrotate /etc/mysqlrouter/logrotate.conf