Search code examples
haproxyheartbeat

haproxy heartbeat with backend based on http post


I want to create a configuration such that the heartbeat between haproxy and the backend is based on HTTP POST.

Does anyone have any idea about this? I have tried the below configuration, but it only sent the http HEAD to the backend server (I want HTTP POST):

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

Thanks for your help.

@Mohsin, Thank you so much. I indeed work. But I want to specify the request message, seems my configure doesn't work. I appreciate that if you can help too.

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

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

my haproxy.conf file is as bellowing:

#---------------------------------------------------------------------
# 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.1\r\nHost: 176.16.0.8:2234\r\nContent-Length: 653\r\n\r\n{<?xml version=\"1.0\" encoding=\"gb2312\"?>\r\n<svc_init ver=\"3.2.0\">\r\n<hdr ver=\"3.2.0\">\r\n<client>\r\n<id>915948</id>\r\n<pwd>915948</pwd>\r\n<serviceid></serviceid>\r\n</client>\r\n<requestor><id>13969041845</id></requestor>\r\n</hdr>\r\n<slir ver=\"3.2.0\" res_type=\"SYNC\">\r\n<msids><msid enc=\"ASC\" type=\"MSISDN\">00000000000</msid></msids>\r\n<eqop>\r\n<resp_req type=\"LOW_DELAY\"/>\r\n<hor_acc>200</hor_acc>\r\n</eqop>\r\n<geo_info>\r\n<CoordinateReferenceSystem>\r\n<Identifier>\r\n<code>4326</code>\r\n<codeSpace>EPSG</codeSpace>\r\n<edition>6.1</edition>\r\n</Identifier>\r\n</CoordinateReferenceSystem>\r\n</geo_info>\r\n<loc_type type=\"CURRENT_OR_LAST\"/>\r\n<prio type=\"HIGH\"/>\r\n</slir>\r\n</svc_init>\r\n\r\n\r\n\r\n}
    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


Solution

  • Open haproxy/conf/haproxy.conf file. Goto end of the page, you will see that there is a line 'option httpchk GET /', change GET to POST and you are done.

    Let me know if you face any problem.