MySQL 中间件 MySQL-Router

目录

[1 MySQL-Router 的介绍](#1 MySQL-Router 的介绍)

[2 MySQL-Router 负载均衡](#2 MySQL-Router 负载均衡)

[2.1 设计目的:](#2.1 设计目的:)

[2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别](#2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别)

[2.3 MySQL-Router 的优势](#2.3 MySQL-Router 的优势)

[3 MySQL-Router 的获取](#3 MySQL-Router 的获取)

[3 MySQL-Router 的使用](#3 MySQL-Router 的使用)

[3.1 实验环境](#3.1 实验环境)

[3.2 MySQL-Router 部署](#3.2 MySQL-Router 部署)

[3.3 MySQL-Router 配置](#3.3 MySQL-Router 配置)

[3.4 测试实现的效果](#3.4 测试实现的效果)


1 MySQL-Router 的介绍

MySQL Router 是 MySQL 官方提供的一款中间件软件,它主要用于实现数据库的路由和负载均衡功能。MySQL Router 可以帮助开发者更轻松地管理复杂的数据库架构,尤其是在需要处理多个数据库实例或者需要实现读写分离等场景下非常有用。

2 MySQL-Router 负载均衡

2.1 设计目的:

  • MySQL Router 是专门为 MySQL 数据库设计的官方工具,主要用来处理 MySQL 数据库的负载均衡、读写分离等任务。
  • 它内置了对 MySQL 协议的理解和支持,因此在处理 MySQL 相关任务时更加高效和可靠。

2.2 HAProxyNginx 和 MySQL-Router 之间的区别

  • MySQL Router 更适合用于 MySQL 数据库相关的任务,提供了对 MySQL 协议的深入支持,简化了读写分离和故障转移的配置。
  • HAProxyNginx 则更适合于更广泛的负载均衡场景,不仅仅局限于数据库层面,可以用于多种类型的 TCP/HTTP 服务。

2.3 MySQL-Router 的优势

  • 专门针对 MySQL: MySQL Router 专为 MySQL 设计,能够更好地理解和处理 MySQL 协议,提供更好的兼容性和优化。
  • 读写分离: 支持自动的读写分离,可以根据查询类型将请求路由到正确的数据库实例。
  • 高可用性: 支持自动故障检测和恢复,能够快速地将流量重新路由到健康的实例。
  • 多协议支持: 除了 MySQL 协议外,还支持 RESTful API 和 WebSocket 协议,适合多种应用场景。

3 MySQL-Router 的获取

MySQL-Routerhttps://downloads.mysql.com/archives/router/

3 MySQL-Router 的使用

3.1 实验环境

虚拟机 MySQL-Router MySQL-01 MySQL-02 MySQL-03
IP地址 192.168.239.50 192.168.239.210 192.168.239.220 192.168.239.230
端口号 7001 | 7002 3306 3306 3306

3.2 MySQL-Router 部署

开一台没有使用 过的虚拟机当代理服务器

bash 复制代码
[root@docker-rhel src]# ls
mysql-router-community-8.4.0-1.el7.x86_64.rpm
[root@docker-rhel src]# yum install mysql-router-community-8.4.0-1.el7.x86_64.rpm -y

3.3 MySQL-Router 配置

bash 复制代码
[root@docker-rhel src]# vim /etc/mysqlrouter/mysqlrouter.conf 

[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 192.168.239.210:3306,192.168.239.220:3306,192.168.239.230:3306
routing_strategy = round-robin #轮循

[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 192.168.239.230:3306,192.168.239.220:3306,192.168.239.210:3306
routing_strategy = first-available  # 第一个链接的就会一直链接

# routing:ro - 这里要说明他只是给配置人员看的只读,他不能限制实现只读或者读写功能
# bind_address = 0.0.0.0: 绑定到所有可用网络接口。
# bind_port = 7001: 监听端口为 7001。
# destinations = 192.168.239.210:3306,192.168.239.220:3306,192.168.239.230:3306: 指定了三个后端 MySQL 实例的地址和端口。
# routing_strategy = round-robin: 表明使用轮询策略来均衡读取请求。

重启MySQL-Router 服务

bash 复制代码
[root@docker-rhel src]# systemctl restart mysqlrouter.service 

查看端口是否开放

bash 复制代码
[root@docker-rhel src]# netstat -tunlpe | grep 7001
tcp        0      0 0.0.0.0:7001            0.0.0.0:*               LISTEN      987        61464      3776/mysqlrouter    
[root@docker-rhel src]# netstat -tunlpe | grep 7002
tcp        0      0 0.0.0.0:7002            0.0.0.0:*               LISTEN      987        58689      3776/mysqlrouter  

3.4 测试实现的效果

bash 复制代码
[root@mysql-3 ~]# mysql -ushuyan -pOpenlab123! -h 192.168.239.50 -P 7001 -e "SELECT @@HOSTNAME;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@HOSTNAME |
+------------+
| mysql-01   |
+------------+
[root@mysql-3 ~]# mysql -ushuyan -pOpenlab123! -h 192.168.239.50 -P 7001 -e "SELECT @@HOSTNAME;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@HOSTNAME |
+------------+
| mysql-02   |
+------------+
[root@mysql-3 ~]# mysql -ushuyan -pOpenlab123! -h 192.168.239.50 -P 7001 -e "SELECT @@HOSTNAME;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@HOSTNAME |
+------------+
| mysql-3    |
+------------+
[root@mysql-3 ~]# mysql -ushuyan -pOpenlab123! -h 192.168.239.50 -P 7001 -e "SELECT @@HOSTNAME;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@HOSTNAME |
+------------+
| mysql-01   |
+------------+
[root@mysql-3 ~]# mysql -ushuyan -pOpenlab123! -h 192.168.239.50 -P 7002 -e "SELECT @@HOSTNAME;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@HOSTNAME |
+------------+
| mysql-3    |
+------------+
[root@mysql-3 ~]# mysql -ushuyan -pOpenlab123! -h 192.168.239.50 -P 7002 -e "SELECT @@HOSTNAME;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@HOSTNAME |
+------------+
| mysql-3    |
+------------+
相关推荐
Reuuse3 分钟前
【HCIA-Datacom】华为VRP系统
服务器·网络·华为
轩轶子44 分钟前
【C-项目】网盘(一期,线程池版)
服务器·c语言
huaqianzkh1 小时前
了解MySQL 高可用架构:主从备份
数据库·mysql·架构
GDAL1 小时前
全面讲解GNU:从起源到应用
服务器·云计算·gnu
GDAL1 小时前
GNU力量注入Windows:打造高效跨平台开发新纪元
服务器·windows·gnu
hgdlip1 小时前
电脑和另一台电脑IP地址相同怎么办
服务器·电脑·ip地址
Dola_Pan2 小时前
Linux文件IO(一)-open使用详解
java·linux·dubbo
Spring-wind2 小时前
【linux】pwd命令
linux
向往风的男子2 小时前
【mysql】mysql之读写分离以及分库分表
数据库·mysql
geekrabbit2 小时前
机器学习和深度学习的区别
运维·人工智能·深度学习·机器学习·浪浪云