บทช่วยสอนสำหรับผู้เริ่มต้น HAProxy

Bth Chwy Sxn Sahrab Phu Reim Tn Haproxy



เมื่อแอปพลิเคชันของคุณขยายตัว จำเป็นต้องเพิ่มเซิร์ฟเวอร์เพื่อรองรับการรับส่งข้อมูลมากขึ้น ยิ่งแอปพลิเคชันของคุณได้รับปริมาณข้อมูลมากเท่าใด โอกาสที่จะเกิดปัญหาการหยุดทำงานเมื่อเซิร์ฟเวอร์โอเวอร์โหลดก็จะยิ่งมากขึ้นเท่านั้น อย่างไรก็ตาม มีเครื่องมือต่างๆ เช่น HAProxy ที่ช่วยให้คุณกำหนดวิธีจัดการการรับส่งข้อมูลเพื่อสร้างสมดุลระหว่างโหลดบนเซิร์ฟเวอร์ของคุณ แนวคิดก็คือเพื่อให้แน่ใจว่าไม่มีเซิร์ฟเวอร์ใดทำงานหนักเกินไป High Availability Proxy เป็นซอฟต์แวร์โอเพ่นซอร์สที่ออกแบบมาเพื่อให้สมดุลโหลดที่เชื่อถือได้ ในขณะเดียวกันก็ทำหน้าที่เป็นพร็อกซีย้อนกลับสำหรับแอปพลิเคชัน TCP/HTTP

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

ทำไมต้องใช้ HAProxy

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







  1. โหลดบาลานซ์ – ด้วย HAProxy คุณสามารถกระจายการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ต่างๆ ได้อย่างสะดวกสบาย เพื่อหลีกเลี่ยงการโหลดเซิร์ฟเวอร์เดียวมากเกินไป ด้วยวิธีนี้ แอปพลิเคชันของคุณจะไม่ประสบปัญหาการหยุดทำงานใดๆ และคุณจะได้รับการตอบสนอง ความน่าเชื่อถือ และความพร้อมใช้งานที่รวดเร็วยิ่งขึ้น
  2. การบันทึกและการตรวจสอบ – คุณจะได้รับบันทึกการตรวจสอบโดยละเอียดสำหรับเซิร์ฟเวอร์ของคุณเพื่อช่วยในการแก้ไขปัญหา นอกจากนี้ HAProxy ยังมีหน้าสถิติที่คุณสามารถรับการวิเคราะห์ประสิทธิภาพแบบเรียลไทม์สำหรับโหลดบาลานเซอร์ของคุณ
  3. ตรวจสุขภาพ – แม้แต่เซิร์ฟเวอร์ของคุณก็ยังต้องมีการตรวจสอบสภาพเพื่อระบุสถานะ HAProxy ดำเนินการตรวจสอบสภาพบ่อยครั้งเพื่อทราบสถานะของเซิร์ฟเวอร์ของคุณเพื่อเพิ่มความน่าเชื่อถือ หากตรวจพบเซิร์ฟเวอร์ที่ไม่ดี ระบบจะกำหนดเส้นทางการรับส่งข้อมูลไปยังเซิร์ฟเวอร์อื่น
  4. พร็อกซีย้อนกลับ – วิธีหนึ่งในการเพิ่มความปลอดภัยคือการซ่อนโครงสร้างภายใน โชคดีที่ HAProxy ช่วยให้คุณรับปริมาณการใช้งานจากไคลเอนต์และกำหนดเส้นทางไปยังเซิร์ฟเวอร์ที่เหมาะสม ด้วยวิธีนี้ โครงสร้างภายในของคุณจะถูกซ่อนจากสายตาของแฮ็กเกอร์
  5. ACL (รายการควบคุมการเข้าถึง) – ด้วย HAProxy คุณสามารถกำหนดได้ว่าการกำหนดเส้นทางการรับส่งข้อมูลควรเกิดขึ้นอย่างไรโดยใช้เกณฑ์ต่างๆ เช่น เส้นทาง ส่วนหัว และที่อยู่ IP ดังนั้น การกำหนดลอจิกการกำหนดเส้นทางแบบกำหนดเองสำหรับการรับส่งข้อมูลของคุณจึงง่ายขึ้น
  6. การยกเลิก SSL – ตามค่าเริ่มต้น SSL/TLS จะถูกออฟโหลดโดยเซิร์ฟเวอร์แบ็กเอนด์ ซึ่งทำให้ประสิทธิภาพลดลง อย่างไรก็ตาม เมื่อใช้ HAProxy การยกเลิก SSL/TLS จะเกิดขึ้นที่โหลดบาลานเซอร์ เป็นการถ่ายงานในเซิร์ฟเวอร์แบ็กเอนด์

การติดตั้ง HAProxy

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



หากคุณใช้ระบบ Ubuntu หรือ Debian สามารถติดตั้ง HAProxy ได้จากตัวจัดการแพ็คเกจ APT รันคำสั่งต่อไปนี้:



$ sudo apt อัปเดต
$ sudo apt ติดตั้ง haproxy

ในทำนองเดียวกัน หากคุณใช้ระบบที่ใช้ RHEL หรือ CentOS HAProxy จะพร้อมใช้งานจากตัวจัดการแพ็คเกจ “yum” รันคำสั่งต่อไปนี้:





$ sudo yum อัปเดต
$ sudo yum ติดตั้ง haproxy

ในกรณีของเรา เราใช้ Ubuntu ดังนั้นเราจึงมีคำสั่งดังนี้:



จากนั้นเราจะตรวจสอบเวอร์ชันเพื่อให้แน่ใจว่าเราติดตั้ง HAProxy ได้สำเร็จ

$ haproxy --version

วิธีการกำหนดค่า HAProxy.mq4

เมื่อติดตั้ง HAProxy คุณสามารถเปิดไฟล์ปรับแต่งได้แล้ว ( / etc/haproxy/haproxy.cfg) และกำหนดการตั้งค่าที่คุณต้องการใช้สำหรับโหลดบาลานเซอร์ของคุณ

เปิดไฟล์กำหนดค่าโดยใช้โปรแกรมแก้ไข เช่น nano หรือ vim

$ sudo นาโน /etc/haproxy/haproxy.cfg

คุณได้รับไฟล์ปรับแต่งดังต่อไปนี้:

จากไฟล์ปรับแต่ง คุณจะสังเกตเห็นว่ามันมาพร้อมกับสองส่วนหลัก:

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

นี่คือตัวอย่างของส่วน 'ค่าเริ่มต้น':

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

มีอีกสามส่วนที่คุณควรกำหนดเพื่อให้โหลดบาลานเซอร์ของคุณทำงานตามที่คาดไว้

  1. ส่วนหน้า – ส่วนนี้ประกอบด้วยที่อยู่ IP ที่คุณต้องการให้ลูกค้าของคุณใช้เพื่อสร้างการเชื่อมต่อ
  2. แบ็กเอนด์ – มันแสดงพูลเซิร์ฟเวอร์ที่จัดการคำขอตามที่กำหนดไว้ในส่วนส่วนหน้า
  3. ฟัง - มันถูกใช้อย่างต่อเนื่องเมื่อคุณต้องการกำหนดเส้นทางกลุ่มเซิร์ฟเวอร์เฉพาะ ส่วนนี้จะรวมงานของส่วนหน้าและส่วนหลังเข้าด้วยกัน

เรามีตัวอย่างกัน

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

ขั้นตอนที่ 1: การกำหนดค่าส่วนค่าเริ่มต้น

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

โปรดจำไว้ว่าการแก้ไขทั้งหมดนี้อยู่ในการกำหนดค่า HAProxy ซึ่งอยู่ที่ “/etc/haproxy/haproxy.cfg” เมื่อกำหนดค่าส่วนเริ่มต้นแล้ว เรามากำหนดส่วนหน้ากันดีกว่า

ขั้นตอนที่ 2: การกำหนดค่าส่วนหน้า

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

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

หลังจากเพิ่มบรรทัดก่อนหน้าในไฟล์ปรับแต่งแล้ว เราต้องรีสตาร์ท “haproxy.service” ด้วยคำสั่งต่อไปนี้:

$ sudo systemctl รีสตาร์ท haproxy

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

$ ขด <ที่อยู่ IP>

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

ขั้นตอนที่ 3: การกำหนดค่าแบ็กเอนด์

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

ข้อผิดพลาด 503 ที่เราได้รับก่อนหน้านี้เป็นเพราะเราไม่มีแบ็กเอนด์ที่จะจัดการกับคำขอ เริ่มต้นด้วยการกำหนด 'default_backend' เพื่อจัดการคำขอ คุณกำหนดไว้ในส่วนส่วนหน้า เราตั้งชื่อมันว่า 'linux_backend' สำหรับกรณีนี้

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

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

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

$ python3 -m http.server 8001 --bind 127.0.0.1

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

บนเทอร์มินัลอื่น ให้ใช้คำสั่ง 'curl' เพื่อส่งคำขอไปยังเซิร์ฟเวอร์

$ ขด <ที่อยู่ IP>

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

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

นั่นคือวิธีที่คุณสามารถตั้งค่า HAProxy แบบง่ายๆ สำหรับเว็บไซต์หรือแอปพลิเคชันของคุณ

การทำงานกับกฎเกณฑ์

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

ทำตามขั้นตอนเดียวกันกับก่อนหน้านี้ ปล่อยให้ส่วนเริ่มต้นของเราไม่เปลี่ยนแปลง และกำหนดที่อยู่ IP ที่แตกต่างกันในส่วนหน้า เราผูกที่อยู่ IP เดียวกัน แต่ยอมรับการเชื่อมต่อจากพอร์ตที่ต่างกัน

ยิ่งไปกว่านั้น เรามี “default_backend” และ “use_backend” อีกอันซึ่งเป็นกลุ่มเซิร์ฟเวอร์ที่แตกต่างกันที่เราจะใช้ ขึ้นอยู่กับพอร์ตที่คำขอมา ในการกำหนดค่าต่อไปนี้ คำขอทั้งหมดผ่านพอร์ต 81 ได้รับการจัดการโดยเซิร์ฟเวอร์ใน “Linux2_backend” คำขออื่นๆ ได้รับการจัดการโดย 'default_backend'

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

เริ่มบริการ HAProxy ใหม่อย่างรวดเร็ว

มาสร้างเว็บเซิร์ฟเวอร์โดยใช้ Python3 และผูกคำขอบนพอร์ต 8002 ซึ่งเป็นเซิร์ฟเวอร์แบ็กเอนด์สำรอง

เมื่อส่งคำขอ เราจะระบุพอร์ตเป็น 81 เพื่อทริกเกอร์โหลดบาลานเซอร์ให้ส่งคำขอไปยังเซิร์ฟเวอร์สำรองซึ่งไม่ใช่เซิร์ฟเวอร์เริ่มต้น

เมื่อตรวจสอบเว็บเซิร์ฟเวอร์ของเราอีกครั้ง เราจะเห็นว่าเว็บจัดการเพื่อรับและจัดการคำขอและให้การตอบกลับ 200 (สำเร็จ)

นั่นคือวิธีที่คุณสามารถกำหนดกฎเพื่อเป็นแนวทางว่าโหลดบาลานเซอร์ของคุณจะได้รับและจัดการคำขออย่างไร

บทสรุป

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