博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker-Mysql-proxy Mysql Proxy实现读写分离
阅读量:5052 次
发布时间:2019-06-12

本文共 2799 字,大约阅读时间需要 9 分钟。

 

Docker-Mysql-proxy Mysql实现读写分离与负载

原理

  • MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能。
  • MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现和。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为,在的连接池配置中配置到多个proxy的连接参数即可。

负载解析

  • mysql-proxy负载均衡是体现在“连接”的均衡上。mysql_proxy会把连接mysql服务器的TCP/IP连接缓存进连接池以提高性能在缓存池里,缓存的连接大致是平均分配在每台mysql服务器上,但具体的每一个连接,始终连接某台服务器。所以在出现了mysql的sql查询时,却总往某一台mysql server来发送是这么回事的。

资源

  • Mysql-proxy官网下载地址:

准备

  1. 2个正在运行的mysql。
  2. 一个centos,部署mysql-proxy。
  3. ngvicat,用于测试。

配置

  1. 通过docker启动2个运行的mysql环境
docker run -tid -p 3307:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6docker run -tid -p 3308:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

   2. 配置mysql-proxy

wget https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gztar zxvf mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gzmv mysql-proxy-0.8.5-linux-debian6.0-x86-64bit mysql-proxycd /usr/local/mysql-proxymkdir lua #创建脚本存放目录mkdir logs #创建日志目录touch logs/mysql-proxy.log chmod 777 logs/mysql-proxy.log cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件 cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本 vi /etc/mysql-proxy.cnf   #创建配置文件

  3. 配置文件

[mysql-proxy]user=root #运行mysql-proxy用户log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置proxy-address=172.17.0.5:4040 #mysql-proxy运行ip和端口,不加端口,默认4040proxy-backend-addresses=172.17.0.2:3306 #指定后端主master写入数据 proxy-read-only-backend-addresses=172.17.0.3:3306 #指定后端从slave读取数据 proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置 admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本 daemon=true #以守护进程方式运行 keepalive=true #mysql-proxy崩溃时,尝试重启
   4. 配置完成,保存退出!
chmod 660 /etc/mysql-porxy.cnf
 

修改读写分离配置文件

vi /usr/local/mysql-proxy/lua/rw-splitting.lua找到下面的代码,覆盖对应部分即可,其余代码均保留不变。 if not proxy.global.config.rwsplit thenproxy.global.config.rwsplit = {min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1max_idle_connections = 1, #默认8,改为1is_debug = false } end
 

注意

  • 配置文件中的注视不能保留,否则启动的的时候可能报错。
  • 使用下列第一种启用方式则不需要配置,但通常情况下,我们则会使用配置文件启动。 

启动方式2种

  1. 通过命令行启动
/usr/local/mysql-proxy/bin/mysql-proxy --proxy-backend-addresses=172.17.0.5:3306 --proxy-backend-addresses=172.17.0.3:3306 --proxy-backend-addresses=172.17.0.2:3306
  1. 通过配置文件启动
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf & 加&是置于后台运行。

测试

 
 
 

出现错误分析

  1. mysql-proxy代理的服务器中(逻辑数据库)不能连接到其他两台服务器(物理数据库)。可能原因:3者未处于同一网桥中。解决方法:要么不建立网络network,要么创建于同一个network中。
 
  1. 通过配置文件启动报如下错误。解决方法:赋予配置文件600权限即可。chmod 600 /etc/mysql-proxy.cnf。 
  1. 服务未正常启动,查看对应的日志文件。可能错误,配置中存在注释,导致出现多个日志文件,存在错误。
 
  1. 检查配置文件中的lua文件是否存在对应的目录中,如果没有则复制进去。
 
 

转载于:https://www.cnblogs.com/will-xz/p/9878434.html

你可能感兴趣的文章
HandlerThread&Looper&MessageQueue
查看>>
ROM的一种写法
查看>>
VIM Taglist + ctags
查看>>
supervisord
查看>>
ubuntu10.04安装x264库
查看>>
●数组及应用举例
查看>>
__int128的实现
查看>>
R 读取clipboard内容 (MAC)
查看>>
Problem - 1118B - Codeforces(Tanya and Candies)
查看>>
jdk1.8 api 下载
查看>>
svn 图标不显示
查看>>
getElement的几中属性介绍
查看>>
iOS 使用Quartz 2D画虚线 【转】
查看>>
平面最接近点对
查看>>
HTML列表,表格与媒体元素
查看>>
PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
查看>>
ionic android升级检查
查看>>
sld一张图
查看>>
树莓派连接wifi
查看>>
Unable To View Status Diagram [ID 746806.1]
查看>>