Home | Back
POUND Reverse-Proxy and Load-Balancer อันแข็งแกร่งและความเร็วเหนือนรก
Monday, 11 March 2013
ในการพัฒนา Web Application ด้วยเทคโนโลยี WSGIServer นั้น โดยปกติมักจะมี Front-end Webserver เพื่อเป็นตัวกระจายโหลด โดยในบทความอื่น ๆ ของผม จะมีการนำ Apache Web Server มาทำเป็นตัวกระจายโหลด ซึ่งตัว Apache นั้นจะเป็น Web Server แบบหนักและมีความสามารถอื่น ๆ มากมาย แต่เราเอามาใช้เพียงเป็นตัวกระจายโหลด จึงเหมือนกับขี่ช้างจับตั๊กแตน ทำให้การรองรับโหลดของระบบเราไม่สูงเท่าที่ควร ผมจึงแนะนำ POUND ซึ่งเป็น Reverse Proxy และ Load Balancer มาทำเป็น Front-end ให้กับ WSGIServer ซึ่งจะทำให้ระบบของเรารองรับโหลดได้ดียิ่งขึ้น โดยการใช้งานใน Ubuntu นั้น มีขั้นตอนดังนี้ครับ
1. ติดตั้ง POUND
$ sudo aptitude install pound
2. ปรับแต่งให้เป็น Load Balancer และรองรับ Virtual Host
ขั้นตอนต่อไปเป็นการปรับแต่งให้ POUND นั้นทำงานโดยอัตโนมัติ และปรับแต่งให้ทำงานเป็นตัวกระจายโหลด และรองรับการทำ Virtual Host ไปด้วย โดยเราจะทำการแก้ไขไฟล์ /etc/default/pound โดยแก้ไขข้อความ startup=0 ให้เป็น startup=1 เพื่อให้เมื่อมีการรีบูตเครื่องแล้ว POUND จะทำงานโดยอัตโนมัติ
File : /etc/default/pound
# Defaults for pound initscript
# sourced by /etc/init.d/pound
# installed at /etc/default/pound by the maintainer scripts
# prevent startup with default configuration
# set the below varible to 1 in order to allow pound to start
startup=1
จากนั้นก็แก้ไขไฟล์ /etc/pound/pound.cfg เพื่อทำการปรับแต่งให้เป็นตัวกระจายโหลด โดยสมมุติว่ามี WSGIServer จำนวน 3 ตัว ทำงานเป็น Back End อยู่ที่เครื่อง 127.0.0.1 และรอรับงานที่พอร์ต 8990 8991 และ 8992 โดยให้รองรับ Virtual Host ชื่อ www.data.com เราสามารถดำเนินการได้ดังนี้ครับ
File : /etc/pound/pound.cfg
## Minimal sample pound.cfg
##
## see pound(8) for details
######################################################################
## global options:
User "www-data"
Group "www-data"
#RootJail "/chroot/pound"
## Logging: (goes to syslog by default)
## 0 no logging
## 1 normal
## 2 extended
## 3 Apache-style (common log format)
LogLevel 1
## check backend every X secs:
Alive 30
## use hardware-accelleration card supported by openssl(1):
#SSLEngine ""
# poundctl control socket
Control "/var/run/pound/poundctl.socket"
######################################################################
## listen, redirect and ... to:
## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
## เพื่อให้ pound รอรับ request ที่พอร์ต 80 จากทุก IP
Address 0.0.0.0
Port 80
## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
xHTTP 0
Service
## เพื่อสร้าง virtual host สำหรับ www.data.com
HeadRequire "Host: .*www.data.com.*"
## สร้าง Backend จำนวน 3 ตัว ที่พอร์ต 8990 8991 และ 8992 ที่ IP 127.0.0.1
BackEnd
Address 127.0.0.1
Port 8990
End
BackEnd
Address 127.0.0.1
Port 8991
End
BackEnd
Address 127.0.0.1
Port 8992
End
End
End
จากนั้นจึงทำการ start pound ขึ้นมาด้วยคำสั่ง
$ sudo service pound start
เท่านี้ระบบของเราก็พร้อมทำงานแล้วครับ :)