首页 > 技术文章 > mysql router 中间件 配置

liming-php 2020-11-23 14:01 原文

mysql router 解决高可用,读写分离,负载均衡

1 首先配置好主从同步

2 下载mysql-router

wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.18-linux-glibc2.12-x86_64.tar.xz

 

tar -Jxvf mysql-router-8.0.18-linux-glibc2.12-x86_64.tar.xz

3 修改配置文件

 比如解压的目录是

/usr/local/mysql-router/

  

cp /usr/local/mysql-router/share/doc/mysqlrouter/sample_mysqlrouter.conf /etc/mysql-route/mysqlrouter.conf

  

[DEFAULT]
# 日志存放目录
logging_folder = /data/log/mysql-route
# 插件存放目录
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter
# 配置文件存放目录
config_folder = /etc/mysql-route
# 运行目录
runtime_folder = /var/run
 
[logger]
# 日志运行级别
level = debug
 
# 主节点故障转移配置
[routing:basic_failover]
# 写节点地址
bind_address=10.10.81.134
# 写节点端口
bind_port = 7001
# 模式,读写
mode = read-write
# 主节点地址:默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库
destinations = 10.10.50.60:3306,10.10.117.231:3306
 
# 从节点负载均衡配置
[routing:balancing]
# 绑定的IP地址
bind_address=10.10.81.134
# 监听的端口
bind_port = 7002
# 连接超时时间
connect_timeout = 3
# 最大连接数
max_connections = 1024
# 后端服务器地址
destinations = 10.10.117.231:3306
# 模式:读还是写
mode = read-only
 
[keepalive]
interval = 60

 要注意的点:

1)目录首先先建好,

2)bind_address绑定的ip地址要是内网的(ifconfig),配置公网地址会启动失败。

3) mode项不是看上去理解的字面意思,mode=read-write,代表,同时只有一个可用,一开始是首个可用,如果首个挂了之后,请求自动落到第二个服务端,后面及时第一个恢复好了,也不会有请求给第一次个了

   mode=reqd-only时,是请求负载轮询给配置的服务端,当其中一个服务端挂了,请求就不再给这个恢复端,但是当这个服务又好了之后,他会有心跳去检查,查到坏的服务端好了之后,这个服务又会重新加入到轮询

4) 唯一一个缺点是,mysql-router不能判断sql语句是写操作还是读操作,所以,一般是配置两个端口,业务端自己来判断比如写的的端口调用7001,读的端口调7002.

启动:

/usr/local/mysql-router/bin/mysqlrouter -c /etc/mysql-route/mysqlrouter.conf &

 通过日志来检查是否检测成功

tail -f /data/log/mysql-route/mysqlrouter.log 

 如果成功会有keepalive日志,和连接日志

 

 下面介绍怎么测试:

你就可以用本前主机

mysql -h ip地址 -uroot -P7001 -p

ip地址就是mysql-router配置文件设置的bind_address项地址,再输入密码

这个时候你可以看log日志,中间件给你转发是哪个真实mysql服务端,

quit退出,再重新请求,是不是会给你转发到另外一台mysql服务端。

把主服务器mysql stop,再多次连接,是不是不会转发到停止的这台来了,

重放启动停止的服务器,在read_only时,是不是又会使用此台服务器.

mysql-router目前没有停止命令,需要用kill命令杀死进程,再运行

 

 

  

  

推荐阅读