การติดตั้งโหลดบาลานเซอร์ HAProxy บน CentOS

การแปลบทความจัดทำขึ้นในวันเริ่มต้นหลักสูตร “ผู้ดูแลระบบลินุกซ์ การจำลองเสมือนและการจัดกลุ่ม"

การติดตั้งโหลดบาลานเซอร์ HAProxy บน CentOS

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

HAProxy มุ่งมั่นที่จะเพิ่มประสิทธิภาพการใช้ทรัพยากร เพิ่มปริมาณงาน ลดเวลาตอบสนอง และหลีกเลี่ยงการโอเวอร์โหลดทรัพยากรแต่ละรายการ สามารถติดตั้งได้บน Linux หลากหลายรุ่น เช่น CentOS 8 ซึ่งเราจะเน้นในคู่มือนี้ รวมไปถึงระบบต่างๆ Debian 8 и อูบุนตู 16.

การติดตั้งโหลดบาลานเซอร์ HAProxy บน CentOS

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

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

การติดตั้ง HAProxy บน CentOS 8

เนื่องจาก HAProxy เป็นแอปพลิเคชันโอเพ่นซอร์สที่มีการพัฒนาอย่างรวดเร็ว การเผยแพร่ที่มีให้คุณในคลัง CentOS มาตรฐานจึงอาจไม่ใช่เวอร์ชันล่าสุด หากต้องการค้นหาเวอร์ชันปัจจุบัน ให้รันคำสั่งต่อไปนี้:

sudo yum info haproxy

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

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

sudo yum install gcc pcre-devel tar make -y

ดาวน์โหลดซอร์สโค้ดโดยใช้คำสั่งด้านล่าง คุณสามารถตรวจสอบได้ว่ามีเวอร์ชันใหม่กว่านี้หรือไม่ หน้าดาวน์โหลด HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

เมื่อการดาวน์โหลดเสร็จสิ้น ให้แตกไฟล์โดยใช้คำสั่งด้านล่าง:

tar xzvf ~/haproxy.tar.gz -C ~/

ไปที่ไดเร็กทอรีต้นทางที่คลายการแพ็ก:

cd ~/haproxy-2.0.7

จากนั้นรวบรวมโปรแกรมสำหรับระบบของคุณ:

make TARGET=linux-glibc

และสุดท้าย ติดตั้ง HAProxy เอง:

sudo make install

ตอนนี้ติดตั้ง HAProxy แล้ว แต่ต้องมีการปรับแต่งเพิ่มเติมเพื่อให้สามารถใช้งานได้ มาตั้งค่าซอฟต์แวร์และบริการด้านล่างนี้ต่อไป

การตั้งค่า HAProxy สำหรับเซิร์ฟเวอร์ของคุณ

ตอนนี้เพิ่มไดเร็กทอรีและไฟล์สถิติต่อไปนี้สำหรับรายการ HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

สร้างลิงก์สัญลักษณ์สำหรับไบนารีเพื่อให้คุณสามารถรันคำสั่ง HAProxy ในฐานะผู้ใช้ทั่วไปได้:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

หากคุณต้องการเพิ่มพร็อกซีให้กับระบบของคุณเป็นเซอร์วิส ให้คัดลอกไฟล์ haproxy.init จากตัวอย่างไปยังไดเร็กทอรี /etc/init.d ของคุณ แก้ไขการอนุญาตไฟล์เพื่อให้สคริปต์ทำงาน จากนั้นรีสตาร์ท systemd daemon:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

คุณต้องอนุญาตให้บริการรีสตาร์ทโดยอัตโนมัติเมื่อระบบเริ่มทำงาน:

sudo chkconfig haproxy on

เพื่อความสะดวก ขอแนะนำให้เพิ่มผู้ใช้ใหม่เพื่อรัน HAProxy:

sudo useradd -r haproxy

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

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

ในกรณีของเรา เวอร์ชันควรเป็น 2.0.7 ดังที่แสดงในตัวอย่างเอาต์พุตด้านบน

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

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

การตั้งค่าโหลดบาลานเซอร์

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

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

โหลดบาลานซ์ที่เลเยอร์การขนส่ง (เลเยอร์ 4)

เริ่มจากการตั้งค่าพื้นฐานกันก่อน สร้างไฟล์ปรับแต่งใหม่ เช่น การใช้ vi ด้วยคำสั่งด้านล่าง:

sudo vi /etc/haproxy/haproxy.cfg

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

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

สิ่งนี้จะกำหนดโหลดบาลานเซอร์ของเลเยอร์การขนส่ง (เลเยอร์ 4) ที่ชื่อภายนอก http_front กำลังฟังบนพอร์ต 80 ซึ่งจะส่งต่อการรับส่งข้อมูลไปยังแบ็กเอนด์เริ่มต้นที่ชื่อ http_back สถิติเพิ่มเติม /haproxy?stats เชื่อมต่อหน้าสถิติกับที่อยู่ที่ระบุ

อัลกอริธึมการปรับสมดุลโหลดต่างๆ

การระบุเซิร์ฟเวอร์ในส่วนแบ็กเอนด์ทำให้ HAProxy สามารถใช้เซิร์ฟเวอร์เหล่านี้สำหรับการทำโหลดบาลานซ์ตามอัลกอริธึมแบบ Round-Robin เมื่อเป็นไปได้

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

  • ราวด์โรบิน: แต่ละเซิร์ฟเวอร์จะถูกใช้งานตามลำดับตามน้ำหนักของมัน นี่เป็นอัลกอริธึมที่ราบรื่นและยุติธรรมที่สุดเมื่อเวลาการประมวลผลของเซิร์ฟเวอร์ยังคงกระจายเท่าๆ กัน อัลกอริธึมนี้เป็นแบบไดนามิก ช่วยให้สามารถปรับน้ำหนักของเซิร์ฟเวอร์ได้ทันที
  • อย่างน้อยที่สุด: เลือกเซิร์ฟเวอร์ที่มีการเชื่อมต่อน้อยที่สุด Round Robin จะดำเนินการระหว่างเซิร์ฟเวอร์ที่มีโหลดเท่ากัน ขอแนะนำให้ใช้อัลกอริทึมนี้สำหรับเซสชันยาว เช่น LDAP, SQL, TSE ฯลฯ แต่ไม่เหมาะมากสำหรับเซสชันสั้นๆ เช่น HTTP
  • ครั้งแรก: เซิร์ฟเวอร์เครื่องแรกที่มีช่องการเชื่อมต่อที่ใช้ได้จะได้รับการเชื่อมต่อ เซิร์ฟเวอร์จะถูกเลือกจาก ID ตัวเลขต่ำสุดไปจนถึงสูงสุด ซึ่งเป็นค่าเริ่มต้นที่ตำแหน่งของเซิร์ฟเวอร์ในฟาร์ม เมื่อเซิร์ฟเวอร์ถึง maxconn เซิร์ฟเวอร์ถัดไปจะถูกนำมาใช้
  • ที่มา: ที่อยู่ IP ต้นทางจะถูกแฮชและหารด้วยน้ำหนักรวมของเซิร์ฟเวอร์ที่ทำงานอยู่เพื่อกำหนดว่าเซิร์ฟเวอร์ใดจะได้รับคำขอ ด้วยวิธีนี้ ที่อยู่ IP ไคลเอนต์เดียวกันจะไปที่เซิร์ฟเวอร์เดียวกันเสมอ ในขณะที่เซิร์ฟเวอร์ยังคงเหมือนเดิม

การตั้งค่าสมดุลโหลดในระดับแอปพลิเคชัน (เลเยอร์ 7)

อีกทางเลือกหนึ่งที่ใช้ได้คือการกำหนดค่าโหลดบาลานเซอร์ให้ทำงานที่เลเยอร์แอปพลิเคชัน (เลเยอร์ 7) ซึ่งมีประโยชน์เมื่อบางส่วนของแอปพลิเคชันเว็บของคุณอยู่บนโฮสต์ที่แตกต่างกัน ซึ่งสามารถทำได้โดยการควบคุมปริมาณการส่งข้อมูลการเชื่อมต่อ เช่น โดย URL

เปิดไฟล์คอนฟิกูเรชัน HAProxy โดยใช้โปรแกรมแก้ไขข้อความ:

sudo vi /etc/haproxy/haproxy.cfg

จากนั้นกำหนดค่าส่วนหน้าและส่วนหลังตามตัวอย่างด้านล่าง:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

ส่วนหน้าจะประกาศกฎ ACL ที่เรียกว่า url_blog ซึ่งใช้กับการเชื่อมต่อทั้งหมดที่มีเส้นทางขึ้นต้นด้วย /blog Use_backend ระบุว่าการเชื่อมต่อที่ตรงกับเงื่อนไข url_blog ควรให้บริการโดยแบ็กเอนด์ชื่อ blog_back และคำขออื่นๆ ทั้งหมดได้รับการจัดการโดยแบ็กเอนด์เริ่มต้น

ที่ฝั่งแบ็คเอนด์ การกำหนดค่าจะตั้งค่าเซิร์ฟเวอร์สองกลุ่ม: http_back เหมือนเมื่อก่อน และกลุ่มใหม่ที่เรียกว่า blog_back ซึ่งจัดการการเชื่อมต่อกับ example.com/blog

หลังจากเปลี่ยนการตั้งค่า ให้บันทึกไฟล์และรีสตาร์ท HAProxy โดยใช้คำสั่งต่อไปนี้:

sudo systemctl restart haproxy

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

กำลังทดสอบการตั้งค่า

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

http://load_balancer_public_ip/haproxy?stats

เมื่อคุณโหลดหน้าสถิติ หากเซิร์ฟเวอร์ทั้งหมดของคุณแสดงเป็นสีเขียว แสดงว่าการตั้งค่าสำเร็จ!

การติดตั้งโหลดบาลานเซอร์ HAProxy บน CentOS

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

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

sudo systemctl status haproxy

การป้องกันหน้าสถิติด้วยรหัสผ่าน

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

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

หลังจากเพิ่มกลุ่ม Listener ใหม่แล้ว ให้ลบลิงก์ uri สถิติเก่าออกจากกลุ่มส่วนหน้า เมื่อเสร็จแล้ว ให้บันทึกไฟล์และรีสตาร์ท HAProxy

sudo systemctl restart haproxy

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

http://load_balancer_public_ip:8181

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

http://load_balancer_public_ip/

หากคุณมีหน้า Landing Page ที่หลากหลายบนเซิร์ฟเวอร์แบ็คเอนด์ คุณจะสังเกตได้ว่าทุกครั้งที่คุณโหลดหน้าซ้ำ คุณจะได้รับการตอบกลับจากโฮสต์อื่น คุณสามารถลองใช้อัลกอริธึมการปรับสมดุลแบบต่างๆ ได้ในส่วนการกำหนดค่าหรือลองดู เอกสารครบถ้วน.

สรุป: โหลดบาลานเซอร์ HAProxy

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

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

ข้อมูลเพิ่มเติมเกี่ยวกับหลักสูตร “ผู้ดูแลระบบลินุกซ์ การจำลองเสมือนและการจัดกลุ่ม"***

ที่มา: will.com

เพิ่มความคิดเห็น