MySQL-Proxy 不进行负载平衡

MySQL-Proxy 不进行负载平衡

这是我当前的测试设置:

  • SQL0:192.168.22.64(主+从)
  • SQL1:192.168.22.65 (主+从)
  • 负载均衡器0:192.168.22.66
  • 负载均衡器1:192.168.22.67
    • 虚拟 IP:192.168.22.80

负载均衡器使用心跳相互连接,并且都运行 MySQL-Proxy。

一切运行正常;其中一个 SQL 服务器死机,其他一切正常运行。其中一个 LB 死机,其他一切正常运行。

但是,当检查正在使用哪个 SQL 服务器时,我注意到它总是相同的,除非那个服务器不可用。

例如,几个小时后,SQL1 有 600,000 个查询,而 SQL0 有 20,000 个查询。

有没有办法使其更加平衡,使其接近~50% SQL0 和~50% SQL1?

这是我启动代理的基本行:

/usr/bin/mysql-proxy --proxy-skip-profiling -b 0.sql.domain.com:3306 -b 1.sql.domain.com:3306 --keepalive -P :3306

为了证明这一点,从昨天下午开始,这里每 10 分钟进行一次试运行。

在此处输入图片描述

答案1

MySQL 代理是基于连接的。您在问题中提到了查询,以此为例,如果您有一个打开一个连接并通过它执行 100,000 个查询的框,它们都将转到同一个后端服务器。您可以通过查看源代码来验证这一点:

mysql-proxy-0.8.2/src/network-conn-pool.c:
182         GQueue *conns = network_connection_pool_get_conns(pool, username, NULL);
183 
184         /**
185          * if we know this use, return a authed connection
186          */
187         if (conns) {
188                 entry = g_queue_pop_head(conns);

它只是从池中获取下一个连接。如果您查看正在使用的 ODBC 的 TCP 连接数,它们应该是 50/50。

您可以考虑增加应用程序 ODBC 配置中的数据库连接数,希望以此方式分散查询负载。

相关内容