<![CDATA[
การสร้างคลัสเตอร์เว็บเซิร์ฟเวอร์
1.1 DNS round robin
1.2 Application Load Balancing
1.3 HTTP redirecting
1.4 Virtual IP addressing
วิธีสร้างคลัสเตอร์เว็บเซิร์ฟเวอร์ ที่นิยมทำกันมีดังต่อไปนี้
1.1 DNS Round Robin
ตามธรรมดา ชื่อเครื่อง 1 ชื่อ จะแปลงเป็นหมายเลขไอพี ได้ 1 เบอร์ เช่น www.ku.ac.th จะมีหมายเลขไอพีเป็น 158.108.2.71 แต่ในกรณีที่เราต้องการใช้จำนวนเว็บเซิร์ฟเวอร์ มากกว่า 1 เครื่องมาช่วยกันทำงาน เราสามารถ เพิ่มจำนวนเครื่องขึ้นมาได้ โดยแก้ที่ DNS server ให้แจกหมายเลขไอพี จำนวนหนึ่งเรียงตามลำดับ เช่น www.yahoo.com มีหมายเลขไอพี 204.71.200.74, 204.71.200.75, 204.71.200.67, 204.71.200.68 ซึ่งมีมากกว่า 1 หมายเลข เป็นไปได้ว่ามีเว็บเซิร์ฟเวอร์มากกว่า 1 เครื่องช่วยกันทำงาน หรืออย่าง www.cnn.com มีหมายเลข ไอพีมากกว่า 20 หมายเลข !
โดยวิธีนี้ DNS แจกหมายเลข IP เรียงตามลำดับกันไป เพียงแต่เพิ่มจำนวนเว็บเซิร์ฟเวอร์โดยให้ข้อมูลในทุกเซิร์ฟเวอร์ เหมือนกันหมด และเพิ่มหมายเลขไอพีของแต่ละเซิร์ฟเวอร์ลงใน DNS server ดังนี้
จากเดิม
www IN HINFO "www.ku.ac.th"
IN A 158.108.2.71
สมมุติว่าเราเพิ่มจำนวนเว็บเซิร์ฟเวอร์ขึ้นอีก 2 เครื่อง (158.108.2.72, 158.108.2.73)
www IN HINFO "www.ku.ac.th"
IN A 158.108.2.71
IN A 158.108.2.72
IN A 158.108.2.73
ภาพที่ 1 วิธี DNS Round Robin
เมื่อผู้ใช้ คนที่ 1 เปิดบราวเซอร์ และต้องการเข้าถึงข้อมูลที่อยู่ภายใน http://www.ku.ac.th ตัวบราวเซอร์จะ ถาม DNS server เพื่อแปลงจาก ชื่อเป็นหมายเลขไอพี DNS server จะตอบกลับเป็น IP หมายเลข 158.108.2.71
จากนั้นเมื่อผู้ใช้คนต่อมา ต้องการเข้าถึงข้อมูลเดียวกัน ตัวบราวเซอร์ของผู้ใช้คนต่อมา จำเป็นต้องถาม DNS server เพื่อแปลงจาก ชื่อเป็นหมายเลขไอพี เช่นเดียวกันกับบราวเซอร์ของผู้ใช้คนแรก คราวนี้ DNS server จะตอบกลับเป็น IP ถัดมา ซึ่งก็คือ 158.108.2.72
สำหรับผู้ใช้คนที่สาม ก็เช่นเดียวกัน DNS server จะตอบกลับเป็น 158.108.2.73 และหลังจากนี้เมื่อมีผู้ใช้ คนต่อมา DNS server จะวนกลับและตอบกลับเป็น 158.108.2.71
จะเห็นได้ว่า DNS server เป็นส่วนสำคัญสำหรับวิธีนี้ ซึ่งทำให้เป็นข้อด้อยของวิธีนี้ด้วยเช่นกัน พิจารณาจากการทำงานของ DNS ในความเป็นจริง (ดังภาพที่ 2)
จะเห็นได้ว่าวิธีนี้นิยมทำกันมากเนื่องจากสามารถทำได้ง่าย และไม่ต้องการซอฟท์แวร์เพิ่มเติม เพียงแค่เพิ่มจำนวนเซิร์ฟเวอร์ และเพิ่มหมายเลขไอพีลงใน DNS server เท่านั้น
จากภาพที่ 1 เรามีเว็บเซิร์ฟเวอร์จำนวน 3 เครื่อง (มีชื่อเดียวกัน คือ http://www.ku.ac.th หมายเลข IP คือ 158.108.2.71, 158.108.2.72 และ 158.108.2.73) โดยที่ทั้งสามมีข้อมูลเหมือนกันทุกอย่าง
ภาพที่ 2 แสดงการทำงานของ DNS sever
ปัญหาเกิดจาก DNS server ที่ผู้ใช้ติดต่อด้วย (Local DNS server) หลังจากที่ได้หมายเลขไอพีมาแล้ว จะเก็บหมายเลข IP นั้นเอาไว้จนกว่าจะถึงเวลาที่กำหนด (TTL) จึงจะลบออก หากมีผู้ใช้รายอื่นที่ต้องการติดต่อเว็บเดียวกัน และใช้ DNS server ตัวเดียวกันกับผู้ใช้คนแรก ตัว DNS server นั้นก็จะนำหมายเลขไอพีที่เก็บไว้มาให้ โดยไม่ไปถามจาก DNS server หลัก ทำให้ทั้งผู้ใช้คนแรก และของผู้ใช้คนที่สอง ติดต่อไปยังเซิร์ฟเวอร์ตัวเดียวกัน ทำให้การเฉลี่ยการใช้งานของเซิร์ฟเวอร์ทำได้ไม่ดีนัก
อาจแก้ปัญหาโดยการลดเวลา TTL ลง แต่ส่วนใหญ่แล้ว Local DNS server เมื่อได้รับค่า TTL ที่ต่ำเกินไป จะไม่สนใจ และใช้ค่าปกติ นอกจากนั้นแล้วในส่วนของตัว browser ก็ยังมีการเก็บหมายเลขไอพีเอาไว้ด้วย เนื่องจากมีความเป็นไปได้ว่า ผู้ใช้จะยังต้องดึงข้อมูลจากเว็บเซิร์ฟเวอร์นั้นเพิ่มเติมอีกในอนาคต ดังนั้นการแก้ปัญหาโดยวิธีนี้นั้นไม่สามารถแก้ปัญหาได้
นอกจากนี้แล้ว DNS server ไม่มีการตรวจสอบสถานะของตัวเซิร์ฟเวอร์ ดังนั้นในกรณีที่เซิร์ฟเวอร์มีปัญหา ตัว DNS server ยังคงแจกหมายเลขไอพี ของเครื่องที่มีปัญหา ทำให้ผู้ใช้ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้ เนื่องจากหมายเลขไอพีที่ได้มาเป็นหมายเลขของเซิร์ฟเวอร์ที่มีปัญหา
1.2 Application load balancing
ภาพที่ 3 วิธี Application Load Balancing
ตัวอย่างเช่น ในระบบ pWEB [1] ประกอบด้วยระบบ ดังภาพที่ 4
ภาพที่ 4 การทำงานของ pWEB
โดย Forwarding Agent มีหลักในการส่งคำร้องขอดังนี้
server1 | /gifs/logo |
server2 | /gifs |
server3 | /cgi-bin |
server4 | /cgi-bin |
ภาพที่ 5 แสดงการปรับแต่งบนตัว Forwarding Agent
1.3 HTTP Redirect
ภาพที่ 6 วิธี HTTP Redirection
จากภาพ สมมุติว่าในขณะนั้นเซิร์ฟเวอร์ที่มีหมายเลขไอพี 158.108.0.2 มีประมาณงานน้อยที่สุด ตัวเซิร์ฟเวอร์หลัก (158.108.0.1) จะสั่งให้ browser ของผู้ใช้ติดต่อไปยังเซิร์ฟเวอร์ 158.108.0.2 โดยอัตโนมัติ
&
nbsp; ลักษณะของคำสั่ง HTTP redirect tag จะเป็นดังนี้
< meta http-equiv = "refresh" content = "0 ; url = http://158.108.0.2/index.html" >
ในอดีต browser บางตัวเท่านั้นที่สนับสนุน tag นี้ แต่คาดว่าในปัจจุบันจะสนับสนุนหมดทุกตัวแล้ว จาก tag ดังกล่าว หมายความว่า ให้ browser ติดต่อไปยัง URL – http://158.108.0.2/index.html โดยหน่วงเวลา 0 วินาที
ตัวอย่างเช่น ในระบบ Scalable Web Server Architectures [2] ประกอบด้วยระบบ ดังนี้
ภาพที่ 7 การทำงานของ SWEB
ในระบบนี้แต่ละเซิร์ฟเวอร์จะมีข้อมูลไม่เหมือนกัน โดยในเซิร์ฟเวอร์หลัก (www.lucent.com) จะมีหลักในการ redirect คำร้องขอ ดังนี้
Redirect /news/politics http://www1.lucent.com/news/politics
Redirect /news/weather http://www2.lucent.com/news/weather
Redirect /news/sports http://www3.lucent.com/news/sports
จากตัวอย่างนี้ จะเหมือนกับแบบ Application Load Balancing และการกระจายงานก็จะได้ไม่ดีเท่า เราสามารถปรับให้ดีขึ้นได้ โดยเปลี่ยนให้ทุกเซิร์ฟเวอร์มีข้อมูลเหมือนกันหมด และให้เซิร์ฟเวอร์หลัก redirect โดยดูจากปริมาณงานในแต่ละเซิร์ฟเวอร์เป็นเกณฑ์ แทนที่จะเป็นแบบตายตัว โดยอาจดูจากปริมาณการใช้ หน่วยประมวลผลกลางในแต่ละเซิร์ฟเวอร์เป็นเกณฑ์ในการวัดปริมาณงาน
ตัวอย่างของระบบที่ใช้วิธีนี้ เช่น ClusterCATS 1.1 (Bright Tiger Technologies) [3] โปรแกรมนี้จะเป็นส่วนเพิ่ม (add-on) ของโปรแกรมเว็บเซิร์ฟเวอร์ Internet Information Server (IIS) – Microsoft ระบบจะมีตัวเซิร์ฟเวอร์หลักที่ทำหน้าที่ redirect คำร้องขอไปให้เซิร์ฟเวอร์ตัวที่มีภาระน้อยที่สุด โดยแต่ละเซิร์ฟเวอร์จะต้องมีการ์ดเน็ทเวิร์คจำนวน 2 การ์ด เพื่อส่งข้อมูลระหว่างกันตลอดเวลา ในกรณีที่มีเซิร์ฟเวอร์ใดมีปัญหา เซิร์ฟเวอร์ตัวใดตัวหนึ่งจะต้องทำหน้าที่แทนโดยใช้ IP aliasing (การปลอมเป็นหมายเลขไอพีของเครื่องที่มีปัญหา) จนกว่าเซิร์ฟเวอร์ตัวที่มีปัญหาจะกลับมาทำงานต่อได้
1.4 Virtual IP addressing
แบบตอบกลับต้องผ่านตัวกลาง
ภาพที่ 8 วิธี Virtual IP แบบผ่านตัวกลาง
แบบตอบกลับไม่ต้องผ่านตัวกลาง
ภาพที่ 9 วิธี Virtual IP แบบไม่ผ่านตัวกลาง
ภาพที่ 10 การทำงานของวิธี Virtual IP แบบไม่ผ่านตัวกลาง
จากภาพที่ 10 เมื่อผู้ใช้ส่งคำร้องขอไปยังเซิร์ฟเวอร์หลัก (1) ตัวเซิร์ฟเวอร์หลักจะส่งผ่านคำร้องขอไปให้เซิร์ฟเวอร์ที่มีปริมาณงานน้อยที่สุด (2) เมื่อเซิร์ฟเวอร์ที่มีปริมาณงานน้อยที่สุด ได้รับคำร้องที่ส่งผ่านมาจะส่งผ่านคำร้องนั้นให้โปรแกรมเว็บเซิร์ฟเวอร์ ที่ทำงานอยู่บนเซิร์ฟเวอร์นั้น (3) จากนั้นผลลัพธ์ที่ได้จากเว็บเซิร์ฟเวอร์ จะถูกส่งไปให้ผู้ใช้โดยตรง (4)
จะสังเกตุเห็นว่า ในทุกเซิร์ฟเวอร์จะมีโปรแกรม (Agent) ทำงานอยู่ ซึ่งหน้าที่ของโปรแกรมนี้ก็คือ แลกเปลี่ยนปริมาณงานในแต่ละเซิร์ฟเวอร์ ระหว่างกันเพื่อหาเซิร์ฟเวอร์ที่มีปริมาณงานต่ำที่สุด
การสร้างระบบ Virtual IP โดยผ่านตัวกลาง สามารถทำได้โดยแก้ไขในส่วนของการทำ masquerade
ของ Linux โดยให้เซิร์ฟเวอร์หลักทำหน้าที่แจกจ่ายคำร้องขอ โดยการแจกจ่ายอาจใช้วิธี round-robin หรือเลือกส่งให้เครื่องที่มีโหลดต่ำสุด โดยเครื่องนี้มีหมายเลขไอพีจริง ส่วนเซิร์ฟเวอร์ที่เหลือใช้หมายเลขไอพีส่วนตัว ในการตอบกลับเครื่องที่ใช้หมายเลขไอพีส่วนตัว จะตอบกลับโดยเปลี่ยนหมายเลขไอพีต้นทางของแพกเก็ต เป็นหมายเลขไอพีจริงของเซิร์ฟเวอร์หลัก จากนั้นระบบจำเป็นต้องมี fault tolerant โดยเมื่อเซิร์ฟเวอร์ตัวกลางมีปัญหา จะให้เซิร์ฟเวอร์ตัวอื่นทำหน้าที่แทน จนกว่าตัวกลางจะกลับมาทำหน้าที่ได้เหมือนเดิม
ภาพที่ 11 เปรียบเทียบการใช้หน่วยประมวลผลบนเซิร์ฟเวอร์แต่ละตัว
]]>