เมื่อใช้ TCP load balancing กับ HAProxy ปริมาณการรับส่งข้อมูลขาออกทั้งหมดผ่าน LB หรือไม่


19

ฉันกำลังตั้งค่าแอปให้ใช้งานโฮสต์โดยใช้ VM (อาจเป็น amazon แต่ไม่ได้ตั้งค่าไว้) ซึ่งจะต้องมีทั้ง HTTP load balancing และ load balancing เป็นจำนวนมาก (50k หรือมากกว่านั้นถ้าเป็นไปได้) ของการเชื่อมต่อ TCP แบบถาวร จำนวนข้อมูลไม่ได้ทั้งหมดนั้นสูง แต่การปรับปรุงเป็นประจำ

ตอนนี้ฉันกำลังประเมิน load balancer และสับสนเล็กน้อยเกี่ยวกับสถาปัตยกรรมของ HAProxy ถ้าฉันใช้ HAProxy เพื่อสร้างความสมดุลการเชื่อมต่อ TCP การรับส่งข้อมูลทั้งหมดจะไหลผ่านตัวโหลดบาลานซ์หรือไม่ ถ้าเป็นเช่นนั้นโซลูชันอื่น (เช่น LVS หรือแม้แต่ nginx_tcp_proxy_module) จะเหมาะสมกว่าหรือไม่

คำตอบ:


33

HAProxy (เช่นตัวโหลดบาลานซ์หลายตัว) โดยทั่วไปจะรักษาการสนทนาสองครั้ง พร็อกซีมีเซสชัน (tcp ในกรณีนี้) กับลูกค้าและอีกเซสชันหนึ่งกับเซิร์ฟเวอร์ ดังนั้นเมื่อใช้พรอกซีคุณจะเห็นการเชื่อมต่อ 2x บนตัวโหลดบาลานซ์ ดังนั้นทราฟฟิกทั้งหมดจะไหลผ่านตัวโหลดบาลานซ์

เมื่อพูดถึงการปรับขนาดตัวโหลดบาลานซ์หลายตัวฉันไม่คิดว่าคุณต้องทำ แต่วิธีที่ใช้งานได้จริงและค่อนข้างง่ายคือใช้บางอย่างเช่นเก็บไว้กับIP แบบลอยสองและDNS แบบปัดวนระหว่าง IP ทั้งสอง ถ้ามีคนใดคนหนึ่งโหลดบาลานเซอร์ลงไปอีกคนหนึ่งจะถือ IP ทั้งสองไว้ดังนั้นคุณจะได้รับความพร้อมใช้งานสูงด้วยวิธีนี้ ที่ถูกกล่าวว่าฉันคิดว่าคุณจะดีกับอินสแตนซ์ haproxy หนึ่งที่ใช้งานกับการโหลดของคุณ

HAProxy ชั่งได้ดีมาก ตัวอย่างเช่นเครือข่าย Stack Exchange ใช้เว็บซ็อกเก็ตซึ่งรักษาการเชื่อมต่อ TCP แบบเปิด ในขณะที่ฉันโพสต์สิ่งนี้เรามี 143,000 ซ็อกเก็ต TCP ที่สร้างขึ้นบนเครื่องเสมือน VMware โดยไม่มีปัญหา การใช้งาน CPU บน VM ประมาณ 7%

ด้วยการตั้งค่าประเภทนี้ด้วย HAProxy ให้แน่ใจว่าคุณตั้งค่าไว้maxconnสูงพอ นี่คือตัวอย่างการกำหนดค่า HAProxy เพื่อให้คุณเริ่มต้น:

frontend fe_websockets
        bind 123.123.123.123:80
        mode tcp
        log global
        option tcplog
        timeout client 3600s
        backlog 4096
        maxconn 50000
        default_backend be_nywebsockets

backend be_nywebsockets
        mode  tcp
        option log-health-checks
        option redispatch
        option tcplog
        balance roundrobin
        server web1 10.0.0.1:1234
        server web2 10.0.0.2:1234
        timeout connect 1s
        timeout queue 5s
        timeout server 3600s

143,000 อันนั้นยังคงพูดถึงซ็อกเก็ตเว็บอยู่ใช่ไหม หรือว่าสิ่งอื่น ๆ ด้วย?
Marc Gravell

@MarcGravell: ซ็อกเก็ตเว็บแทบทั้งหมด โปรดจำไว้ว่านี่คือ 2x แม้ว่าที่ฉันกล่าวในการแนะนำของฉันดังนั้นเซิร์ฟเวอร์เว็บซ็อกเก็ตจะเห็นจำนวน ~ 70k
Kyle Brandt

@Kyle - เหตุผลใดก็ตามที่คุณต้องการซ็อกเก็ตเว็บและการเชื่อมต่อ TCP แบบต่อเนื่อง ดูเหมือนว่าเว็บไซต์นี้จะไม่มีคุณสมบัติตามเวลาจริง
ต่อเนื่อง

@Continuation: มีคุณสมบัติแบบเรียลไทม์จำนวนมากรวมถึงการแจ้งเตือนกล่องจดหมายการโหวตการแก้ไขความคิดเห็น / คำตอบ / คำถามใหม่ ไม่แน่ใจว่าพวกเขาจะเปิดใช้งานเฉพาะผู้ใช้ที่มีข้อ จำกัด ตัวแทนแน่นอนถ้าคุณไม่เห็นพวกเขาคุณสามารถสอบถามได้ที่ meta.stackoverflow.com
Kyle Brandt

1
@KyleBrandt ทำงานในโหมด TCP ด้วยหรือไม่
elslooo

2

ใช่การรับส่งข้อมูลทั้งหมดควรผ่านตัวโหลดบาลานซ์ ได้รับการร้องขอจาก load balancer และการตอบกลับจะถูกส่งกลับไปที่ load balancer ซึ่งจะส่งกลับไปยังไคลเอนต์

สำหรับการเลือกเครื่องมือที่เหมาะสมฉันไม่มีประสบการณ์มากเกี่ยวกับตัวเลือกอื่น ๆ ฉันใช้ haproxy จริงๆแล้วมันก็ดีและเสถียรและสามารถรองรับปริมาณการใช้งานจำนวนมากได้ นอกจากนี้ความสามารถของ ACL ก็ยอดเยี่ยมเช่นกัน


2

มีความเป็นไปได้ที่จะใช้และกำหนดค่า DSR (Direct Server Return) แต่สิ่งนี้ไม่มีส่วนเกี่ยวข้องกับ Loadbalancer แต่มีการกำหนดค่าใน tcp-stack (ตารางเส้นทาง) เราใช้สิ่งนี้กับพอร์ทัลวิดีโอสตรีมมิ่งขนาดใหญ่ แม้ว่ามันจะใช้งานได้มันจะทำให้คุณปวดหัวได้มากเกี่ยวกับความซับซ้อนของการกำหนดเส้นทางที่จำเป็น

ดังนั้นฉันจะไม่แนะนำให้ใช้เทคนิคนี้โดยไม่พิจารณาการใช้งานและข้อเสียอย่างละเอียด

อาจมีคำแนะนำในการเริ่มต้น:

มีความสุข!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.