haproxy heartbeat后台基于http-post



我想创建一个配置,以便haproxy和后端之间的心跳基于HTTPPOST。

有人知道这件事吗?我尝试了以下配置,但它只向后端服务器发送了http HEAD(我想要http POST(:

backend mlp
    mode http
    balance     roundrobin
    server  mlp1 192.168.12.165:9210 check
    server  mlp2 192.168.12.166:9210 check

谢谢你的帮助。

@Mohsin,非常感谢。我确实工作。但我想指定请求消息,似乎我的配置不起作用。如果你也能帮忙的话,我很感激。

[root@LB_vAPP_1tmp]#more/var/www/index.txt

POST / HTTP/1.1rnHost: 176.16.0.8:2234rnContent-Length: 653rnrn<?xml version="1.0" encoding="gb2312"?>rn<svc_init ver="3.2.0">rn<hdr ver="3.2.0">rn<client>rn<id>915948</id>rn<pwd>915948</pwd>rn<serviceid></serviceid>rn</client>rn<requestor><id>13969041845</id></requestor>rn</hdr>rn<slir ver="3.2.0" res_type="SYNC">rn<msids><msid enc="ASC" type="MSISDN">00000000000</msid></msids>rn<eqop>rn<resp_req type="LOW_DELAY"/>rn<hor_acc>200</hor_acc>rn</eqop>rn<geo_info>rn<CoordinateReferenceSystem>rn<Identifier
>rn<code>4326</code>rn<codeSpace>EPSG</codeSpace>rn<edition>6.1</edition>rn</Identifierrn</CoordinateReferenceSystem>rn</geo_info>rn<loc_type type="CURRENT_OR_LAST"/>rn<prio type="HIGH"/>rn</slir>rn</svc_init>rnrnrnrn

我的haproxy.conf文件如下所示:

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local7
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    ulimit-n 65536
    daemon
    nbproc 1
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
defaults
    mode                    tcp
    retries                 3
    log                     global
    option                  redispatch
#    option                 abortonclose
    retries                 3
    timeout queue           28s
    timeout connect         28s
    timeout client          28s
    timeout server          28s
    timeout check           1s
    maxconn                 32000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  mlp
    mode                tcp
    option                      persist
#    bind                       10.68.97.42:9211 ssl crt /etc/ssl/server.pem
   #bind                        10.68.97.42:9211
    bind                        10.68.97.42:9210
    default_backend             mlp
frontend  supl
    mode                        tcp
    option                      persist
    bind                        10.68.97.42:7275
    default_backend             supl
#-------------
# option1 http check
#------------
backend mlp
    mode http
    balance     roundrobin
 option                      httpchk POST / HTTP/1.1rnHost: 176.16.0.8:2234rnContent-Length: 653rnrn{<?xml version="1.0" encoding="gb2312"?>rn<svc_init ver="3.2.0">rn<hdr ver="3.2.0">rn<client>rn<id>915948</id>rn<pwd>915948</pwd>rn<serviceid></serviceid>rn</client>rn<requestor><id>13969041845</id></requestor>rn</hdr>rn<slir ver="3.2.0" res_type="SYNC">rn<msids><msid enc="ASC" type="MSISDN">00000000000</msid></msids>rn<eqop>rn<resp_req type="LOW_DELAY"/>rn<hor_acc>200</hor_acc>rn</eqop>rn<geo_info>rn<CoordinateReferenceSystem>rn<Identifier>rn<code>4326</code>rn<codeSpace>EPSG</codeSpace>rn<edition>6.1</edition>rn</Identifier>rn</CoordinateReferenceSystem>rn</geo_info>rn<loc_type type="CURRENT_OR_LAST"/>rn<prio type="HIGH"/>rn</slir>rn</svc_init>rnrnrnrn}
    http-check                  expect  rstring <result resid="4">UNKNOWN SUBSCRIBER</result>
    server  mlp1 192.168.12.165:9210 check
    server  mlp2 192.168.12.166:9210 check
    #server  mlp2 192.168.12.166:9210 check 
backend supl
    mode tcp
        source  0.0.0.0 usesrc clientip
    balance     roundrobin
    server  supl1 192.168.12.165:7275 check
    server  supl2 192.168.12.166:7275 check
   #server  supl2 192.168.12.166:7275 check

@Mohsin,谢谢你的回答,它给了我解决这个问题的关键线索。

然而,我的消息是咆哮的,现在它可以按照我的意愿工作(发送指定的请求并检查指定的响应(。我发布它,希望它也能帮助其他人。一点是,内容的长度非常重要。

后端mlp模式http平衡循环选项httpchk POST/HTTP/1.1\r\n用户代理:HAProxy \r\n主机:176.16.0.8:2234\r\n内容类型:\text/xml\r\n内容长度:516\r\n\r\n9159489159481396904184500000000003200

http-check                  expect  rstring <result resid="4">UNKNOWN SUBSCRIBER</result>
server  mlp1 192.168.12.165:9210 check
server  mlp2 192.168.12.166:9210 check

经过一点实验,我能够让它发挥作用。

这是我设置的

HAProxy -> NGINX -> Backend

我用tcpdump探查NGINX阶段的请求,看看实际发生了什么。

为了更改健康检查请求,我们必须遵循文档中描述的黑客攻击来更改HTTP版本并发送标头:

通过使用rn和反斜杠空格将HTTP标头连接起来,可以在字符串之后发送HTTP标头。这对于在探测虚拟主机时发送主机标头非常有用

这是我想发送的原始http检查:

POST ${ENDPOINT} HTTP/1.0
Content-Type: application/json
{"body": "json"}

这里的大问题是HAProxy自己添加了一个新的头:Connection: close,所以这就是NGINX得到的:

POST ${ENDPOINT} HTTP/1.0
Content-Type: application/json
{"body": "json"}
Connection: close

这导致,至少在我的情况下,由于格式错误的请求而导致错误400s。

修复方法是添加一个Content-Length标头:

POST ${ENDPOINT} HTTP/1.0
Content-Type: application/json
Content-Length: 16
{"body": "json"}
Connection: close

由于Content-Length应优先于实际长度,这将强制忽略最后一个标头。这就是NGINX传递给后端的内容:

POST ${ENDPOINT} HTTP/1.0
Host: ~^(.+)$
X-Real-IP: ${IP}
X-Forwarded-For: ${IP}
Connection: close
Content-Length: 16
Content-Type: application/json
{"body": "json"}

这是我的最后一张支票:

option httpchk POST ${ENDPOINT} HTTP/1.0rnContent-Type: application/jsonrnContent-Length: 16rnrn{"body":"json"}

如果只是JSON,您应该可以复制和粘贴它并调整内容长度。然而,我确实建议您遵循相同的过程并探查实际的健康检查,因为由于必须在配置文件中转义字符,因此正确创建请求可能很棘手。

打开haproxy/conf/haproxy.conf文件。转到页面的末尾,您会看到有一行"选项httpchk GET/",将GET更改为POST,您就完成了。

如果你遇到任何问题,请告诉我。

相关内容

  • 没有找到相关文章

最新更新