一 简单介绍
MGR只支持数据库集群本身的高可用,但在服务器崩溃时,不能将连接到该服务的客户端重定向或故障转移到其他服务器。因此,这里结合mysql router代理中间件来实现真正的高可用(主节点故障时程序能够自动连接到新的主节点),同时实现读写分离及负载均衡。
如果从MySql Router到MySQL服务器的连接中断,应用程序将遇到连接失败。应该编写应用程序来测试连接错误,如果遇到错误,请重试连接。
架构图如下:
官方文档建议:
1. 在与应用程序相同的主机上安装并运行MySql Router
原因如下:
① 允许本地UNIX域套接字连接到应用程序,而不是TCP/IP。
② 减少网络延迟。
2. 使用配置文件中的Bind_port=127.0.0.1:<port>将router绑定到本地主机。或者,在Linux上,禁用TCP连接(请参见--conf skip TCP)并将其限制为仅使用Unix套接字连接(请参见--conf use sockets)。
3. 强烈建议将MySQL路由器8.0与MySQL服务器8.0和5.7一起使用。
二 实验环境
三 实验步骤
3.1 安装部署MGR
可以参考https://blog.csdn.net/yabingshi_tech/article/details/103278288
3.2 安装部署mysql router
3.2.1 安装
官网mysql router 8.0(linux源码tar包安装版)下载地址:
https://dev.mysql.com/downloads/file/?id=490385
xz -d mysql-router-8.0.18-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-router-8.0.18-linux-glibc2.12-x86_64.tar
mv mysql-router-8.0.18-linux-glibc2.12-x86_64 /usr/local/mysql-router-8.0.18
vi /etc/profile
在PATH=添加mysqlrouter所在路径/usr/local/mysql-router-8.0.18/bin/,如:
PATH=$PATH:$JAVA_BIN:$ES_HOME:/usr/local/mysql-router-8.0.18/bin/
验证是否安装成功:
mysqlrouter --help
3.2.2 配置
mkdir /usr/local/mysql-router-8.0.18/log
mkdir /usr/local/mysql-router-8.0.18/data
chown -R mysql:mysql /usr/local/mysql-router-8.0.18
#创建配置文件
#可参考/usr/local/mysql-router-8.0.18/share/doc/mysqlrouter/sample_mysqlrouter.conf
vi /etc/mysqlrouter.conf
[DEFAULT]
logging_folder = /usr/local/mysql-router-8.0.18/log
plugin_folder = /usr/local/mysql-router-8.0.18/lib/mysqlrouter
data_folder=/usr/local/mysql-router-8.0.18/data
[logger]
level = INFO
[routing:primary]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 10.192.203.108:3306,10.192.203.107:3306,10.192.203.109:3306
routing_strategy = first-available
[routing:secondary]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 10.192.203.107:3306 ,10.192.203.109:3306
routing_strategy = round-robin
#含义介绍
round-robin:为了实现负载平衡,每个新连接都以循环方式连接到下一个可用的服务器。
first-available:
新连接将从目标列表路由到第一个可用服务器。如果失败,则使用下一个可用服务器。此循环一直持续到所有服务器都不可用为止。所以对于单主模式的MGR来说,first-available模式下,destination里IP的顺序很重要。
chown mysql:mysql /etc/mysqlrouter.conf
3.2.3 启动
mysqlrouter --config=/etc/mysqlrouter.conf &
3.3 读写分离及负载均衡验证
7002端口的确只轮询访问节点1和节点3:
7001端口的确只路由到写节点2:
只能在主节点上写入数据:
3.4 高可用验证
将节点2数据库关闭:
组复制集群节点从3个节点减少到了2个:
10.192.203.107变成了主节点:
现在从7001端口访问,默认访问的是10.192.203.107:
--本篇文章参考了官方文档https://dev.mysql.com/doc/mysql-router/8.0/en/
及https://blog.csdn.net/zhangwenjiang001/article/details/82109494