RADOS: OSD Node

OSD

สัญลักษณ์ OSD node

OSD node หรือ Object Storage Device node เป็น node อีกประเภทหนึ่งใน RADOS ที่มีความสำคัญเป็นอย่างมากต่อทั้ง RADOS และ Ceph Storage ทั้งนี้เพราะ​​ OSD node นั้นทำหน้าที่หลัก คือ การเก็บรักษาข้อมูลของผู้ใช้ ให้ปลอดภัยและเข้าถึงได้อยู่เสมอ นอกจากนี้ยังคอยตรวจหาข้อผิดพลาดในข้อมูล และสามารถแก้ไขข้อผิดพลาดได้ด้วยตนเอง ยิ่งไปกว่านั้น OSD node ยังคอยตรวจสอบและรายงานสถานะของ OSD node ข้างเคียงไปยัง Monitor node อีกด้วย เพราะเหตุนี้เองจึงทำให้ RADOS สามารถดูแลตัวเองและเก็บรักษาข้อมูลให้ปลอดภัยอยู่เสมอได้ด้วยตนเอง

 

สำหรับบทความนี้ก็นับเป็นบทความที่ 3 ใน Ceph RADOS series นะครับ สำหรับบทความ 2 ตอนแรก สามารถติดตามอ่านได้ที่นี่ครับ

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

 

โดยปรกติแล้ว ใน RADOS cluster จะประกอบไปด้วย OSD node จำนวนมาก เพื่อให้สามารถเก็บข้อมูลได้ปริมาณมากๆ จนถึงระดับ Petabyte (1 PB = 1000 TB) และมีความปลอดภัยสูง (เพราะเมื่อกระจายข้อมูลไปยัง node ต่างๆ ทำให้ความเสี่ยงต่อการสูญเสียข้อมูลลดลง) สำหรับโครงสร้างภายในของ OSD node นั้น เป็นดังที่แสดงในภาพด้านล่าง

 

 

จากภาพสังเกตได้ว่า ภายใน OSD node ประกอบไปด้วย 4 ส่วนด้วยกัน คือ

1. OSD Daemon

OSD Daemon เป็นส่วนบนสุดที่เห็นในภาพด้านบน ซึ่งเป็น service หรือ โปรแกรมที่คอยให้บริการตามคำขอจากโปรแกรมอื่นหรือผู้ใช้ OSD Daemon ทำหน้าที่ในการรับคำขอเหล่านั้น และติดต่อทำงานกับชั้นต่อๆ ไป เพื่ออ่านหรือเขียนข้อมูลในรูปแบบของ RADOS object ใน OSD node นอกจากนี้ การกระจายข้อมูลไปยัง OSD node อื่นๆ ยังเกิดขึ้นที่ส่วนนี้อีกด้วย เช่น เมื่อผู้ใช้กำหนดว่า ทุก object ที่เก็บใน Ceph Storage ต้องถูกทำสำเนา (replicate) 3 สำเนาและแต่ละสำเนาต้องถูกเก็บลงใน OSD node ที่แตกต่างกัน การทำสำเนาและกระจายไปเก็บยัง OSD node อื่น เกิดขึ้นในส่วน OSD Daemon นี้เอง

2. FileStore

FileStore เป็นชั้นที่อยู่ถัดลงมาจาก OSD Daemon ทำหน้าที่เก็บข้อมูลใน OSD node โดย FileStore นี้จัดเป็น ObjectStore หรือ ระบบเก็บ object ใน Ceph Storage ประเภทหนึ่ง ซึ่งถือเป็นระบบมาตรฐานใน Ceph Storage (ก่อนหน้า Ceph Luminous 1.12 โดยตั้งแต่นั้นระบบมาตรฐานจะเป็น BlueStore ซึ่งจะอธิบายในบทความต่อๆ ไปครับ) ในระบบนี้ object ที่ถูกส่งมาเก็บใน OSD node จะถูกเก็บในลักษณะของไฟล์ลงใน file system ที่อยู่ถัดลงไปเป็นลำดับต่อไป

ในการเก็บ object ลงใน FileStore 1 ครั้ง ประกอบไปด้วยหลาย operation ที่ทำกับ file system ถ้าหาก OSD node ปิดตัวลงก่อนที่ทุก operation จะเสร็จสมบูรณ์ อาจทำให้เกิดปัญหาข้อมูลขาดหายหรือไม่สอดคล้องกันได้ เพื่อป้องกันปัญหานี้ ก่อนการทำ operation กับ file system จะมีการเก็บ operation ที่จะทำ ลงไปในส่วนที่เรียกว่า journal ก่อน จากนั้นจึงค่อยทำ operation เหล่านั้นกับ file system วิธีการนี้เรียกว่าการทำ write-ahead journaling ซึ่งคล้ายกับการทำ write-ahead logging (WAL) ในระบบฐานข้อมูลทั่วไปนั่นเอง ถ้าหากเกิดเหตุการณ์ไม่คาดคิดขึ้นอีก OSD node สามารถป้องกันปัญหาข้อมูลสูญหาย หรือไม่สอดคล้องกันได้ด้วยตนเอง โดยการ replay หรือ ทำ operation ที่เก็บไว้ใน journal ใหม่อีกรอบหนึ่งได้ และเมื่อทำ operation ทั้งหมดเสร็จสมบูรณ์แล้ว operation เหล่านั้นใน journal ก็จะถูกลบออกไปเอง

การทำ write-ahead journal ทำให้ประสิทธิภาพในการเก็บข้อมูลลงใน OSD node ลดลง เพราะต้องทำการเขียนข้อมูลลง disk หลายที่ (เขียน journal และเขียน object ลง file system) เพื่อแก้ไขปัญหานี้ ผู้ออกแบบระบบได้แนะนำให้แยก journal ออกมาเป็นอีก disk หนึ่งและใช้ Solid State Drive (SSD) มาทำ journal เพื่อให้สามารถเขียนข้อมูลได้รวดเร็วขึ้น ทำให้ประสิทธิภาพโดยรวมของ OSD node สูงขึ้น (1 SSD สามารถทำเป็น journal ของหลายๆ OSD node ได้ เพราะ journal นั้นใช้เนื้อที่ไม่มากนั่นเอง)

3. File System

File system เป็นส่วนที่เชื่อม FileStore เข้ากับ disk ด้านล่าง โดย file system มาตรฐานที่ทำงานร่วมกับ FileStore ได้ ได้แก่ xfs, btfs และ ext4 โดย file system นี้จะรับคำสั่งอ่านเขียนไฟล์ต่อมาจาก FileStore และแปลงเป็นคำสั่งในระดับ block เพื่อทำงานกับ disk ด้านล่างอีกทีหนึ่ง

4. Disk

Disk เป็นอุปกรณ์เก็บข้อมูลถาวร หรือที่เรียกว่า secondary storage ในระบบคอมพิวเตอร์ โดยรวมไปถึง Hard Disk Drive (HDD), Solid State Drive (SSD), Redundant Array of Independent Disk (RAID) และ Non-Volatile Memory Express (NVMe) ข้อมูลทั้งหมดที่เก็บอยู่ใน OSD node จะถูกแปลงออกเป็น block ขนาดเท่าๆ กันและเก็บลงไปใน disk เหล่านี้

 

นอกจากหน้าที่ในการอ่านและเขียนข้อมูลแล้ว OSD node ยังคอยตรวจสอบสถานะของ OSD node ข้างเคียงเป็นระยะๆ และรายงานผลไปยัง Monitor node ทำให้ Monitor node ทราบถึงสถานะปัจจุบันของ OSD node ใน RADOS cluster และยิ่งไปกว่านั้น OSD node ยังคอยตรวจสอบความถูกต้องและตรงกันของข้อมูลกับ OSD node อื่นๆ โดยทำ operation ที่เรียกว่า data scrubbing หากพบว่าข้อมูลไม่ตรงกัน หรือข้อมูลมีจำนวนสำเนาไม่ครบตามที่กำหนด ก็จะทำการปรับปรุงแก้ไขด้วยตนเองทันที เพื่อให้ข้อมูลมีความถูกต้องตรงกันในทุก OSD node และมีจำนวนสำเนาครบตามที่กำหนดไว้ ทำให้ข้อมูลที่เก็บอยู่มีความปลอดภัยสูง

 

ด้วยความสามารถในการทำ data scrubbing และ write-ahead journaling ทำให้ OSD node สามารถตรวจหาข้อผิดพลาดในข้อมูล และแก้ไขให้ถูกต้องได้ด้วยตนเอง นอกจากนี้กระบวนการกระจายข้อมูลเพื่อให้ข้อมูลมีความปลอดภัยสูงขึ้น ยังเกิดขึ้นในส่วน OSD node อีกด้วย จึงนับได้ว่า OSD node เป็น node ประเภทที่มีความสามารถและคุณสมบัติที่สำคัญต่อการทำงานของ RADOS cluster และ Ceph Storage เป็นอย่างมาก

สำหรับในบทความตอนต่อไป ผมจะอธิบายถึง node ประเภทสุดท้ายใน RADOS cluster  อันได้แก่ MDS node หรือ Metadata Server node ครับ

 

เกี่ยวกับ Throughwave Thailand

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

 

Credit: ขอขอบคุณภาพทั้งหมดจาก https://www.slideshare.net/buildacloud/ceph-intro-and-architectural-overview-by-ross-turk