go语言 代理mysql_MySQL Proxy-Go语言中文社区

本文介绍了Go语言实现的MySQL代理——MySQL Proxy,它位于客户端和MySQL服务器之间,可用于监控、分析和改变通信。主要功能包括读写分离和负载平衡。然而,由于其基于lua脚本的读写分离存在不稳定性,并且官方不推荐用于生产环境。文章提供了在Ubuntu 14.04上配置MySQL Proxy的详细步骤,包括安装、配置文件设置以及读写分离脚本的修改。
摘要由CSDN通过智能技术生成

架构图

e16c5163606db332894111e48534e96e.png

WX20171113-131232@2x.png

介绍

处于client端和MySQL server端之间的应用

可以监测、分析或改变它们的通信

使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等

MySQL-Proxy就是这么一个中间层代理,简单的说,MySQL-Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,

并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL-Proxy是完全透明的,应用则只需要连接到MySQL-Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗

余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

缺点

通过lua脚本实现的读写分离,不太稳定,官网不建议用

MySQL Proxy is not GA, and is not recommended for Production use.

还处于 alpha 版本

配置方法

基于 Docker

环境描述:

操作系统:Ubuntu 14.04

master 写服务器:172.17.0.4

slave 读服务器:172.17.0.5

调度服务器MySQL-Proxy:172.17.0.6

1. MySQL 主从复制

2. MySQL-Proxy 配置

安装 mysql-proxy

解压到指定目录

tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz

mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy配置 mysql-proxy

执行命令

cd /usr/local/mysql-proxy

mkdir lua #创建脚本存放目录

mkdir logs #创建日志目录

cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件

cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

配置文件

创建配置文件 /etc/mysql-proxy.cnf

[mysql-proxy]

user = root #运行mysql-proxy用户

admin-username = proxy #主从mysql共有的用户

admin-password = 123456 #用户的密码

proxy-address = 172.17.0.6:4000 #mysql-proxy运行ip和端口,不加端口,默认4040

proxy-read-only-backend-addresses = 172.17.0.5 #指定后端从slave读取数据

proxy-backend-addresses = 172.17.0.4 #指定后端主master写入数据

proxy-lua-script = /usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置

admin-lua-script = /usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本

log-file = /usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置

log-level = info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)

daemon = true #以守护进程方式运行

keepalive = true #mysql-proxy崩溃时,尝试重启

然后设置 mysql-proxy.cnf 权限: chmod 660 /etc/mysql-porxy.cnf配置读写分离脚本

vi /usr/local/mysql-proxy/lua/rw-splitting.lua

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1

max_idle_connections = 1, #默认8,改为1

is_debug = false

}

end

方便测试

启动 mysql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

验证是否启动:

netstat -tupln | grep 4000

关闭命令:

killall -9 mysql-proxy

创建用户

在主服务器创建proxy用户用于mysql-proxy使用,从服务器也会同步这个操作mysql> CREATE USER proxy;

mysql> GRANT ALL ON *.* TO proxy IDENTIFIED BY '123456';

测试读写分离

先暂时停掉主从复制

在 master 节点插入数据,然后通过 mysql-proxy 查询

在 slave 节点插入数据,然后通过 mysql-proxy 查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值