ผมเชื่อว่าเหตุผลหนึ่งที่ผู้ใช้บริการหลายๆ ท่านต้องการหันมาใช้บริการของ Cloud Server ก็คือเรื่องของ High Availability ครับ เพราะต้นทุนในการทำระบบที่เป็น High Availability ในศูนย์ข้อมูล On-premise นั้นสูงมาก ไม่ว่าจะเป็นเรื่องแหล่งพลังงานไฟฟ้า, ระบบเครือข่าย, ระบบทำความเย็น และจิปาถะเยอะแยะมากมายครับ ซึ่ง Microsoft Azure ก็มีในเรื่องของ High Availability ให้ด้วยเช่นกัน คือการใช้งาน Availability Set นั่นเองครับ
ใน Microsoft Azure นั้นได้มีการแบ่ง SLA (Service Level Agreements) สำหรับ Virtual Machine ไว้เป็น 2 กรณีคือ
- การใช้งาน Availability Set โดยมี Virtual Machine มากกว่า 2 Instance ขึ้นไป อยู่ใน Availability Set เดียวกัน Microsoft Azure จะรับประกัน SLA ให้ Virtual Machine เหล่านี้จะสามารถที่จะเชื่อมต่อได้ (Virtual Machine Connectivity) อย่างน้อย 99.95%
- การใช้งาน Virtual Machine ที่มีการใช้งาน Premium Storage ในทุกๆ OS Disk และ Data Disk นั้น และมีเพียง 1 Instance นั้น Microsoft Azure จะรับประกัน SLA ให้ Virtual Machine เหล่านี้จะสามารถที่จะเชื่อมต่อได้ (Virtual Machine Connectivity) อย่างน้อย 99.9%
แล้วไอ้เจ้า Availability Set นี่มันคืออะไรกันแน่หล่ะ ?? มาดูกันต่อไปครับ แต่น แต๊นนนนน
รู้จักกับ Availability Set
ถ้าจะให้อธิบายความหมายของ Availability Set ให้สั้นๆ และง่ายๆ ก็คืออะไรก็ตามที่อยู่ใน Availability Set เดียวกันนั้นไม่ว่าจะเกิดปัญหาอะไรขึ้นก็ตาม จะต้องมี Virtual Machine อย่างน้อย 1 Virtual Machine ที่สามารถเชื่อมต่อได้ตลอดเวลา (ง่ายๆ ว่าถึงจะพังก็ไม่พังพร้อมกันทั้งหมด ต้องมีคน เอ๊ย เครื่องอยู่รอด 1 เครื่องเป็นอย่างน้อยนั่นเองครับ)
ดังนั้นการที่เราต้องการ High Availability ของ Virtual Machine ก็คือต้องใช้เจ้า Availability Set นี้เข้าช่วยนั่นเองครับผม ซึ่งการทำงานของ Availability Set นั้นจะมีคำศัพท์ทางเทคนิคอีก 2 คำที่ควรทราบ ก็คือ Fault Domain และ Update Domain ครับ
- Fault Domain เปรียบเสมือนกับกลุ่มของทรัพยากรต่างๆ ของ Virtual Machine ที่ใช้งานร่วมกัน เช่นแหล่งจ่ายไฟฟ้า, ระบบเครือข่าย, โฮสต์, (ถึงเราจะไม่ต้องทำงานกับมันตรงๆ แต่ก็ปฏิเสธไม่ได้ว่ามันมีอยู่ครับ) ซึ่ง Virtual Machine ที่อยู่ใน Fault Domain เดียวกัน ก็มีแนวโน้มที่จะมีปัญหาพร้อมๆ กันหากศูนย์ข้อมูลมีปัญหาทางด้านกายภาพดังที่กล่าวไปแล้วครับ ดังนั้นทางที่ดีคือควรจะต้องแยก Fault Domain กันไปครับ สำหรับใน Azure Portal นั้นปกติ ถ้าเราทำการสร้าง Availability Set นั้น Azure Portal จะทำการสร้าง Fault Domain ให้จำนวน 2-3 Fault Domain ขึ้นอยู่กับ Region ของ Azure Data Center สำหรับใน Region ที่ใกล้กับเมืองไทยของเรามากที่สุดนั้นคือ Region “South East Asia” จะมี Fault Domain จำนวน 2 Fault Domain ครับ
รูปที่ 1 เปรียบเทียบการทำงานของตู้ Rack กับ Azure Availability Set A) On-Premise B) Azure Availability Set
จากรูปที่ 1 A) จะเห็นได้ว่าหากเราต้องการให้ Server01 และ Server02 นั้นเกิด High Availability ขึ้นในระบบของ On-premise นั้นเราจะต้องมีการตั้ง Server อย่างน้อย 2 เครื่องก็คือ Server01 และ Server02 ขึ้น และใช้ Microsoft Failover Cluster เข้าช่วย (หรือจริงๆ อาจจะเป็นเทคนิคอื่นๆ ก็ได้นะครับ แต่ที่ยก Microsoft Failover Cluster เป็นตัวอย่างเพราะคิดว่าน่าจะรู้จักกันดี) และที่สำคัญครับคือเราจะต้องวาง Server01 และ Server02 ไว้คนละ Rack กัน เพราะเกิด PDU (Power Distribution Unit) หรือ Switch ของตู้ Rack ตู้ใดตู้หนึ่งหนึ่งเสีย ก็ยังสามารถไปใช้งาน Server ในอีกตู้หนึ่งได้นั่นเองครับ
และด้วยเหตุผลเช่นเดียวกันกับที่กล่าวไปแล้วนั้นใน Azure ก็คือรูป B เราก็จะใช้เทคนิคเดียวกันครับคือวาง VM01 และ VM02 ไว้ใน Fault Domain ที่ต่างกัน
ดังนั้นหากจะให้สรุปง่ายๆ ก็คือ Fault Domain จะช่วยป้องกันปัญหาที่เกิดขึ้นโดยไม่คาดหวัง หรือที่เรียกว่า “Unplanned Downtime” นั่นเองครับ
- Update Domain เป็นที่ปฏิเสธไม่ได้ครับว่าในการทำงานในวงการ IT นั้นจะต้องมีกระบวนการในการบำรุงรักษาระบบ เช่นการ Update Software ต่างๆ เป็นต้น ซึ่งการทำงานในการบำรุงรักษาระบบเหล่านี้บางครั้งก็จะก่อให้เกิด Downtime ขึ้นได้อีกเช่นกัน เรียกว่า “Planned Downtime” ซึ่ง Downtime ประเภทนี้ ทาง Microsoft ก็มักจะมีการแจ้งให้ทราบล่วงหน้าก่อนครับ และการ Update นั้นทาง Microsoft จะทำการ Update ทีละกลุ่มเรียกว่า Update Domain เอาง่ายๆ ว่าถ้าเกิดว่าอยู่ใน Update Domain เดียวกัน ก็มีแนวโน้มว่าจะมีการบำรุงรักษาพร้อมกัน และอาจจะมีการ Reboot พร้อมๆ กันด้วยครับ
ดังนั้นในเราจึงควรที่จะวาง Virtual Machine ของเราให้อยู่ใน Update Domain ที่ต่างกันครับ ซึ่งโดยปกติแล้ว Azure Portal ในรูปแบบ Azure Resource Manager จะทำการสร้าง Update Domain ให้เราจำนวน 5 Update Domain (สามารถเลือกเพิ่มได้จนถึง 20 Update Domain)
หมายเหตุ อย่าลืมนะครับ Availability Set เป็นแค่ตัวช่วยให้ระบบเกิด High Availability เท่านั้นนะครับ และเป็น High Availability ที่การเชื่อมต่อนะครับไม่ใช่ service ดังนั้นระบบที่สำคัญต้องมีการติดตั้ง High Availability Service ของระบบ เช่น Failover Cluster, Network Load Balance, etc. ขึ้นมาอีกส่วนหนึ่งด้วยนะครับ
การสร้าง Availability Set และการกำหนด Availability Set ให้กับ Azure Virtual Machine
สำหรับการสร้าง Availability Set และการกำหนด Availability Set ให้กับ Azure Virtual Machine นั้นสามารถทำได้ในการ
สร้าง Azure Virtual Machine เท่านั้นนะครับ โดยในขั้นตอนที่ 3 ให้ทำการเลือก Availability Set และเลือก Create New ดังภาพ
รูปที่ 2 การสร้าง Availability Set และการกำหนด Availability Set ให้กับ Azure Virtual Machine #1
จากนั้นให้ใส่ชื่อของ Availability Set และการกำหนด Fault Domain และ Update Domain ตามรูป
รูปที่ 3 การสร้าง Availability Set และการกำหนด Availability Set ให้กับ Azure Virtual Machine #2
หลังจากที่สร้าง Availability Set และกำหนด Availability Set ให้กับ Virtual Machine เครื่องแรกแล้ว หลังจากนี้เมื่อต้องการสร้าง Virtual Machine เครื่องถัดไป ก็จะสามารถเลือก Availability Set ที่สร้างไว้ได้ทันที ซึ่ง Azure Portal จะจัดสรร Update Domain และ Fault Domain ให้โดยอัตโนมัติ
ซึ่งผู้ใช้งานสามารถที่จะตรวจสอบ Fault Domain และ Update Domain ของ Virtual Machine ของเราได้จาก blade ของ Availability Set ในหน้า Azure Portal
หมายเหตุ การกำหนด Availability Set ให้กับ Azure Virtual Machine นั้นจะต้องทำการกำหนดในขั้นตอนของการสร้าง Virtual Machine เท่านั้น เพื่อให้ Azure ทำการจัดสรรทรัพยากรที่เหมาะสมให้ แต่ถ้า Virtual Machine ถูกสร้างไปแล้วจะไม่สามารถมากำหนด Availability Set ได้อีก
ข้อควรทราบเพิ่มเติม
นอกจาก Availability Set แล้วอีกอย่างหนึ่งที่สำคัญมากในเรื่องของ High Availability ก็คือเรื่องของ Storage หรือ Disk ครับ ซึ่งทาง Microsoft แนะนำให้ใช้ Disk ที่เป็น Managed Disk จะดีกว่าครับ เพราะในส่วนของ Managed Disk นั้นตัว Azure จะจัดการ High Availability ของ Disk ให้โดยอัตโนมัติ
แต่ถ้าเรามีจำเป็นที่จะต้องใช้ Disk ที่เป็น Unmanaged Disk นั้นทาง Microsoft มีข้อแนะนำเพิ่มเติมดังนี้ครับ
- ในแต่ละ Virtual Machine ให้เลือกที่จะใช้งาน OS Disk, Data Disk ที่อยู่บน Storage Account เดียวกันทั้งหมด
- ให้ระวังเกี่ยวกับข้อจำกัด ของ Unmanaged Disk ใน Storage Account อ่านเพิ่มเติมที่นี่
- ทำการสร้าง Storage Account แยกออกจากกันสำหรับ Virtual Machine ใน Availability Set เว้นแต่จะมีความจำเป็น และออกแบบอย่างรอบคอบ ทั้งนี้อย่าลืมเรื่องของข้อจำกัดข้างต้น
เอาละครับก็ครบถ้วนกันไปสำหรับรายละเอียดของ Azure Virtual Machine นะครับ เขียนมาให้อ่านกันลึกๆ ถึงใจกันไปครับ 4 ตอนรวด สำหรับตอนหน้าเราจะมาดูรายละเอียดแบบลึกๆ ของ Virtual Machine Scale Set (VMSS) กันครับ
ข้อมูลเพิ่มเติม