วิธีทำให้ HA Proxy ยังคงอยู่

ในสภาพแวดล้อมของฉันฉันมีสมดุลโหลด haproxy สำหรับ 2 เว็บเซิร์ฟเวอร์ (Apache) นี่คือการกำหนดค่า HA Proxy ของฉัน:

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
        tune.ssl.default-dh-param 2048
    daemon
        nbproc      1
    stats socket /var/lib/haproxy/stats
        stats       timeout 1m
        nogetaddrinfo
listen front
    bind :80
    redirect scheme https if { hdr(Host) -i domain.com } !{ ssl_fc }
listen front_ssl
    bind :443 ssl crt /opt/certificate/domain.pem
    mode http
        option dontlognull
    stats      enable
    stats      uri /ha?stats
    stats      realm system
    stats      auth root:*********
    stats      refresh 5s
    option http-keep-alive
    option forwardfor
    option redispatch
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
         timeout client  15s
        timeout connect 3s
        timeout server  15s
        timeout http-request 15s
        timeout http-keep-alive 15s
        default_backend bk_http
backend bk_http
        mode http
        balance source
        option http-keep-alive
        default-server inter 1s
        retries 3
        timeout connect 3s
        timeout server  15s
        timeout queue 60s
        timeout check 10s
        timeout http-request 15s
        timeout http-keep-alive 15s
        server node1 1.2.3.4:82 check id 1 weight 1 maxconn 2000 maxqueue 2000
        server node2 5.6.7.8:82 check id 1 weight 1 maxconn 2000 maxqueue 2000

"KeepAlive On" ใน /etc/httpd/conf/httpd.conf แต่เมื่อฉันทดสอบด้วย curl ฉันเห็นว่า Keepalive ใช้งานไม่ได้:

curl -Iv http://domain.com 2>&1 | grep -i 'connection #0'
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Closing connection #0
curl -Iv https://domain.com 2>&1 | grep -i 'connection #0'
* Closing connection #0

ดังที่ฉันรู้ว่า Keepalive ใช้งานได้ ผลลัพธ์ควรเป็น:

  0   162    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0* Connection #0 to host domain.com left intact
* Closing connection #0

โปรดแจ้งให้เราทราบหากมีสิ่งผิดปกติในการกำหนดค่าของฉัน


person user36814    schedule 27.01.2015    source แหล่งที่มา
comment
ต่างจากไซต์ฟอรัมตรงที่เราไม่ใช้ Thanks หรือความช่วยเหลือใดๆ ที่ชื่นชม หรือลายเซ็นบน Stack Overflow ดู ควร 'สวัสดี', 'ขอบคุณ' แท็กไลน์และคำทักทายถูกลบออกจากโพสต์หรือไม่ BTW เป็นการขอบคุณล่วงหน้า ไม่ใช่ขอบคุณล่วงหน้า   -  person John Saunders    schedule 27.01.2015


คำตอบ (1)


คุณมีการกำหนดค่าที่ถูกต้อง คุณเพียงแค่ต้องการ option http-keep-alive ซึ่งเป็นค่าเริ่มต้น ณ haproxy 1.5 ตรวจสอบเวอร์ชันที่คุณติดตั้งไว้

ดู http://www.haproxy.org/download/1.5/doc/configuration.txt ส่วนที่ 4 ผู้รับมอบฉันทะ

ในโหมด HTTP การประมวลผลที่ใช้กับคำขอและการตอบกลับที่ไหลผ่านการเชื่อมต่อจะขึ้นอยู่กับการผสมผสานระหว่างตัวเลือก HTTP ของส่วนหน้าและของส่วนหลัง HAProxy รองรับ 5 โหมดการเชื่อมต่อ:

  • KAL : Keep ALIVE ("ตัวเลือก http-keep-alive") ซึ่งเป็นโหมดเริ่มต้น : คำขอและการตอบกลับทั้งหมดได้รับการประมวลผล และการเชื่อมต่อยังคงเปิดอยู่แต่ไม่ได้ใช้งานระหว่างการตอบกลับและคำขอใหม่

  • TUN: tunnel ("ตัวเลือก http-tunnel") : นี่เป็นโหมดเริ่มต้นสำหรับเวอร์ชัน 1.0 ถึง 1.5-dev21 : เฉพาะคำขอและการตอบกลับแรกเท่านั้นที่ได้รับการประมวลผล และสิ่งอื่น ๆ จะถูกส่งต่อโดยไม่มีการวิเคราะห์เลย ไม่ควรใช้โหมดนี้เนื่องจากจะสร้างปัญหามากมายกับการบันทึกและการประมวลผล HTTP

  • PCL: การปิดแบบพาสซีฟ ("ตัวเลือก httpclose") : เหมือนกับโหมดทันเนลทุกประการ แต่มี "การเชื่อมต่อ: ปิด" ต่อท้ายทั้งสองทิศทางเพื่อพยายามทำให้ปลายทั้งสองปิดหลังจากการแลกเปลี่ยนคำขอ/การตอบสนองครั้งแรก

  • SCL: เซิร์ฟเวอร์ปิด ("ตัวเลือก http-เซิร์ฟเวอร์ปิด") : การเชื่อมต่อที่เชื่อมต่อกับเซิร์ฟเวอร์ถูกปิดหลังจากได้รับการตอบกลับสิ้นสุด แต่การเชื่อมต่อที่เชื่อมต่อกับไคลเอนต์ยังคงเปิดอยู่

  • FCL: บังคับปิด ("ตัวเลือกบังคับปิด") : การเชื่อมต่อถูกปิดอย่างแข็งขันหลังจากสิ้นสุดการตอบสนอง

แบ็กเอนด์ของคุณ node1/node2 อาจจะปิดการเชื่อมต่อ พวกเขาอาจไม่ได้เปิดใช้งาน Keepalives

หากคุณสกัดกั้นการตรวจสอบการรับส่งข้อมูลสำหรับ http/1.1 และไม่มีส่วนหัว "การเชื่อมต่อ: ปิด"

person KCD    schedule 26.08.2015