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命令杀死进程,再运行