我有下面列出的三个 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/