Uploaded image for project: 'RHEL'
  1. RHEL
  2. RHEL-63063

haproxy http-reuse feature is not working in rhel8

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Undefined Undefined
    • None
    • rhel-8.9.0
    • haproxy
    • No
    • Moderate
    • rhel-sst-high-availability
    • ssg_filesystems_storage_and_HA
    • None
    • False
    • Hide

      None

      Show
      None
    • None
    • None
    • None
    • None
    • None

      What were you trying to do that didn't work?

      'http-reuse always' does not work in HAProxy v1.8.27

      What is the impact of this issue to you?

      customer unable to find tune their host resources

      Please provide the package NVR for which the bug is seen:

      haproxy-1.8.27-5.el8.x86_64

      How reproducible is this bug?:

      Always

      Steps to reproduce

      1. Configure haproxy for http-reuse.  I am using below configuration for backend server:

      +++

      frontend  lb1
        mode http
        bind 192.168.124.85:8080
        default_backend app

      backend app
        option       http-keep-alive
        http-reuse   always
        timeout http-keep-alive 4500
        server       server1 192.168.124.233:80 inter 50s check

      +++

      and using below curl command to send multiple requests

       for i in {1..3}; do curl http://192.168.124.85:8080; done

       

      The tcpdump shows separate connections are made from haproxy to backend in RHEL 8.8 for above curl command:

      +++

      18:33:17.524669 IP 192.168.124.85.44122 > 192.168.124.233.80: Flags [S], seq 2963253802, win 29200, options [mss 1460,sackOK,TS val 1766200874 ecr 0,nop,wscale 7], length 0
      18:33:17.524778 IP 192.168.124.233.80 > 192.168.124.85.44122: Flags [S.], seq 670808624, ack 2963253803, win 28960, options [mss 1460,sackOK,TS val 6615536 ecr 1766200874,nop,wscale 7], length 0
      18:33:17.524894 IP 192.168.124.85.44122 > 192.168.124.233.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 1766200874 ecr 6615536], length 0
      18:33:17.524918 IP 192.168.124.85.44122 > 192.168.124.233.80: Flags [P.], seq 1:115, ack 1, win 229, options [nop,nop,TS val 1766200874 ecr 6615536], length 114: HTTP: GET / HTTP/1.1
      18:33:17.525056 IP 192.168.124.233.80 > 192.168.124.85.44122: Flags [.], ack 115, win 227, options [nop,nop,TS val 6615536 ecr 1766200874], length 0
      18:33:17.525412 IP 192.168.124.233.80 > 192.168.124.85.44122: Flags [P.], seq 1:310, ack 115, win 227, options [nop,nop,TS val 6615537 ecr 1766200874], length 309: HTTP: HTTP/1.1 200 OK
      18:33:17.525484 IP 192.168.124.85.44122 > 192.168.124.233.80: Flags [.], ack 310, win 237, options [nop,nop,TS val 1766200874 ecr 6615537], length 0
      18:33:17.525798 IP 192.168.124.85.44122 > 192.168.124.233.80: Flags [R.], seq 115, ack 310, win 237, options [nop,nop,TS val 1766200875 ecr 6615537], length 0
      18:33:17.534788 IP 192.168.124.85.44132 > 192.168.124.233.80: Flags [S], seq 807228304, win 29200, options [mss 1460,sackOK,TS val 1766200884 ecr 0,nop,wscale 7], length 0
      18:33:17.535051 IP 192.168.124.233.80 > 192.168.124.85.44132: Flags [S.], seq 3751471069, ack 807228305, win 28960, options [mss 1460,sackOK,TS val 6615546 ecr 1766200884,nop,wscale 7], length 0
      18:33:17.535181 IP 192.168.124.85.44132 > 192.168.124.233.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 1766200884 ecr 6615546], length 0
      18:33:17.535270 IP 192.168.124.85.44132 > 192.168.124.233.80: Flags [P.], seq 1:115, ack 1, win 229, options [nop,nop,TS val 1766200884 ecr 6615546], length 114: HTTP: GET / HTTP/1.1
      18:33:17.535436 IP 192.168.124.233.80 > 192.168.124.85.44132: Flags [.], ack 115, win 227, options [nop,nop,TS val 6615547 ecr 1766200884], length 0
      18:33:17.536091 IP 192.168.124.233.80 > 192.168.124.85.44132: Flags [P.], seq 1:310, ack 115, win 227, options [nop,nop,TS val 6615547 ecr 1766200884], length 309: HTTP: HTTP/1.1 200 OK
      18:33:17.536133 IP 192.168.124.85.44132 > 192.168.124.233.80: Flags [.], ack 310, win 237, options [nop,nop,TS val 1766200885 ecr 6615547], length 0
      18:33:17.536406 IP 192.168.124.85.44132 > 192.168.124.233.80: Flags [R.], seq 115, ack 310, win 237, options [nop,nop,TS val 1766200885 ecr 6615547], length 0
      18:33:17.539166 IP 192.168.124.85.44138 > 192.168.124.233.80: Flags [S], seq 4221728930, win 29200, options [mss 1460,sackOK,TS val 1766200888 ecr 0,nop,wscale 7], length 0
      18:33:17.539334 IP 192.168.124.233.80 > 192.168.124.85.44138: Flags [S.], seq 3853565679, ack 4221728931, win 28960, options [mss 1460,sackOK,TS val 6615551 ecr 1766200888,nop,wscale 7], length 0
      18:33:17.539362 IP 192.168.124.85.44138 > 192.168.124.233.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 1766200888 ecr 6615551], length 0
      18:33:17.539402 IP 192.168.124.85.44138 > 192.168.124.233.80: Flags [P.], seq 1:115, ack 1, win 229, options [nop,nop,TS val 1766200888 ecr 6615551], length 114: HTTP: GET / HTTP/1.1
      18:33:17.539446 IP 192.168.124.233.80 > 192.168.124.85.44138: Flags [.], ack 115, win 227, options [nop,nop,TS val 6615551 ecr 1766200888], length 0
      18:33:17.539655 IP 192.168.124.233.80 > 192.168.124.85.44138: Flags [P.], seq 1:310, ack 115, win 227, options [nop,nop,TS val 6615551 ecr 1766200888], length 309: HTTP: HTTP/1.1 200 OK
      18:33:17.539681 IP 192.168.124.85.44138 > 192.168.124.233.80: Flags [.], ack 310, win 237, options [nop,nop,TS val 1766200889 ecr 6615551], length 0
      18:33:17.540007 IP 192.168.124.85.44138 > 192.168.124.233.80: Flags [R.], seq 115, ack 310, win 237, options [nop,nop,TS val 1766200889 ecr 6615551], length 0
      18:33:20.228747 IP 192.168.124.85.44142 > 192.168.124.233.80: Flags [S], seq 1034147465, win 29200, options [mss 1460,sackOK,TS val 1766203578 ecr 0,nop,wscale 7], length 0
      18:33:20.229287 IP 192.168.124.233.80 > 192.168.124.85.44142: Flags [S.], seq 490351401, ack 1034147466, win 28960, options [mss 1460,sackOK,TS val 6618240 ecr 1766203578,nop,wscale 7], length 0
      18:33:20.229772 IP 192.168.124.85.44142 > 192.168.124.233.80: Flags [R.], seq 1, ack 1, win 229, options [nop,nop,TS val 1766203579 ecr 6618240], length 0
      18:33:20.375336 IP 192.168.124.28.54926 > 192.168.124.233.80: Flags [S], seq 3145326290, win 64240, options [mss 1460,sackOK,TS val 1996838851 ecr 0,nop,wscale 7], length 0
      18:33:20.375803 IP 192.168.124.233.80 > 192.168.124.28.54926: Flags [S.], seq 1545524402, ack 3145326291, win 28960, options [mss 1460,sackOK,TS val 6618387 ecr 1996838851,nop,wscale 7], length 0
      18:33:20.376237 IP 192.168.124.28.54926 > 192.168.124.233.80: Flags [R.], seq 1, ack 1, win 502, options [nop,nop,TS val 1996838852 ecr 6618387], length 0

      +++

       

      whereas in  RHEL9 (haproxy 2.4.7-2.el9_0), we could see connection reuse:

      +++

      18:32:36.123248 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [S], seq 1612858360, win 64240, options [mss 1460,sackOK,TS val 1996794599 ecr 0,nop,wscale 7], length 0
      18:32:36.123393 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [S.], seq 3622112014, ack 1612858361, win 28960, options [mss 1460,sackOK,TS val 6574135 ecr 1996794599,nop,wscale 7], length 0
      18:32:36.123415 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [.], ack 1, win 502, options [nop,nop,TS val 1996794599 ecr 6574135], length 0
      18:32:36.123427 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [P.], seq 1:115, ack 1, win 502, options [nop,nop,TS val 1996794599 ecr 6574135], length 114: HTTP: GET / HTTP/1.1
      18:32:36.123478 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [.], ack 115, win 227, options [nop,nop,TS val 6574135 ecr 1996794599], length 0
      18:32:36.124560 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [P.], seq 1:310, ack 115, win 227, options [nop,nop,TS val 6574136 ecr 1996794599], length 309: HTTP: HTTP/1.1 200 OK
      18:32:36.124616 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [.], ack 310, win 501, options [nop,nop,TS val 1996794600 ecr 6574136], length 0
      18:32:36.127533 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [P.], seq 115:229, ack 310, win 501, options [nop,nop,TS val 1996794603 ecr 6574136], length 114: HTTP: GET / HTTP/1.1
      18:32:36.127666 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [P.], seq 310:619, ack 229, win 227, options [nop,nop,TS val 6574139 ecr 1996794603], length 309: HTTP: HTTP/1.1 200 OK
      18:32:36.130728 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [P.], seq 229:343, ack 619, win 501, options [nop,nop,TS val 1996794606 ecr 6574139], length 114: HTTP: GET / HTTP/1.1
      18:32:36.130855 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [P.], seq 619:928, ack 343, win 227, options [nop,nop,TS val 6574142 ecr 1996794606], length 309: HTTP: HTTP/1.1 200 OK
      18:32:36.171183 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [.], ack 928, win 501, options [nop,nop,TS val 1996794647 ecr 6574142], length 0
      18:32:41.136184 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [F.], seq 928, ack 343, win 227, options [nop,nop,TS val 6579147 ecr 1996794647], length 0
      18:32:41.136709 IP 192.168.124.28.35124 > 192.168.124.233.80: Flags [F.], seq 343, ack 929, win 501, options [nop,nop,TS val 1996799612 ecr 6579147], length 0
      18:32:41.137059 IP 192.168.124.233.80 > 192.168.124.28.35124: Flags [.], ack 344, win 227, options [nop,nop,TS val 6579148 ecr 1996799612], length 0

      +++

      Customer is looking for backporting the features for RHEL8.  I tried to identify few commits, but the backport is not success as I see lot of changes between v1.8 and v2.4.

       

      Can we get this fixed in RHEL8 ?

              rhn-engineering-rohara Ryan O'Hara
              rhn-support-surkumar Suresh Kumar
              Ryan O'Hara Ryan O'Hara
              Cluster QE Cluster QE
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated: