RADOS: MDS Node

MDS Node

สัญลักษณ์ MDS Node

 

MDS Node หรือ Metadata Server Node เป็น node อีกประเภทหนึ่งภายใน RADOS cluster ที่มีความพิเศษกว่า node ประเภทอื่นๆ เนื่องมาจาก MDS node นี้จะพบเฉพาะใน Ceph Storage ที่มีการใช้งาน Ceph File System (Ceph FS) เท่านั้น หน้าที่ของ MDS node ถือว่าเฉพาะเจาะจงกับการทำงานในลักษณะของ distributed file system เป็นอย่างมาก และหากไม่มี MDS node แล้ว Ceph FS ก็จะไม่สามารถทำงานได้เลย

Before We Begin …

นี่ก็เป็นบทความสุดท้ายใน Ceph RADOS cluster series นะครับ สำหรับผู้ที่เพิ่งมาอ่านบทความนี้เป็นตอนแรก สามารถติดตามอ่านบทความตอนก่อนหน้านี้ได้ที่นี่ครับ

และสำหรับผู้ที่อยากรู้จัก Ceph Storage เพิ่มเติม สามารถอ่านเพิ่มเติมได้ที่นี่ครับ

 

File System Concept

เพื่อให้เข้าใจถึงความสำคัญและหน้าที่ของ MDS node ผมขออธิบายการทำงานโดยทั่วไปของ file system พอสังเขปนะครับ สำหรับผู้ที่ทราบอยู่แล้ว สามารถข้ามไปอ่านส่วนของ MDS node ได้เลยครับ

What is File System?

File system คือ ระบบในการจัดเก็บข้อมูลในลักษณะของ file ที่ผู้ใช้คุ้นเคยกันอยู่แล้ว เพราะต้องใช้งาน file system อยู่ตลอดเวลา file system ที่ถูกใช้อย่างแพร่หลายในปัจจุบัน มีอาทิ NTFS (พบมากในระบบปฏิบัติการ Windows) FAT32, exFAT, ext3, ext4, XFS, ZFS, HFS+, APFS (พบในระบบปฏิบัติการ macOS) เป็นต้น

We use it every day!

ไม่ว่าจะเป็นการ browser file เปิด file เพื่ออ่านข้อมูล เขียนข้อมูลใหม่หรือแก้ไขข้อมูลเก็บลงไปใน file สร้าง file ลบ file ย้ายตำแหน่ง file operation เหล่านี้ล้วนแล้วแต่เป็นความสามารถของ file system ทั้งสิ้น ซึ่งโดยปกติแล้ว ผู้ใช้จะใช้งาน file system ผ่าน file browser เช่น File Explorer ในระบบปฏิบัติการ Windows, Finder ในระบบปฏิบัติการ macOS หรือ Terminal ในเกือบทุกระบบปฏิบัติการ ดังที่แสดงในรูปภาพด้านล่างครับ

 

File Browser

