การทำ load balance สามารถทำได้หลากหลายวิธี ไม่ว่าจะเป็นการใช้ DNS ในลักษณะแบบ round robin (มี A record หลายอัน) หรือจะเป็นการใช้ Load Balancer เช่น HAProxy หรือ Ultra Monkey ในที่นี้เราจะลองทำ Load Balance WordPress โดยการทำ DNS และ Load Balancer (HAProxy)

DNS Round Robin


ตามปกติแล้ว 1 domain name จะมีแค่ 1 ip address แต่ในการทำ DNS Round Robin ใน 1 domain name จะมีหลาย ip address สามารถทดลองได้โดยการทำ nslookup หรือ ลอง ping ไปยัง domain นั้นหลายๆรอบ จะเห็นว่า ip ที่เรา ping ไปแต่ละรอบนั้นไม่เหมือนกัน (ลองกับ facebook หรือ google ก็ได้)

ข้อดีของการทำ Load Balance แบบนี้คือ ง่าย ไม่ซับซ้อน แต่ข้อเสียคือการกระจาย Load ออกไปแต่ละเครื่องอาจจะไม่เท่ากันเพราะ Client เชื่อมต่อกับเครื่อง server โดยตรงและใน browser ส่วนใหญ่จะมีการ cache เก็บ ip address ไว้ ทำให้ client เชื่อมต่อกับเครื่องนั้นเครื่องเดียว

Load Balancer (HAProxy)

  192.168.1.1    192.168.1.11-192.168.1.14   192.168.1.2
 -------+-----------+-----+-----+-----+--------+----
        |           |     |     |     |       _|_db
     +--+--+      +-+-+ +-+-+ +-+-+ +-+-+    (___)
     | LB1 |      | A | | B | | C | | D |    (___)
     +-----+      +---+ +---+ +---+ +---+    (___)
     haproxy        4 cheap web servers

หลักการ ทำงานคือ Client จะทำการเชื่อมต่อเข้ามาผ่าน LoadBalancer (LB1) ทาง port 80 เช่น http://www.example.com แล้ว LB1 จะทำการกระจาย connection ออกไปยัง web server
[A,B,C,D] ที่มี webserver รอรับ connection อยู่ port 80 เช่นกัน ซึ่งมี Content เหมือนกันทั้งหมดทุกเครื่อง ซึ่งอาจจะใช้ NFS หรือ rsync ระหว่างกันก็ได้
ซึ่ง ในกรณีนี้เครื่องที่ทำหน้าที่เป็น LB1 ไม่จำเป็นต้องมีความเร็วสูงมากเท่ากับเครื่อง web server จากการทดสอบด้วย vmware 1 cpu ram 256 เครื่อง LB1 สามารถรับ 200 concurrent connection
ได้สบายมากจนเครื่อง web server 2 เครื่อง ram 384 (Apache 2) ตายไปหมดก่อน (out of memory)
อ้างอิง: http://haproxy.1wt.eu/download/1.2/doc/architecture.txt

Memcached
เป็น อีกส่วนหนึ่งที่ขาดไม่ได้ถ้าจะทำการ Load Balance กับ wordpress เนื่องจากการทำงานของ wordpress อาศัย session ซึ่งมีอยู่เฉพาะเครื่องเท่านั้น ไม่สามารถถ่ายโอนไปยังเครื่องอื่นได้ โดย memcache จะเป็นตัวช่วยของเราในการแชร์
session ระหว่าง web server โดย memcache นี้จะต้องติดตั้งให้เป็น module ของ apache

Configuration
– DNS (bind)
www  IN  A 192.168.1.11 ;web1
IN  A 192.168.1.12 ;web2

– Memcache
ดู ที่นี่

HAProxy
ให้ทำการเซท DNS
www IN A 192.168.1.1 ; เครื่อง Load Balancer
แล้วเปลี่ยนไฟล์คอนฟิกของ HAProxy

balance leastconn
stats enable
stats auth user:password
server server1 192.168.1.11:80 check
server server2 192.168.1.12:80 check
สั่ง service ให้รันด้วย haproxy -f haproxy.cfg