Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

การใช้ HAProxy เป็นโหลดบาลานเซอร์สำหรับ Nginx

ในบทความนี้ เราจะแสดงวิธีกำหนดค่า HAProxy เป็นโหลดบาลานเซอร์ สำหรับสองคน Nginx เว็บเซิร์ฟเวอร์ (คุณสามารถแทนที่ด้วย Apache) CentOS ใช้เป็นระบบปฏิบัติการโฮสต์ในทุกกรณี

HAProxy เป็นซอฟต์แวร์เซิร์ฟเวอร์ที่ให้ความพร้อมใช้งานสูงและโหลดบาลานซ์สำหรับแอป TCP และ HTTP โดยกระจายคำขอขาเข้าระหว่างเซิร์ฟเวอร์แบ็กเอนด์หลายเซิร์ฟเวอร์ HAProxy ใช้ในแหล่งข้อมูลยอดนิยมมากมาย เช่น Twitter , อินสตาแกรม , Github , อเมซอน เป็นต้น

HAProxy ได้รับการติดตั้งบนเซิร์ฟเวอร์แยกต่างหากที่ยอมรับคำขอของไคลเอ็นต์และเปลี่ยนเส้นทางไปยังเว็บเซิร์ฟเวอร์ Nginx คุณสามารถดูสถาปัตยกรรมระบบทั่วไปด้านล่าง:

การใช้ HAProxy เป็นโหลดบาลานเซอร์สำหรับ Nginx

การกำหนดค่า Nginx บนเซิร์ฟเวอร์แบ็กเอนด์

เราเริ่มต้นด้วยการติดตั้งและกำหนดค่า Nginx บนเว็บเซิร์ฟเวอร์ของเรา ภาระงานจะสมดุลกัน ติดตั้งที่เก็บ EPEL และ nginx โดยใช้ yum (หรือ dnf บน RHEL/CentOS 8):

#yum install epel-release -y
#yum install nginx -y

จากนั้นใน nginx .คอนเฟิร์ม ไฟล์ระบุว่าเซิร์ฟเวอร์ต้องประมวลผลคำขอจากเซิร์ฟเวอร์ HAProxy และเซิร์ฟเวอร์ส่วนหลังเท่านั้น:

เซิร์ฟเวอร์แบ็กเอนด์ 1:

เซิร์ฟเวอร์ { ฟัง current_server_IP_address:80 default_server; อนุญาต second_backend_server_IP_address; อนุญาต IP_haproxy; ปฏิเสธทั้งหมด; ชื่อเซิร์ฟเวอร์ _; รูท /usr/share/nginx/html; # โหลดไฟล์การกำหนดค่าสำหรับบล็อกเซิร์ฟเวอร์เริ่มต้น รวม /etc/nginx/default.d/*.conf; สถานที่ / { }

เซิร์ฟเวอร์แบ็กเอนด์ 2:

เซิร์ฟเวอร์ { ฟัง current_server_IP_address:80 default_server; อนุญาต first_backend_server_IP_address; อนุญาต IP_haproxy; ปฏิเสธทั้งหมด; ชื่อเซิร์ฟเวอร์ _; รูท /usr/share/nginx/html; # โหลดไฟล์การกำหนดค่าสำหรับบล็อกเซิร์ฟเวอร์เริ่มต้น รวม /etc/nginx/default.d/*.conf; สถานที่ / { }

ไฟล์การกำหนดค่า nginx เป็นค่าเริ่มต้น เราเพิ่งเพิ่มเซิร์ฟเวอร์ใน ฟัง IP และปฏิเสธการเข้าถึงทุกคนยกเว้นเซิร์ฟเวอร์ของเราที่ใช้ อนุญาต และ ปฏิเสธ คำสั่ง

เพื่อให้เว็บเซิร์ฟเวอร์เริ่มทำงานได้ ให้เปิดพอร์ต HTTP ของไฟร์วอลล์โดยใช้ไฟร์วอลล์หรือ iptables:

#firewall-cmd --permanent –add-service=http
#firewall-cmd –reload

ทำการทดสอบทดสอบบนเซิร์ฟเวอร์แบ็กเอนด์ของคุณ:

# curl IP_of_the_second_server

ที่นี่คุณจะได้ HTML ไฟล์

เซิร์ฟเวอร์ได้ส่งคืนไฟล์ดัชนี nginx มาตรฐาน เพื่อให้การตรวจสอบสะดวกยิ่งขึ้น ฉันได้เปลี่ยนเนื้อหาของไฟล์ดัชนีบนเซิร์ฟเวอร์แบ็กเอนด์แต่ละรายการเพื่อดูในเบราว์เซอร์ของฉัน ซึ่งเซิร์ฟเวอร์ได้ประมวลผลคำขอปัจจุบัน

ไฟล์ดัชนี nginx อยู่ใน /usr/share/nginx/html/ .

การกำหนดค่าตัวจัดสรรภาระงาน HAProxy

มาติดตั้งและกำหนดค่า HAProxy บนเซิร์ฟเวอร์ที่จะใช้เป็นโหลดบาลานเซอร์กันเถอะ

ติดตั้ง HAProxy:
#yum install epel-release -y
#yum install haproxy -y

รันธุรกรรมการติดตั้ง :haproxy-1.5.18-9.el7.x86_64 1/1Verifying :haproxy-1.5.18-9.el7.x86_64 1/1Installed:haproxy.x86_64 0:1.5.18-9.el7Complete!

ในการเปิดใช้งาน HAProxy คุณต้องเพิ่ม Enabled=1 ไปที่ /etc/default/haproxy ไฟล์:

#nano /etc/default/haproxy

การใช้ HAProxy เป็นโหลดบาลานเซอร์สำหรับ Nginx

ตอนนี้ ไปที่การกำหนดค่า HAProxy ในการกำหนดค่าที่ง่ายที่สุดของเรา เซิร์ฟเวอร์โหลดบาลานเซอร์จะประมวลผลคำขอ HTTP ทั้งหมดและส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์:

#nano /etc/haproxy/haproxy.cfg

ล็อก /dev/log local0 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 ผู้ใช้ กลุ่ม haproxy haproxy daemondefaults โหมด http บันทึกตัวเลือกโกลบอล httplog ตัวเลือก redispatch ลองใหม่ 3 หมดเวลา http-request 10s หมดเวลาคิว 1m หมดเวลา เชื่อมต่อ 10s ไคลเอนต์หมดเวลา 1m เซิร์ฟเวอร์หมดเวลา 1m หมดเวลา http-keep-alive 10s หมดเวลาตรวจสอบ 10s maxconn 3000 ฟรอนต์เอนด์ www ผูก balancer_IP_address:80 default_backend nginx_poolbackend nginx_pool สมดุลโหมด Roundrobin http เซิร์ฟเวอร์เว็บ 1 IP_of_the_first_backend_server:80 ตรวจสอบเซิร์ฟเวอร์_prer ที่สอง IP_backend 

หลังจากบันทึกการกำหนดค่าแล้ว ให้ตรวจสอบไวยากรณ์ haproxy.cfg:

#haproxy -f /etc/haproxy/haproxy.cfg -c

หากใช้ได้ คุณจะได้รับข้อความดังนี้:

ไฟล์การกำหนดค่าถูกต้อง

จากนั้นรีสตาร์ท HAProxy และเพิ่มในการเริ่มต้น Linux และเปิดพอร์ต HTTP ในไฟร์วอลล์

#systemctl restart haproxy
#systemctl enable haproxy
#firewall-cmd —permanent –add-service=http
#firewall-cmd –reload

ดังนั้น ตัวโหลดบาลานซ์จึงได้รับการกำหนดค่า ให้ตรวจสอบโดยเปิดที่อยู่ IP ของเซิร์ฟเวอร์ HAProxy ในเบราว์เซอร์:

การใช้ HAProxy เป็นโหลดบาลานเซอร์สำหรับ Nginx

อย่างที่คุณเห็น เซิร์ฟเวอร์ทั้งสองได้ส่งคืนเนื้อหาในทางกลับกัน ดังนั้นตัวสร้างสมดุลจึงทำงาน

พารามิเตอร์ไฟล์การกำหนดค่า Haproxy.cfg

มาพิจารณาตัวอย่างหลักของอัลกอริทึม HAProxy:

  • roundrobin — เป็นอัลกอริทึมเริ่มต้น ส่งคำขอไปยังเซิร์ฟเวอร์ในทางกลับกัน เราได้ใช้วิธีนี้ในตัวอย่างของเราแล้ว
  • leastconn – เลือกเซิร์ฟเวอร์ที่มีจำนวนการเชื่อมต่อที่ใช้งานได้น้อยที่สุด ขอแนะนำให้ใช้กับโครงการที่มีการใช้งานเป็นเวลานาน
  • source – เลือกเซิร์ฟเวอร์ตามแฮชของที่อยู่ IP ของผู้ใช้ ในโหมดนี้ ไคลเอนต์จะเชื่อมต่อเว็บเซิร์ฟเวอร์เดียวกันหากที่อยู่ IP ของผู้ใช้ยังคงไม่เปลี่ยนแปลง

มาอธิบายพารามิเตอร์ไฟล์การกำหนดค่ากัน

ทั่วโลก บล็อก:

  • log — เขียนล็อกอิน /dev/log saving local0 เป็นค่าของอ็อบเจกต์
  • chroot — การตั้งค่าความปลอดภัย ล็อค HAProxy ไปยังไดเร็กทอรีที่ระบุ
  • maxconn — จำนวนการเชื่อมต่อพร้อมกันสูงสุดต่อกระบวนการ
  • daemon — เรียกใช้กระบวนการเป็นภูต

ค่าเริ่มต้น บล็อก. บล็อกนี้ตั้งค่าพารามิเตอร์เริ่มต้นสำหรับส่วนอื่น ๆ ทั้งหมดที่ตามมา:

  • log — เซ็ตว่าบันทึกใดเป็นรายการที่เขียนถึง (ในกรณีนี้ global หมายความว่าใช้พารามิเตอร์ที่ตั้งค่าในส่วนโกลบอล)
  • mode — ตั้งค่าโปรโตคอลการสื่อสารและมีค่าใดค่าหนึ่งต่อไปนี้:tcp, http หรือ health
  • retries — จำนวนครั้งในการพยายามเชื่อมต่อกับเซิร์ฟเวอร์ในกรณีที่เกิดความล้มเหลว
  • option httplog — รูปแบบบันทึกที่ใช้หาก HAProxy กำลังพร็อกซีคำขอ HTTP
  • option redispatch — อนุญาตให้โปรแกรมยุติและส่งเซสชันซ้ำในกรณีที่เซิร์ฟเวอร์ล้มเหลว
  • contimeout — เวลารอสูงสุดจนกว่าการเชื่อมต่อกับเซิร์ฟเวอร์จะสำเร็จ

นอกจากนี้ยังมีพารามิเตอร์มากมายที่เกี่ยวข้องกับการหมดเวลาที่แตกต่างกัน

กำลังรวบรวมสถิติ HAProxy

เพิ่มบล็อกสถิติไปยังไฟล์การกำหนดค่า:

ฟังสถิติผูก :10001 สถิติเปิดใช้งานสถิติ uri /haproxy_stats สถิติ auth admin:admin

Description:

  • bind – พอร์ตที่คุณสามารถดูสถิติได้
  • stats enable – เปิดใช้งานรายงานสถิติ
  • stats uri – ตั้งค่าที่อยู่หน้าสถิติ
  • stats auth – เข้าสู่ระบบและรหัสผ่านเพื่อเข้าถึง
คุณสามารถระบุพอร์ต TCP ใดก็ได้ที่คุณต้องการ หากรายการข้างต้นไม่ว่างหรือไม่เหมาะกับคุณ

ยอมรับการเชื่อมต่อขาเข้าบนพอร์ตที่ระบุข้างต้นในไฟร์วอลล์ของคุณ:

firewall-cmd --permanent –add-port=10001/tcp
firewall-cmd –reload

หากต้องการดูรายงาน HAProxy ให้ไปที่ลิงก์นี้:

https://hostname_haproxy:10001/haproxy_stats

การใช้ HAProxy เป็นโหลดบาลานเซอร์สำหรับ Nginx เปิดที่อยู่ IP ของบาลานเซอร์ในเบราว์เซอร์ของคุณและเริ่มกด F5 . สถิติ HAproxy จะเปลี่ยนไป

ในบทความนี้ เราได้พิจารณาการกำหนดค่า HAProxy พื้นฐานแล้ว มีหลายกรณีในการใช้โมดูล HAProxy

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

การใช้ HAProxy เป็นโหลดบาลานเซอร์สำหรับ Nginx