首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Ubuntu 10.04 搭建 MySQL Proxy 读写分离全流程实录

     編輯:MySQL 資料庫相關知識

MySQL Proxy + Lua 实现读写分离:从原理到生产部署

MySQL Proxy 位于应用与 MySQL 之间,通过 Lua 脚本(rw-splitting.lua)实现 SELECT 路由至 Slave、写操作路由至 Master。本文记录 Ubuntu 10.04 完整搭建过程。

架构拓扑

  • Proxy 入口:192.168.1.147:4040
  • Master(写):192.168.1.126:3306
  • Slave(读):192.168.1.145:3306

应用仅连接 Proxy,对后端拓扑透明。

部署步骤

  1. 安装 Lua
    apt-get install lua5.1
  2. 安装 MySQL Proxy
    apt-get install mysql-proxy(版本 0.8.0)
  3. 调整 rw-splitting.lua 连接池阈值
    vim /usr/share/mysql-proxy/rw-splitting.lua
    将 min_idle_connections 与 max_idle_connections 改为 1,否则需 4 连接才触发分离
  4. 创建日志目录
    mkdir /var/log/mysql-proxy && touch /var/log/mysql-proxy/mysql-proxy.log
  5. 启动 Proxy
    sudo mysql-proxy \ --proxy-read-only-backend-addresses=192.168.1.145:3306 \ --proxy-backend-addresses=192.168.1.126:3306 \ --proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua \ >/var/log/mysql-proxy/mysql-proxy.log &
  6. 验证端口
    netstat -ant | grep 4040 应见 LISTEN
  7. 功能测试
    连接 Proxy:mysql -u user -p -P4040 -h 192.168.1.147
    查询走 Slave,写入走 Master,验证数据差异

配置文件化启动(生产推荐)

# /etc/mysql-proxy.cnf (权限 660)
[mysql-proxy]
admin-username=admin
admin-password=pass
admin-lua-script=/usr/share/mysql-proxy/admin-sql.lua
proxy-backend-addresses=192.168.1.126:3306
proxy-read-only-backend-addresses=192.168.1.145:3306
proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua
log-file=/var/tmp/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
max-open-files=1024

启动:mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

关键坑点与规避

  • 不稳定:高并发易 Crash,必须开 keepalive,最稳方案是每应用节点部署一 Proxy(Sidecar 模式)
  • Slave 故障:Proxy 不自动剔除挂掉的 Slave,需外部监控切换或升级 Proxy 版本
  • 旧密码:不支持 old_password(16 位),需 SET PASSWORD = PASSWORD('new')
  • 替代品:Amoeba for MySQL、ProxySQL、MaxScale 稳定性远超 MySQL Proxy,生产建议迁移

高可用扩展

  • Proxy 单点:Keepalived 双机热备
  • Master 单点:DRBD + Heartbeat / MHA / Orchestrator
  • Slave 单点:多 Slave + Proxy 自动屏蔽故障节点
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved