首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在负载均衡器处记录查询响应时间

在负载均衡器处记录查询响应时间
EN

Stack Overflow用户
提问于 2016-05-28 11:36:16
回答 1查看 556关注 0票数 0

我有三个MySQL数据库服务器,设置了主-主循环复制。复制正在工作,所以这是很好的。我正在使用带有rsyslog的HAProxy for loadbalancing,这是我的haproxy.cfg:

代码语言:javascript
复制
global
    log 127.0.0.1 local0 notice
    user haproxy
    group haproxy

defaults
    log global
    retries 2
    timeout connect 3000
    timeout server 5000
    timeout client 5000

listen mysql-cluster
    bind 0.0.0.0:3306
    mode tcp
    option tcplog
    log global
    option mysql-check user haproxy_check
    balance roundrobin
    server database1 10.2.10.102:3306 check
    server database2 10.2.10.103:3306 check
    server database3 10.2.10.104:3306 check

我在/etc/rsyslog.conf中取消了以下行的注释:

代码语言:javascript
复制
# provides UDP syslog reception
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

在/etc/rsyslog.d/haproxy.conf中:

代码语言:javascript
复制
if ($programname == 'haproxy') then -/var/log/haproxy.log

日志是以某种方式工作的:

代码语言:javascript
复制
May 27 18:44:38 localhost haproxy[26517]: Proxy mysql-cluster started.
May 27 18:44:38 localhost haproxy[26517]: Proxy mysql-cluster started.
May 27 18:45:02 localhost haproxy[26535]: Proxy mysql-cluster started.

但它不会显示任何针对MySQL的请求条目,例如,当我在HAproxy VM上运行以下命令时:

代码语言:javascript
复制
mysql -h 127.0.0.1 -u haproxy_root -p$MYSQL_PASSWORD -e "show tables in mydatabase"

我的HAproxy版本是1.5我想知道是否可以在HAproxy中记录MySQL查询的响应时间,以及如何做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2016-05-29 00:37:37

代码语言:javascript
复制
log 127.0.0.1 local0 notice

删除单词notice并重新启动HAProxy。使用notice减少了代理生成的日志记录量。

然而,这并不是说此更改只会导致记录连接,当连接断开时,连接将随其计时器一起记录。

HAProxy不能记录查询响应时间,因为带有mode tcp的HAProxy不是作为可以被恰当地描述为"MySQL代理“的东西来操作的。HAProxy是一个tcp连接代理。它的工作是标识用于每个传入连接(而不是每个查询)的服务器,建立连接,并使其保持打开状态,以便客户端和服务器交换数据。HAProxy不试图“理解”正在交换的数据,因此它不知道正在交换的数据的任何含义。

与MySQL连接不同,HTTP连接是有状态的。创建临时表、启动事务、设置用户定义的变量(例如SET @foo = 'bar';)以及许多其他操作都会使当前的MySQL连接处于特定的“状态”,这使得它不能与任何其他当前的MySQL连接互换,因此HAProxy几乎没有理由知道更高的层,而且有充分的理由不知道,例如使用splice(2)系统调用高效地代理TCP有效负载的能力...仅当有效负载在本地“不感兴趣”时才能使用。

相比之下,MariaDB Maxscale是MySQL的有效负载感知的第7层代理。它可以做许多有趣的事情,比如透明的读/写拆分,以及将每个连接上执行的所有查询记录到一个文件中。

(从网站上很难看出它是可以免费下载的,但它确实是。我与MariaDB没有关联。)

这并不是说Maxscale“优于”HAProxy,后者是一个成熟的产品,在可靠性和安全性方面有着良好的历史……只是它的目的和功能不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37494940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档