一 简单介绍

MGR只支持数据库集群本身的高可用,但在服务器崩溃时,不能将连接到该服务的客户端重定向或故障转移到其他服务器。因此,这里结合mysql router代理中间件来实现真正的高可用(主节点故障时程序能够自动连接到新的主节点),同时实现读写分离及负载均衡。

如果从MySql Router到MySQL服务器的连接中断,应用程序将遇到连接失败。应该编写应用程序来测试连接错误,如果遇到错误,请重试连接。

架构图如下:

MGR mysql router 安装 mysql mgr搭建_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一起使用。

二 实验环境

MGR mysql router 安装 mysql mgr搭建_mysql_02

三 实验步骤

3.1 安装部署MGR

可以参考

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:

MGR mysql router 安装 mysql mgr搭建_服务器_03

7001端口的确只路由到写节点2:

MGR mysql router 安装 mysql mgr搭建_mysql_04

只能在主节点上写入数据:

MGR mysql router 安装 mysql mgr搭建_应用程序_05

 

3.4 高可用验证

将节点2数据库关闭:

MGR mysql router 安装 mysql mgr搭建_服务器_06

组复制集群节点从3个节点减少到了2个:

MGR mysql router 安装 mysql mgr搭建_服务器_07

10.192.203.107变成了主节点:

MGR mysql router 安装 mysql mgr搭建_服务器_08

现在从7001端口访问,默认访问的是10.192.203.107:

MGR mysql router 安装 mysql mgr搭建_mysql_09

 

--本篇文章参考了官方文档https://dev.mysql.com/doc/mysql-router/8.0/en/