ในบทความนี้ เราจะแสดงวิธีกำหนดค่า HAProxy เป็นโหลดบาลานเซอร์ สำหรับสองคน Nginx เว็บเซิร์ฟเวอร์ (คุณสามารถแทนที่ด้วย Apache) CentOS ใช้เป็นระบบปฏิบัติการโฮสต์ในทุกกรณี
HAProxy เป็นซอฟต์แวร์เซิร์ฟเวอร์ที่ให้ความพร้อมใช้งานสูงและโหลดบาลานซ์สำหรับแอป TCP และ HTTP โดยกระจายคำขอขาเข้าระหว่างเซิร์ฟเวอร์แบ็กเอนด์หลายเซิร์ฟเวอร์ HAProxy ใช้ในแหล่งข้อมูลยอดนิยมมากมาย เช่น Twitter , อินสตาแกรม , Github , อเมซอน เป็นต้น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 ในการกำหนดค่าที่ง่ายที่สุดของเรา เซิร์ฟเวอร์โหลดบาลานเซอร์จะประมวลผลคำขอ 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.cfg
มาพิจารณาตัวอย่างหลักของอัลกอริทึม HAProxy:
roundrobin
— เป็นอัลกอริทึมเริ่มต้น ส่งคำขอไปยังเซิร์ฟเวอร์ในทางกลับกัน เราได้ใช้วิธีนี้ในตัวอย่างของเราแล้วleastconn
– เลือกเซิร์ฟเวอร์ที่มีจำนวนการเชื่อมต่อที่ใช้งานได้น้อยที่สุด ขอแนะนำให้ใช้กับโครงการที่มีการใช้งานเป็นเวลานานsource
– เลือกเซิร์ฟเวอร์ตามแฮชของที่อยู่ IP ของผู้ใช้ ในโหมดนี้ ไคลเอนต์จะเชื่อมต่อเว็บเซิร์ฟเวอร์เดียวกันหากที่อยู่ IP ของผู้ใช้ยังคงไม่เปลี่ยนแปลง
มาอธิบายพารามิเตอร์ไฟล์การกำหนดค่ากัน
ทั่วโลก บล็อก:
log
— เขียนล็อกอิน /dev/log saving local0 เป็นค่าของอ็อบเจกต์chroot
— การตั้งค่าความปลอดภัย ล็อค HAProxy ไปยังไดเร็กทอรีที่ระบุmaxconn
— จำนวนการเชื่อมต่อพร้อมกันสูงสุดต่อกระบวนการdaemon
— เรียกใช้กระบวนการเป็นภูต
ค่าเริ่มต้น บล็อก. บล็อกนี้ตั้งค่าพารามิเตอร์เริ่มต้นสำหรับส่วนอื่น ๆ ทั้งหมดที่ตามมา:
log
— เซ็ตว่าบันทึกใดเป็นรายการที่เขียนถึง (ในกรณีนี้ global หมายความว่าใช้พารามิเตอร์ที่ตั้งค่าในส่วนโกลบอล)mode
— ตั้งค่าโปรโตคอลการสื่อสารและมีค่าใดค่าหนึ่งต่อไปนี้:tcp, http หรือ healthretries
— จำนวนครั้งในการพยายามเชื่อมต่อกับเซิร์ฟเวอร์ในกรณีที่เกิดความล้มเหลวoption httplog
— รูปแบบบันทึกที่ใช้หาก HAProxy กำลังพร็อกซีคำขอ HTTPoption redispatch
— อนุญาตให้โปรแกรมยุติและส่งเซสชันซ้ำในกรณีที่เซิร์ฟเวอร์ล้มเหลวcontimeout
— เวลารอสูงสุดจนกว่าการเชื่อมต่อกับเซิร์ฟเวอร์จะสำเร็จ
นอกจากนี้ยังมีพารามิเตอร์มากมายที่เกี่ยวข้องกับการหมดเวลาที่แตกต่างกัน
กำลังรวบรวมสถิติ HAProxy
เพิ่มบล็อกสถิติไปยังไฟล์การกำหนดค่า:
ฟังสถิติผูก :10001 สถิติเปิดใช้งานสถิติ uri /haproxy_stats สถิติ auth admin:admin
Description:
bind
– พอร์ตที่คุณสามารถดูสถิติได้stats enable
– เปิดใช้งานรายงานสถิติstats uri
– ตั้งค่าที่อยู่หน้าสถิติstats auth
– เข้าสู่ระบบและรหัสผ่านเพื่อเข้าถึง
ยอมรับการเชื่อมต่อขาเข้าบนพอร์ตที่ระบุข้างต้นในไฟร์วอลล์ของคุณ:
firewall-cmd --permanent –add-port=10001/tcp
firewall-cmd –reload
หากต้องการดูรายงาน HAProxy ให้ไปที่ลิงก์นี้:
https://hostname_haproxy:10001/haproxy_stats
เปิดที่อยู่ IP ของบาลานเซอร์ในเบราว์เซอร์ของคุณและเริ่มกด F5 . สถิติ HAproxy จะเปลี่ยนไป
ในบทความนี้ เราได้พิจารณาการกำหนดค่า HAProxy พื้นฐานแล้ว มีหลายกรณีในการใช้โมดูล HAProxy
ในสคีมาของเรา เซิร์ฟเวอร์ HAProxy ที่ทำโหลดบาลานซ์จะกลายเป็นจุดล้มเหลวเพียงจุดเดียว เพื่อเพิ่มความทนทานต่อข้อบกพร่องของบริการเว็บของคุณ คุณสามารถเพิ่มเซิร์ฟเวอร์ HAProxy อื่นและใช้การกำหนดค่าตัวโหลดบาลานซ์ที่มีความพร้อมใช้งานสูงโดยใช้ Keepalived คุณจะได้สคีมาแบบนี้: