in How-to

Load Balance ให้ Apache โดยใช้ DNS Round Robin

บังเอิญมีปัญหาเรื่องเซิร์ฟเวอร์ตายบ่อยๆ เพราะคนเข้าเว็บเยอะจนล้น แก้ปัญหาโดยการบีบโดนการใช้ mod_cband ไม่ได้ผลเพราะจะไม่มีใครเข้าเว็บได้เลย ซึ่งอาการหนักพอสมควร กรณีนี้แก้ไขได้โดยใช้ load balancing แต่ขึ้นอยู่ว่าจะ load balance ที่ไหน มาทำความเข้าใจปัญหากันก่อนครับ ตอนนี้ Web Server มีตัวเดียว เครื่องเซิร์ฟเวอร์รองรับ load ไม่ได้มากนัก CPU/RAM เต็มบ่อยๆ จนนิ่ง ปรับแก้ไข Config แล้วก็ตายเช่นเดิม ดังนั้นแก้ไขโดนการเพิ่มเซิร์ฟเวอร์เข้าไปอีก ในกรณีนี้เลือกวิธี load balancing ที่ง่ายสุดคือใช้ DNS load balancing คือ เป็นเว็บเดียวกันแต่มีหลายเครื่องและบอก DNS ว่ามีเซิร์ฟเวอร์หลายเครื่อง หมุน IP Address เอา ลองดูตัวอย่าง Google กัน

host www.google.com

www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.181.105
www.l.google.com has address 64.233.181.106
www.l.google.com has address 64.233.181.147
www.l.google.com has address 64.233.181.99
www.l.google.com has address 64.233.181.103
www.l.google.com has address 64.233.181.104

จาก ข้อมูลข้างต้น www.google.com มี aliase อยู่ 6 ตัว ถ้าคุณเข้า www.google.com มันก็จะหมุน IP Address ให้เราใหม่ให้ลองใช้คำสั่ง host www.google.com อีกครั้งคุณจะได้ข้อมูลดังนี้

host www.google.com

www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.181.106
www.l.google.com has address 64.233.181.105
www.l.google.com has address 64.233.181.104
www.l.google.com has address 64.233.181.103
www.l.google.com has address 64.233.181.99
www.l.google.com has address 64.233.181.147

# host www.google.com

www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.181.103
www.l.google.com has address 64.233.181.99
www.l.google.com has address 64.233.181.147
www.l.google.com has address 64.233.181.106
www.l.google.com has address 64.233.181.105
www.l.google.com has address 64.233.181.104

จะ เห็นว่า IP Address จะหมุนเป็น Round Robin ซึ่งเครื่อง client ก็จะเลือก IP Address ที่อยู่อันดับแรกเสมอ นั่นคือเวลาเราเข้าเว็บ www.google.com ในแต่ละครั้งเรียกเว็บเซิร์ฟเวอร์คนละตัวกันแต่หน้าเว็บเหมือนกัน ซึ่งเป็นการกระจาย load ให้เว็บเซิร์ฟเวอร์อย่างง่ายๆ ไม่ต้องคิดมาก :) วิธีการตั้งค่า DNS Load balancing มีดังนี้

www        60    IN    10.1.1.111
www        60    IN    10.1.1.112
www        60    IN    10.1.1.113
www        60    IN    10.1.1.114
www        60    IN    10.1.1.115
www        60    IN    10.1.1.116

หรือตั้งค่าแบบนี้ก็ได้ผลเช่นเดียวกัน

www        60    IN    10.1.1.111
               60    IN    10.1.1.112
               60    IN    10.1.1.113
               60    IN    10.1.1.114
               60    IN    10.1.1.115
               60    IN    10.1.1.116

ทีนี้ เราก็กระจาย load ของเว็บเซิร์ฟเวอร์ได้แล้ว แต่กรณีนี้ไม่ได้แก้ปัญหา fail over นะครับ มาดูกรณีที่เป็นปัญหากันครับ หากเว็บเซิร์ฟเวอร์ตายไปสักตัวนึงใน 6 ตัวนี้แล้ว ผู้ใช้โชคดีได้ IP Address ของเว็บเซิร์ฟเวอร์ที่ตาย ก็จะเข้าหน้าเว็บไม่ได้นั่นไง ดังนั้นกรณีนี้ต้อง monitor เครื่องเว็บเซิร์ฟเวอร์ให้อยู่ในดีมีสุขอยู่เสมอ เพราะถึงมีเว็บเซิร์ฟเวอร์ มากขึ้นแต่โอกาสที่จะเข้าเว็บแล้วเจอเว็บเซิร์ฟเวอร์ที่ตายก็ยังมีอยู่ แต่อย่างน้อยก็กระจาย load ได้ครับ