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

เท่านี้ระบบของเราก็พร้อมทำงานแล้วครับ :)



Home | Back