Score:0

วิธีการตั้งค่า HAProxy สำหรับการเชื่อมต่อมากกว่า 500,000 รายการที่ทำงานภายใน Docker Container บนโฮสต์ Linux

ธง br

ฉันต้องการให้ HAProxy Load Balancer รองรับการเชื่อมต่ออย่างน้อย 1M ฉันต้องการสิ่งนี้เพื่อปรับใช้การทดสอบความเครียด

ฉันลองตั้งค่า:

แม็กซ์คอน 1000000

ในของฉัน haproxy.cfg แต่ HAProxy ไม่สามารถเริ่มต้นด้วย:

[haproxy.main()] ไม่สามารถเพิ่มขีดจำกัด FD เป็น 2000029 ได้ ขีดจำกัดคือ 1048576

ฉันใช้ HAProxy ใน Docker Container บน Ubuntu Linux 20.04 LTS ซึ่งเป็นอินสแตนซ์ Amazon AWS Lightsail VPS

ฉันได้ดูคำถามต่างๆ บนอินเทอร์เน็ตเกี่ยวกับวิธีการเพิ่มด้วยตนเอง เปิดไฟล์ ขีด จำกัด (ยูลิมิต -n) และคัดลอกวางการกำหนดค่าจำนวนมากลงในโฮสต์ของฉัน ไม่มีอะไรทำงาน - ฉันไม่สามารถเพิ่มขีดจำกัดนี้ให้สูงกว่า 1048576

ฉันพบโพสต์ที่เกี่ยวข้องต่อไปนี้ในเรื่องของการจำกัดจำนวนไฟล์ที่เปิด:

คำถามนี้เกือบจะเหมือนกับของฉัน:

ฉันเข้าใกล้ปัญหาจากมุมที่ผิดหรือไม่? มีวิธีอื่นในการกำหนดค่า HAProxy เพื่อให้สามารถรองรับการเชื่อมต่อนับล้านได้หรือไม่ (นั่นคือโดยไม่ต้องเพิ่ม ยูลิมิต -n)?

Gerard H. Pille avatar
in flag
ไม่มี ชื่อคำถามของคุณระบุว่า "มากกว่า 500,000" ซึ่งดูเหมือนจะเป็นไปได้ แต่ไม่ใช่สองเท่าคุณรู้หรือไม่ว่าหากเปิดไฟล์ 1 ล้านไฟล์ เซิร์ฟเวอร์ของคุณจะถูกหยุดทำงาน มีความคิดหรือไม่ว่าต้องใช้หน่วยความจำเท่าใดสำหรับการเชื่อมต่อ TCP/IP เดียว
br flag
ฉันกำลังดู [บทความนี้](https://www.freecodecamp.org/news/how-we-fine-tuned-haproxy-to-achieve-2-000-000-concurrent-ssl-connections-d017e61a4d27/# haproxy-configuration) โดยตั้งค่า `maxconn` เป็น 2,000,000 ระบบที่พวกเขาเรียกใช้ haproxy มี RAM 30GB หรือมากกว่านั้น
Gerard H. Pille avatar
in flag
พวกเขาไม่ได้ใช้คอนเทนเนอร์บนเซิร์ฟเวอร์คลาวด์ใช่ไหม
Score:0
ธง br

สารละลาย

เดอะ เปิดไฟล์ จำกัด เป็นไปได้ เพิ่มขึ้น.

⦠ขีดจำกัดฮาร์ดแวร์ต่อกระบวนการถูกตั้งค่าเป็น 1048576 โดยค่าเริ่มต้น แต่สามารถเป็น เปลี่ยนโดยใช้ "fs.nr_open" sysctl จาก: คู่มือการจัดการ HAProxy | 5. ข้อ จำกัด ของตัวอธิบายไฟล์

ฉันสะดุดกับ ทรัพยากรที่มีประโยชน์ เกี่ยวกับวิธีเพิ่ม fs.nr_open. นี่คือสิ่งที่ฉันทำ (บนเครื่องโฮสต์ของฉัน):

# 0. ssh ลงในอินสแตนซ์คลาวด์ของฉัน

#1. เปลี่ยนเป็นรูท
ซูโด ซู -
#2. เพิ่มขีดจำกัด
sysctl -w fs.nr_open=2010000
# 3 บันทึกการเปลี่ยนแปลงและออก
sysctl -p
ทางออก
# 4 ตอนนี้คุณกลับมาอยู่ในเชลล์ผู้ใช้แล้ว คุณต้องเข้าสู่ระบบใหม่
# จากเชลล์นี้ด้วยเพื่อให้การเปลี่ยนแปลงมีผล
ทางออก

โปรดทราบว่าการเปลี่ยนแปลงที่เกิดขึ้นจะไม่คงอยู่หลังจากรีบูต หากมีใครทราบวิธีการดังกล่าว โปรดแจ้งให้เราทราบและฉันจะแก้ไขคำตอบของฉัน

ฉันต้องบอก Docker ด้วยว่าสามารถเปิดไฟล์มากกว่า 1,048,576 ไฟล์ในคอนเทนเนอร์ได้ ฉันใช้ไฟล์ Docker Compose เพื่อกำหนดบริการของฉัน ฉันเพียงแค่เพิ่มตัวอย่างต่อไปนี้ในของฉัน นักเทียบท่า-compose.yml:

บริการ:
  พร็อกซี:
    ภาพ: haproxy
    #ตัวอย่างข้อมูลเริ่มต้น
    ขีด จำกัด :
      ไม่มีไฟล์:
        อ่อน: 2005000
        ยาก: 2005000
    #ทิ้งท้าย
    # ...
# ...

สุดท้าย แต่ไม่ท้ายสุด ตรวจสอบให้แน่ใจว่าอินสแตนซ์โฮสต์มี RAM อย่างน้อย 2GB มิฉะนั้นหน่วยความจำของคุณจะหมดเมื่อคุณพยายามเรียกใช้พร็อกซี หากคุณต้องการจัดการคำขอ 1 ล้านรายการด้วยพร็อกซีของคุณจริงๆ คุณจะต้องใช้หน่วยความจำมากขึ้น ซึ่งมีขนาดระหว่าง 20 ถึง 30 GB คุณสามารถทดสอบด้วยตัวเองได้ตามสบาย หากคุณรู้วิธีคำนวณขีดจำกัด อย่าลังเลที่จะแก้ไขคำตอบของฉันหรือโพสต์ความคิดเห็นด้านล่าง!

เหตุผลเกี่ยวกับจำนวนไฟล์ที่เปิด

หากเราต้องการไฟล์เปิด 2,000,029 ไฟล์สำหรับการเชื่อมต่อ 1 ล้านครั้ง ให้:

  • กำหนดขีดจำกัดคอนเทนเนอร์พร็อกซีให้สูงกว่านั้นเล็กน้อย: 2,000,029 + 4971 = 2,005,000
    • ตั้งค่าขีดจำกัดระบบปฏิบัติการโฮสต์ให้สูงกว่านั้นเล็กน้อย: 2,005,000 + 5000 = 2,010,000
Gerard H. Pille avatar
in flag
คุณรู้หรือไม่ว่า Jeff จะเรียกเก็บเงินจากคุณเท่าไร?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา