เมื่อปริมาณ traffic ของ web server เพิ่มมากขึ้น และไม่สามารถเพิ่มทรัพยากรหรือไม่สามารถขยาย web server ได้แล้ว เทคนิคที่มักนำมาใช้กันคือ การ scale out หรือ การเพิ่มจำนวน web server ออกตามแนวราบ (horizontal scaling) ซึ่งเมื่อมีการเพิ่มจำนวน web server ก็ต้องมีด่านหน้าที่ทำหน้าที่กระจาย traffic ไปยัง web server เครื่องต่างๆ

สำหรับในบทความนี้ จะนำเสนอการติดตั้ง haproxy เพื่อนำมาใช้เป็น load balancer หรือตัวกระจาย load ไปยัง web server หลายๆ เครื่อง ซึ่งแน่นอนว่า ทั้ง load balancer และ web server ทั้งหมด สามารถติดตั้งบน Cloud ของ HostPacific ได้

จากขั้นตอนตัวอย่างต่อไปนี้ จะประกอบด้วย Cloud จำนวน 3 ตัว (หรือ Server 3 เครื่อง) คือ

  • 1+2) www01:10.0.1.46 และ www02:10.0.1.47 ทำหน้าที่ web server ซึ่งมีการติดตั้ง Apache / PHP เรียบร้อยแล้ว 
  • 3) haproxy:10.0.1.45 สำหรับติดตั้ง haproxy ซึ่งเริ่มต้นจะมี Centos และ package พื้นฐานเท่านั้น

การติดตั้ง web server บน vm1 และ vm2

การติดตั้ง haproxy บน vm3

  • build Cloud โดยใช้ CentOS7
  • update package เบื้องต้นต่างๆ ให้เรียบร้อย โดยใช้คำสั่ง

  • ติดตั้ง haproxy

  • ตรวจสอบ version หลังจากที่ดำเนินการติดตั้งเรียบร้อย

การ config haproxy

สำหรับ config ไฟล์ของ /etc/haproxy/haproxy.cfg จะแบ่งส่วน ออกเป็น

  • global: เป็นเหมือนค่า config กลาง ซึ่งบางส่วนเป็นค่า default ที่ไม่จำเป็นต้องเปลี่ยน แต่บางส่วนปรับเปลี่ยนได้ตามการใช้งาน

จากตัวอย่าง จะมีการทำงานด้วย user และ group ของ haproxy ซึ่งถูกสร้างเมื่อมีการติดตั้ง ทั้งนี้เพื่อความปลอดภัยในการใช้งาน ในส่วนนี้สามารถกำหนดสิทธ์ต่างๆ แยกจาก user อื่น ๆ ของระบบได้

  • defaults: เป็นค่า default สำหรับการใช้งานในส่วน section ต่างๆ ถัดจาก config ในส่วนนี้ไป
  • frontend: เป็นส่วนกำหนดการเปิด socket ซึ่งจะมีการรับค่าการเชื่อมต่อจากเครื่อง client
  • backend: เป็นส่วนกำหนดเครื่อง web server เพื่อให้ haproxy forward การเชื่อมต่อจาก client ไปยัง web server ที่อยู่ด้านหลัง
  • stats: เป็น option เพิ่มเติม โดยหน้า web tool จะเป็นการใช้งานสำหรับการตรวจสอบเครื่อง load balancer และ node ต่างๆ

เริ่มต้นการปรับไฟล์ configuration

ก่อนเริ่มดำเนินการแก้ไขไฟล์ config ควรมีการ backup ไว้เสมอๆ เพื่อป้องการความผิดพลาดที่อาจจะเกิดขึ้น

 

เมื่อกำหนดค่าแล้ว ให้ดำเนินการบันทึกไฟล์

ส่วนต่อไปจะเป็นการกำหนดค่าการเก็บ log ที่ /var/log/haproxy.log  

1)  เปิดการใช้งานค่า ModLoad และ UDPServerRun ตามตัวอย่างด้านล่างนี้

เมื่อกำหนดค่าแล้ว ให้เซฟไฟล์

2) สร้างไฟล์ ชื่อ haproxy.conf

เมื่อกำหนดค่าแล้ว ให้เซฟไฟล์

ตรวจสอบความถูกต้องของไฟล์ config อีกครั้ง และ restart service ที่เกี่ยวข้องหลังจากที่มีการแก้ไข

 

การปรับ config เพิ่มเติมที่ web server

เนื่องจาก web server แต่ละตัวจะเห็น IP ที่เรียกเข้ามา จาก haproxy ข้างหน้า ทำให้ไม่สามารถดูที่มาของ traffic ที่แท้จริงใน access_log ได้ จึงต้องแก้ไข config การเก็บ log บน web server ให้แสดงที่มา IP ต้นทางที่แท้จริงด้วย โดยแก้ไขจากบรรทัด LogFormat

เมื่อกำหนดค่าแล้ว ให้เซฟไฟล์ และ restart service httpd

 

เมื่อทดสอบใช้งาน โดยเรียก IP ของ haproxy คือ 10.0.1.45 จะแสดง ตามตัวอย่างด้านล่างนี้ ซึ่งมาจาก web server 2 ตัว สลับกันไป

เราสามารถตรวจสอบ access_log ได้จาก /var/log/httpd/access_log ของ web server ทั้ง 2 เครื่อง (จากกรณีนี้ IP เครื่อง client คือ 10.0.1.35)

Web server: Site1

 

Web server: Site2

ซึ่งจะเห็น IP ของ client ที่แท้จริง ใน web server ทั้ง 2 ตัว

และสามารถตรวจสอบ haproxy log ได้จาก /var/log/haproxy.log ในเครื่อง load balancer

ซึ่งจะสังเกตเห็นบันทึกว่า traffic แต่ละครั้ง ถูก forward ไปยัง backend ตัวไหน (www01 หรือ www02)

การตรวจสอบ stats ของ haproxy

สามารถตรวจสอบได้จาก http://10.0.1.45/stats

Default Username: haproxy
Default Password: HAPROXY

ข้อควรทราบเพิ่มเติม

  • เพื่อประสิทธิที่เพิ่มขึ้น ควรเชื่อมต่อ haproxy และ web server ต่างๆ ผ่านทาง private network
  • ข้อมูลเพิ่มเติม http://www.haproxy.org และ http://haproxy.com/

 

Reference เพิ่มเติม:

การแก้ไข haproxy ไม่ยอม auto-start ผ่าน systemd

Share this:Share on FacebookTweet about this on TwitterShare on Google+Pin on Pinterest