mysql-proxy 0.8.3 负载均衡无法工作

标签 mysql load-balancing mysql-proxy

我有下面列出的三个 Mysql 节点:

Master Address: 192.168.1.77:3306
Slave1 Address: 192.168.1.76:3306
Slave2 Address: 192.168.1.69:3306

在192.168.1.67上安装0.8.3版本的mysql-proxy后,并在下面创建我的配置:

[mysql-proxy]
admin-username=proxy
admin-password=proxy
admin-lua-script=/local/software/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-read-only-backend-addresses = 192.168.1.76:3306,192.168.1.69:3306
proxy-backend-addresses=192.168.1.77:3306
proxy-lua-script=/local/software/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/local/software/mysql-proxy/log/mysql-proxy.log
plugin-dir=/local/software/mysql-proxy/lib/mysql-proxy/plugins
plugins=proxy,admin,debug,replicant
log-level=debug
keepalive=true

编辑后的文件:rw-splitting.lua

min_idle_connections = 1,
max_idle_connections = 2,

然后像这样启动mysql-proxy:

./bin/mysql-proxy --defaults-file=mysql-proxy.cnf

登录代理:

mysql -uproxy -ppassword -P4040 -h192.168.1.67

当我一次又一次执行 select sql 打开不同的 mysql-proxy 4040 窗口时,但从日志中我发现所有 select sql 查询都发送到 76 的同一服务器,但是只有当我关闭 76 时,然后它会将查询发送到从站 69。我不知道为什么负载平衡不起作用,有什么地方我犯了错误吗?预先感谢您。

最佳答案

rw-splitting.lua 似乎将一些实现留给读者作为练习。有一条评论“选择一个随机后端”,但我没有看到它的实现,也没有看到循环技术。当没有空闲连接时,代码似乎从顶部移动到数组中的下一个来填充后端服务器。

如果主服务器上总是有空闲连接,那么当前的实现更喜欢去那里。之后,它使用只读后端服务器列表中的第一个空闲连接。在本例中是 76,直到您将其关闭时,它会移动到 69。我不明白为什么 77,读/写后端不是首选。这可能与可用的空闲连接数有关。

寻求最低的 proxy.global.backends.connected_clients(后端当前事件的连接数)似乎是确定所使用的后端优先级的好方法。

您还应该查看平衡模块 lib/mysql-proxy/lua/proxy/balance.lua

关于mysql-proxy 0.8.3 负载均衡无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766807/

相关文章:

php - 在数据库中,我得到类似 :name, :email 等的值,尽管它没有显示任何错误,但当我开始学习 php f 时,我不知道该怎么做

mysql - 这种高级 SQL 语法是如何构造的?

c- Loadbalancer.拼接时修改http header?

linux - 我怎样才能将我所有的 web 节点从一个 master 上同步?

load-balancing - MySQL 数据库服务器中负载平衡的替代解决方案是什么

mysql - 使用 Rails 3 进行 MySQL 复制的最佳实现?

MySQL计算特定值的列

nginx - 在 Docker Swarm 1.12 访问服务时记录客户端的 "real"IP 地址

mysql - Google API 对 Google Cloud 上的 MySQL 代理的身份验证范围不足

mysql - 使用 mysqldump 格式化每行插入一个?