File Explorer ในระบบปฏิบัติการ Windows10
(source: https://support.microsoft.com/en-us/help/17217/windows-10-whats-changed-in-file-explorer)

Terminal

Terminal ใน ระบบปฏิบัติการ macOS
(source: https://computers.tutsplus.com/tutorials/40-terminal-tips-and-tricks-you-never-thought-you-needed–mac-51192)

 

What does file system do?

หน้าที่หลักของ file system คือ การจัดทำแผนที่การเก็บข้อมูลในลักษณะของ file ทั้งในส่วนความสัมพันธ์ของ file กับ directory (หรือ folder) ที่เรียกว่า directory hierarchy หรือ ลำดับชั้นของ directory ดังที่แสดงในภาพด้านล่าง

 

Directory Hierarchy

ตัวอย่าง directory hierarchy ในระบบปฏิบัติการตระกูล UNIX
(source: https://www.ssh.com/manuals/server-zos-cookbook/65/unix-file-system.html)

 

อีกหน้าที่หนึ่งของ file system คือ การจัดทำและเก็บแผนที่ความสัมพันธ์ของข้อมูลแต่ละ block ของ file กับ block ใน block device เช่น Hard Disk Drive (HDD) เป็นต้น เหตุที่ต้องมีแผนที่อย่างที่สองที่คอยจับคู่ file กับ block ต่างๆ ใน block device เพราะว่า block device ทำการเก็บข้อมูลในลักษณะของ block ที่มีขนาดเท่าๆ กัน โดยปกติแล้วมีขนาดตั้งแต่ 512 Bytes ไปจนถึง 64 KiB ขึ้นอยู่กับการตั้งค่าของผู้ใช้ เมื่อต้องการเก็บ file ที่มีลงไปใน block device file จะถูกแบ่งออกเป็น block ขนาดดังกล่าว และส่งไปเก็บใน block ตำแหน่งต่างๆ บน block device ในจังหวะนี้ file system จะจดจำลำดับของตำแหน่งของ block เหล่านี้เอาไว้ เพื่อให้สามารถอ่านข้อมูลกลับขึ้นมาประกอบกันเป็น file ฉบับเต็มดังเดิมได้

แผนที่ความสัมพันธ์ของข้อมูลแต่ละ block ของ file กับ block ใน block device ถูกเก็บอยู่ใน File Allocation Table (FAT) ใน file system จำพวก FAT หรือ inode (Index Node) ใน file system ในระบบปฏิบัติการตระกูล UNIX ดังแสดงให้เห็นในรูปภาพถัดๆ ไป

 

FAT

ตัวอย่าง File Allocation Table
(source: http://www.cs.odu.edu/~cs471w/spring10/lectures/FileSystemImplementation.htm)

 

ภาพข้างต้นแสดงถึงตัวอย่างของ File Allocation Table (FAT) สำหรับ file ชื่อ test โดยที่ directory entry (จุดหนึ่งใน directory hierarchy) ระบุว่า file test เริ่มเก็บข้อมูล block แรกที่ block ตำแหน่ง 217 ใน block device ใน FAT ก็ระบุต่อไปอีกว่า block ลำดับต่อๆ ไปที่เก็บข้อมูลของfile test นี้ คือ block ที่ 618 และ 339 ตามลำดับ ดังนั้น หากต้องการอ่านข้อมูลของ file test ขึ้นมาทั้งหมด ต้องอ่านข้อมูลจาก block device block ลำดับที่ 217, 618 และ 339 ตามลำดับ

 

 

รูปภาพด้านบนนี้แสดงให้เห็นถึงตัวอย่างของ inode ใน inode นั้นประกอบไปด้วยข้อมูลหลายอย่าง ทั้ง metadata ของ file และ block pointer ซึ่งในส่วนของ block pointer นี้เอง ที่เป็นตัวชี้ไปยัง data block หรือ block ของข้อมูลของ file ใน block device หากต้องการอ่านข้อมูลของ file นี้ขึ้นมาทั้งหมด ก็เพียงแค่เรียกอ่าน data block ตามที่ block pointers ชี้ไปตามลำดับ

Types of block pointer

block pointer อยู่สองแบบ คือ direct block pointer และ indirect block pointer โดย direct block pointer จะชี้ไปยัง data block โดยตรง แต่ indirect block pointer นั้น จะชี้ไปยัง list ของ direct block pointer อีกทีหนึ่ง ซึ่งแต่ละ block pointer ในนั้นก็ชี้ไปยัง data block อีกทอดหนึ่ง นอกจากนี้ indirect block pointer ยังสามารถชี้ไปยัง list ของ indirect block pointer ได้อีกด้วย ซึ่งจะเรียก list นั้นว่า doubly indirect data block วีธีการนี้ทำให้ inode ซึ่งมีขนาดจำกัด สามารถเก็บแผนที่ของ block สำหรับ file ขนาดใหญ่ ที่มี block เป็นจำนวนมากได้นั่นเอง

นอกจากข้อมูลเหล่านี้ file system ยังเก็บขอมูลอื่นๆ ของ file ที่เรียกว่า metadata กล่าวคือ เป็นข้อมูลที่อธิบายสถานะ คุณสมบัติ หรือข้อจำกัดเกี่ยวกับ file เช่น ชื่อผู้ใช้ที่เป็นเจ้าของ file วันเวลาที่สร้าง file วันเวลาที่เปิดอ่าน file ครั้งล่าสุด วันเวลาที่แก้ไข file ล่าสุด วันเวลาที่แก้ไข metadata ล่าสุด สิทธิ์การเข้าใช้ file เป็นต้น

 

จากที่ได้เกริ่นไปแล้วเกี่ยวกับการทำงานในเบื้องต้นของ file system สังเกตได้ว่า directory hierarchy และ FAT หรือ inode นั้นมีความสำคัญต่อการทำงานของ file system เป็นอย่างมาก เพราะเป็นส่วนที่ทำให้สามารถจัดการ file ได้อย่างเป็นระบบและสามารถเข้าถึง file ได้นั่นเอง นอกจากนี้ metadata ก็มีความสำคัญเช่นเดียวกัน เพราะเป็นข้อมูลที่ใช้ควบคุมดูแลสิทธิ์การเข้าถึงและแสดงถึงสถานะอื่นๆ ของ file

สำหรับผู้ที่สนใจศึกษาเรื่อง file system concept เพิ่มเติม สามารถศึกษาได้ตามลิงก์ด้านล่างเลยครับ

 

MDS Node

MDS node หรือ Metadata server node ดังที่ชื่อได้แสดงให้เห็น คือ เป็น node ที่ทำหน้าที่จัดการกับ metadata ใน Ceph File System นั่นเอง แต่ MDS node นี้ ไม่ได้เพียงแต่จัดการ metadata เท่านั้น แต่ยังคอยดูแล directory hierarchy อีกด้วย ซึ่งทั้งสองอย่างนั้น ถือเป็นสิ่งจำเป็นต่อการทำงานของ file system เพราะเป็นสิ่งที่ทำให้ผู้ใช้สามารถเข้าใช้งาน file ที่เก็บไว้ภายในได้ ทำให้ MDS node มีความสำคัญต่อ Ceph FS เป็นอย่างมาก

MDS Data Structures

ข้อมูลต่างๆ ที่ MDS node ดูแลนั้น ไม่ว่าจะเป็น metadata หรือ directory hierarchy ไม่ได้ถูกเก็บไว้ใน MDS node แต่อย่างใด แต่ถูกเก็บไว้ใน OSD node ใน RADOS เสมือนเป็นข้อมูลทั่วๆ ไป โดยโครงสร้างข้อมูลเหล่านั้น มีลักษณะดังต่อไปนี้

 

 

  • CInode
    ทำหน้าที่เก็บ metadata ของ file โดยจะมี CInode ประจำตัวของแต่ละ file metadata เหล่านี้ ยกตัวอย่างเช่น ผู้ใช้เจ้าของ file หรือ ขนาดของ file เป็นต้น
  • CDentry
    ทำหน้าที่เป็นตัวเชื่อมระหว่าง inode กับ file หรือ directory โดย 1 CDentry จะเชื่อมต่อไปยัง 1 CInode เป็นอย่างมาก (อาจจะไม่เชื่อมเลยก็ได้) แต่ 1 CInode สามารถเชื่อมได้มากกว่าถึง CDentry
  • CDir
    มีอยู่ประจำ directory เท่านั้น (ไม่มีใน file) ทำหน้าที่เชื่อมต่อไปยัง CDentry ของ file หรือ directory อื่นๆ ภายใต้ directory นั้นๆ โดย CDir นี้จะอยู่ภายใต้ CInode ของdirectory อีกทีหนึ่ง และ CInode หนึ่งสามารถมีได้มากกว่า 1 CDir ในกรณีที่มีการทำ directory fragmentation (การกระจาย directory ให้หลายๆ MDS node รับผิดชอบ)

No more File-to-Block Mapping!

ใน MDS node ไม่มีการเก็บแผนที่ความสัมพันธ์ของ file และ block ใน block device ไว้แต่อย่างใด ด้วยเหตุที่ file ใน Ceph FS นั้นเก็บลงไปใน RADOS ที่เป็น object storage ซึ่งสามารถกำหนดชื่อได้(!) ต่างจาก block device ที่ไม่สามารถตั้งชื่อให้กับ block ในนั้นได้เลย ดังนั้น Ceph FS จึงใช้วิธีตั้งชื่อ RADOS object สำหรับแต่ละ stripe (หรือ block) ของ file ที่เก็บลงไปใน RADOS แทน โดยชื่อ RADOS object สร้างมาจาก inode number, file layout (วิธีการแบ่งไฟล์ออกเป็น stripe ที่เท่าๆ กัน และเก็บลงใน RADOS object) และ ขนาดของไฟล์ เมื่อต้องการเข้าถึง stripe ใดๆ ของ file ก็เพียงแค่เรียกไปยัง RADOS object ชื่อนั้นๆ แต่อย่างไรก็ตาม สามารถกล่าวได้ว่า MDS node ทำหน้าที่เปลี่ยนเสมือน FAT หรือ inode ใน file system อื่นๆ ที่ทำให้ file system สามารถเข้าถึงข้อมูลของ file ใน storage ที่อยู่ชั้นถัดลงไปได้

Failover

เพราะว่าข้อมูลต่างที่ MDS ดูแลนั้น ไม่ได้ถูกเก็บอยู่ภายใน MDS node แต่อย่างใด แต่ถูกเก็บไว้ใน OSD node จึงทำให้การทำ Fail Over หรือ การให้ MDS node สำรอง มาทำหน้าที่แทน MSD node หลักที่เกิดปัญหาหรือปิดตัวลงไป สามารถทำได้ง่ายและรวดเร็วมาก เพราะ MDS node สำรองเพียงแค่เรียกไปยังข้อมูลที่เก็บอยู่ใน OSD node ก็สามารถทำงานต่อได้ทันที ทำให้ระบบมี High Availability หรือ มีความคงอยู่สูง สามารถทำทานต่อความผิดพลาดที่เกิดขึ้นในระบบได้

ในการทำ Fail Over สำหรับ MDS node ผู้ใช้สามารถทำได้สองวิธี วิธีแรก เพียงแค่เพิ่ม MDS node เข้าไปให้เกินกว่าจำนวน MDS node หลักที่จะเปิดใช้งาน (mds_max) เช่น หากตั้งค่า mds_max = 2 ผู้ใช้เพียงแค่เพิ่ม MDS node เข้าไปใน RADOS cluster ให้มีจำนวนมากกว่า 2 node ซึ่งในกรณีที่ MDS node หลัก เกิดปัญหาขึ้น หรือ ปิดตัวลง ระบบจะนำ MDS node สำรองที่ไม่ได้ใช้งาน มาเปิดใช้งานเป็น MDS node หลักแทนที่ node ที่เกิดปัญหาโดยอัตโนมัติ อีกวิธีหนึ่ง คือ ผู้ใช้สามารถกำหนดได้ว่า ให้ MDS node นี้เป็น MDS node สำรองของ MDS node หลักหนึ่งๆ โดยเฉพาะเจาะจงได้ เมื่อกำหนดดังนี้แล้ว MDS node สำรองจะคอยดูการทำงานของ MDS node หลักและเก็บค่าต่างๆ ไว้ใน cache ภายใน ทำให้สามารถรับช่วงทำงานต่อได้โดยทันที

Dynamic Subtree Partitioning

Dynamically Subtree Partitioning

Ceph FS กระจาย subtree ของ directory hierarchy ใน MDS nodes ตาม workload ปัจจุบัน โดย directory ที่ถูกใช้งานถี่มากถูกกระจายออกไปให้ MDS node หลายๆ node ช่วยแบ่ง workload
(source: http://ceph.com/wp-content/uploads/2016/08/weil-ceph-osdi06.pdf)

 

เนื่องจากในการทำงานในลักษณะของ distributed file system สิ่งที่เป็นปัจจัยสำคัญต่อประสิทธิภาพการทำงานโดยรวมของระบบ คือ ประสิทธิภาพการทำงานของ metadata server ทางผู้ออกแบบได้เล็งเห็นถึงจุดวิกฤตนี้ จึงออกแบบให้ MDS node สามารถกระจาย workload ไปยัง MDS node หลักอื่นๆ ได้ ในกรณีที่มี MDS node หลักมากกว่า 1 node ใน RADOS cluster (หมายเหตุ ก่อนหน้าเวอร์ชัน Ceph Luminous 12.2.x การใช้งาน MDS node หลักหลาย node พร้อมกันยังจัดว่าเป็นความสามารถที่อยู่ในช่วงทดลองใช้งาน แต่ตั้งแต่เวอร์ชันนี้ คามสามารถนี้ได้ถูกจัดเป็นความสามารถมาตรฐานแล้วครับ) โดย MDS node แต่ละ node จะคอยดู workload ทั้งในด้านของความถี่ในการเรียกใช้งาน file หรือ directory ในแต่ละ subtree หรือ ลำดับชั้นย่อยใน directory hierarchy และในด้านของขนาดของ directory หากพบว่า มีบาง file หรือบาง directory มีการใช้งานถี่ผิดปกติ หรือ มีบาง directory มี file อยู่ภายในเป็นจำนวนมาก ระบบจะกระจาย file หรือ directory นั้นๆ ให้ MDS node อื่นๆ ช่วยกันรับผิดชอบ ดังที่แสดงในภาพด้านบน ความสามารถนี้เรียกว่า Dynamic Subtree Partitioning ซึ่งทำให้ Ceph FS สามารถทำงานได้อย่างมีประสิทธิภาพแม้ในสถานการณ์ที่มี workload สูง

 

หากว่าขาด MDS node ไปแล้ว Ceph File System ก็ไม่อาจใช้งานได้เลย ด้วยเหตุนี้ MDS node จึงมาพร้อมกับความสามารถต่างๆ มากมาย เช่น ความสามารถในการทำ Fail Over ที่ทำให้ จะมี MDS node คอยให้บริการใช้ RADOS cluster อยู่เสมอ ทำให้ Ceph FS สามารถทำงานได้ และนอกจากนี้ MDS node ยังสามารถปรับตัวเข้ากับ workload ที่เปลี่ยนแปลงไปอยู่ตลอดเวลาได้ และตอบสนองต่อ workload ที่สูงขึ้น ได้อย่างอัตโนมัติและมีประสิทธิภาพ

 

สำหรับในบทความ series นี้ ผมก็ได้แนะนำให้รู้จักกับหัวใจสำคัญใน Ceph Storage ที่เรียกว่า RADOS กันอย่างพอสังเขปแล้วนะครับ โดยภายใน RADOS ประกอบไปด้วย node จำนวนหนึ่ง โดยมีอยู่ด้วยกัน 3 ประเภทหลักๆ คือ Monitor node ซึ่งทำหน้าที่ดูแลและปรับปรุง Cluster Map อย่างอัตโนมัติ OSD node ซึ่งทำหน้าที่จัดการกับข้อมูลและดูแลรักษาความปลอดภัยของข้อมูลอย่างอัตโนมัติ และ MDS node ที่ทำหน้าที่เก็บ metadata ของไฟล์ต่างๆใน Ceph FS โดยสรุปแล้วสามารถสังเกตได้ว่าจุดเด่นของ RADOS คือ ความสามารถในการดูแลรักษาความเป็นอยู่ของ node ต่างๆ และข้อมูลที่เก็บอยู่ภายใน cluster ได้ด้วยตัวเอง ความสามารถนี้จำเป็นอย่างยิ่งเมื่อมีจำนวน node ใน cluster เป็นจำนวนมากๆ (หลายร้อย หรือหลายพัน node) ซึ่งยากต่อการจัดการความคุมดูแลด้วยผู้ดูแลระบบ การมีระบบ storage ที่สามารถจัดการบริหารและปรับปรุงซ่อมแซมตัวเองได้อย่างอัตโนมัติย่อมสามารถช่วยได้เป็นอย่างมากเลยทีเดียวครับ

 

สำหรับในบทความต่อไป ผมจะไปอธิบายถึงเรื่อง Ceph Client ซึ่งถือเป็นอีกส่วนหนึ่งที่สำคัญใน Ceph Storage เพราะว่าเป็นช่องทางที่ผู้ใช้ใช้เพื่อติดต่อเข้าทำงานกับ Ceph Storage ถ้าหากว่าปราศจาก Ceph Client แล้ว เป็นไปไม่ได้เลยที่ผู้ใช้จะใช้งาน Ceph Storage ได้เลย

 

สำหรับผู้ที่สนใจสามารถศึกษาเพิ่มได้ตามลิงก์ด้านล่างนี้เลยครับ

 

เกี่ยวกับ Throughwave Thailand

Throughwave Thailand เป็นตัวแทนจำหน่าย (Distributor) สำหรับผลิตภัณฑ์ Enterprise IT ครบวงจรทั้ง Server, Storage, Network และ Security พร้อมโซลูชัน VMware และ Microsoft ที่มีลูกค้าเป็นองค์กรชั้นนำระดับหลายหมื่นผู้ใช้งานมากมาย โดยทีมงาน Throughwave Thailand ได้รับความไว้วางใจจากลูกค้าจากทีมงาน Engineer มากประสบการณ์ ที่คอยสนับสนุนการใช้งานของลูกค้าตลอด 24×7 ร่วมกับ Partner ต่างๆ ทั่วประเทศไทยนั่นเอง https://www.throughwave.co.th