ปัญหาของฉัน:
ฉันมีกระบวนการสร้างการเชื่อมต่อ TCP มากกว่า 10k ไปยัง IP&พอร์ตปลายทางเดียวกันต่อวินาที หลังจากช่วงเวลาสั้นๆ จะไม่สามารถสร้างการเชื่อมต่อใหม่ได้อีก เนื่องจากไม่มีพอร์ตต้นทางอีกต่อไป
ฉันพยายามลดปัญหานี้แล้วโดยการตั้งค่า net.ipv4.ip_local_port_range
และ net.ipv4.tcp_fin_timeout
แต่มันไม่ได้แก้ปัญหา
ตอนนี้ความคิดของฉันคือ: ถ้าฉันสามารถบอกเคอร์เนลถึงที่อยู่ IP ต้นทางแบบ Round robin ฉันจะสามารถเพิ่ม IP ลงในอินเทอร์เฟซเดียวของฉันได้อย่างง่ายดาย และทำให้มีขีดจำกัดการเชื่อมต่อขาออกที่สูงขึ้น
ฉันพยายามเพิ่มหลายเส้นทางไปยังปลายทางเดียวกันผ่านอินเทอร์เฟซเดียวกัน แต่ระบุ IP ต้นทางที่แตกต่างกัน:
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.1.1.1 dev eth0 src 10.1.1.10
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.1.1.1 dev eth0 src 10.1.1.11
แต่ฉันได้รับ คำตอบ RTNETLINK: มีไฟล์อยู่
.
ฉันมาถูกทางแล้วหรือนี่
การเพิ่ม IP ต้นทางอื่น "เป็นไปได้" ในกรณีเหล่านั้นหรือไม่
มีวิธีการปัดเศษโรบิน / โหลดบาลานซ์การใช้ IP ต้นทางผ่านเคอร์เนลหรือไม่?
ความหวังของฉันคือ ถ้าฉันจัดเส้นทางสองเส้นทางที่มีน้ำหนักเท่ากันแต่มีที่อยู่ src ต่างกันไปยังเครือข่ายเดียวกันได้ เคอร์เนลจะปัดเศษนั้นทิ้ง
(ความเป็นมา: ฉันใช้ HAproxy บนเครื่องนั้นและต้องโหลดบาลานซ์มากกว่า 10k การเชื่อมต่อไปยังเซิร์ฟเวอร์แบ็คเอนด์เครื่องเดียว)