我有三个MySQL数据库服务器,设置了主-主循环复制。复制正在工作,所以这是很好的。我正在使用带有rsyslog的HAProxy for loadbalancing,这是我的haproxy.cfg:
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中取消了以下行的注释:
# 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中:
if ($programname == 'haproxy') then -/var/log/haproxy.log日志是以某种方式工作的:
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上运行以下命令时:
mysql -h 127.0.0.1 -u haproxy_root -p$MYSQL_PASSWORD -e "show tables in mydatabase"我的HAproxy版本是1.5我想知道是否可以在HAproxy中记录MySQL查询的响应时间,以及如何做到这一点?
发布于 2016-05-29 00:37:37
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,后者是一个成熟的产品,在可靠性和安全性方面有着良好的历史……只是它的目的和功能不同。
https://stackoverflow.com/questions/37494940
复制相似问题