MySQL Router 是一个对应用程序透明的InnoDB Cluster连接路由服务,提供负载均衡、应用连接故障转移和客户端路 由。
利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用相应的路由策略 来处理连接,使其连接到正确的MySQL数据库服务器
准备工作
本实验以虚拟机Linux-7作为测试,在官网上下载软件包
准备三台虚拟机172.25.254.10,172.25.254.20和172.25.254.30各自安装数据库
轮询路由策略
“routing_strategy = round-robin” 表示路由策略为 “轮询”。
轮询策略是一种在多个资源或目标之间平均分配负载的方法。当有多个可选的路由、服务器或处理单元时,系统按照一定的顺序依次选择每个选项,以实现较为均衡的资源利用。
采用轮询策略时,第一个请求会被发送到第一个服务器,第二个请求被发送到第二个服务器,以此类推。当到达最后一个服务器后,下一个请求又会回到第一个服务器,形成一个循环。
策略的优点:
- 负载均衡:可以较为平均地将工作负载分配到各个资源上,避免某些资源过度负载而其他资源闲置的情况。
- 简单易实现:不需要复杂的算法和状态管理,易于理解和实现。
策略的缺点:
- 不能限制数据库的读写和访问分流
- 无法动态调整:如果某些资源在运行过程中出现故障或性能下降,轮询策略可能无法及时做出调整,导致请求分配不合理。
部署
172.25.254.10
主机从数据库官网上安装软件
[root@nginx ~]# rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm
172.25.254.10主机上模拟mysql不存在将172.25.254.10主机的流量发送到172.25.254.20和172.25.254.30主机上
配置轮询路由策略
[root@nginx ~]# vim /etc/mysqlrouter/mysqlrouter.conf
[routing:ro] #名称路由可读
bind_address = 0.0.0.0 #监控端口为当前主机端口
bind_port = 7001 #通过端口7001访问数据库
destinations=172.25.254.10:3306,172.25.254.20:3306,172.25.254.30:3306#访问主机的IP地址及端口
routing_strategy = round-robin#表示路由策略为轮询策略
启动mysql-router
[root@nginx ~]# systemctl start mysqlrouter.service
查看端口是否开启
[root@nginx ~]# netstat -antlupe |grep 7001
172.25.254.20
创建远程连接访问用户
mysql> create user root@'%' identified by 'lee';
mysql> grant all ON . to root@'%';
查询当前数据库服务器的唯一标识符为20
mysql> SELECT @@server_id;
172.25.254.30
创建远程连接访问用户
mysql> create user root@'%' identified by 'lee';
mysql> grant all ON . to root@'%';
查询当前数据库服务器的唯一标识符为30
mysql> SELECT @@server_id;
测试
172.25.254.10
在172.25.254.10主机上远程连接
[root@nginx ~]# mysql -uroot -plee -h172.25.254.10 -P 7001
查询当前数据库服务器的唯一标识符
mysql> SELECT @@server_id;
唯一标识符显示为30,说明172.25.254.10远程连接到172.25.254.30主机上。
\q退出mysql后再重新登录
再查询当前数据库服务器的唯一标识符
mysql> SELECT @@server_id;
唯一标识符显示为20,说明172.25.254.10远程连接到172.25.254.20主机上。
实现了路由轮询策略,注意mysql轮询策略不能限制数据库的读写和访问分流
优先使用路由策略
“routing_strategy = first-available” 表示路由策略为 “优先使用第一个可用的”。
这种路由策略通常在多个路径或资源中进行选择时使用。当有多个可选的路由或处理方式时,系统会优先选择第一个被确定为可用的选项。
如果采用 “first-available” 策略,网络设备会首先尝试第一个路径,如果该路径可用,则使用该路径进行数据传输;如果第一个路径不可用,则继续检查下一个路径,直到找到一个可用的路径。
“first-available” 路由策略的优点是简单直接,可以快速找到一个可用的选项。然而,它也可能存在一些缺点,比如可能没有充分考虑各个选项的性能、负载等因素,可能导致某些情况下不是最优的选择。
部署
配置轮询路由策略
172.25.254.10
[root@nginx ~]# vim /etc/mysqlrouter/mysqlrouter.conf
[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 172.25.254.20:3306,172.25.254.30:3306
routing_strategy = first-available
启动mysql-router
[root@nginx ~]# systemctl start mysqlrouter.service
测试
172.25.254.10
在172.25.254.10主机上远程连接
[root@nginx ~]# mysql -uroot -plee -h172.25.254.10 -P 7002
查询当前数据库服务器的唯一标识符
mysql> SELECT @@server_id;
唯一标识符显示为20,说明172.25.254.10远程连接到172.25.254.20主机上。
\q退出mysql后再重新登录
再查询当前数据库服务器的唯一标识符
mysql> SELECT @@server_id;
唯一标识符显示依然为20,说明系统会优先选择第一个(172.25.254.20)被确定为可用的选项后,再次退出不会切换到172.25.254.30主机上,当172.25.254.20主机发生故障时会切换至172.25.254.30主机上。