ได้แน่นอนครับ! Ceph สามารถทำงานบน Ubuntu ได้อย่างยอดเยี่ยม และเป็นหนึ่งในระบบปฏิบัติการที่ได้รับความนิยมสูงสุดสำหรับการสร้าง Ceph Cluster
เราจะใช้เครื่องมือ cephadm ซึ่งเป็นวิธีที่ทันสมัยและแนะนำโดย Ceph ในปัจจุบัน cephadm จะจัดการ Ceph services ทั้งหมดผ่าน Container (โดยใช้ Podman หรือ Docker) ทำให้การติดตั้ง, บริหารจัดการ, และอัปเกรดทำได้ง่ายและเป็นระเบียบมาก
นี่คือขั้นตอนการติดตั้ง Ceph Cluster บน Ubuntu Server 22.04 LTS แบบละเอียดตั้งแต่ต้นจนจบครับ
🎯 เป้าหมาย
สร้าง Ceph Cluster ที่พร้อมใช้งานและทนทาน (High Availability) ประกอบด้วย:
- 3 Nodes: เพื่อให้ได้ Quorum (เสียงข้างมาก) สำหรับส่วนบริหารจัดการ
- ceph-node1 (IP: 192.168.1.101)
- ceph-node2 (IP: 192.168.1.102)
- ceph-node3 (IP: 192.168.1.103)
- Disk: แต่ละ Node ควรมี Disk ว่างอย่างน้อย 1 ลูก (ที่ไม่ใช่ OS Disk) สำหรับใช้เป็น OSD
- OS: Ubuntu Server 22.04 LTS (Jammy Jellyfish)
🛠️ ขั้นตอนที่ 1: เตรียม Server (ทำบนทุก Node)
ขั้นตอนนี้สำคัญมาก ต้องทำบน ceph-node1, ceph-node2, และ ceph-node3 ให้เหมือนกันทั้งหมด
- ตั้งค่า Hostname และ /etc/hosts
เพื่อให้ทุก Node รู้จักกันผ่านชื่อได้ แก้ไขไฟล์ /etc/hosts บนทุกเครื่อง:
Bash
sudo nano /etc/hosts
เพิ่มบรรทัดเหล่านี้เข้าไป:
127.0.0.1 localhost
192.168.1.101 ceph-node1
192.168.1.102 ceph-node2
192.168.1.103 ceph-node3
จากนั้นตั้งค่า hostname ของแต่ละเครื่องให้ตรงกัน เช่น บน ceph-node1:
Bash
sudo hostnamectl set-hostname ceph-node1
- สร้าง User สำหรับจัดการ Ceph
เพื่อความปลอดภัย เราจะสร้าง user ชื่อ ceph-admin และให้สิทธิ์ sudo แบบไม่ต้องถามรหัสผ่าน
Bash
sudo useradd -m -s /bin/bash ceph-admin
sudo echo “ceph-admin ALL=(ALL) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/ceph-admin
- ตั้งค่า SSH Key (ทำจาก ceph-node1)
cephadm จะใช้ SSH เพื่อเชื่อมต่อไปยัง Node อื่นๆ เราจะสร้าง SSH key บน ceph-node1 ในนามของ ceph-admin และคัดลอกไปยัง Node อื่นๆ
Bash
# สลับไปที่ user ceph-admin
sudo su – ceph-admin
# สร้าง SSH key
ssh-keygen -t rsa
# คัดลอก key ไปยัง node อื่นๆ (ระบบจะถามรหัสผ่านของ ceph-admin)
ssh-copy-id ceph-admin@ceph-node1
ssh-copy-id ceph-admin@ceph-node2
ssh-copy-id ceph-admin@ceph-node3
ทดลอง SSH จาก ceph-node1 ไปยัง Node อื่นๆ เพื่อให้แน่ใจว่าไม่ต้องใส่รหัสผ่านแล้ว
- ติดตั้ง Dependencies และ Ceph Repository
Bash
# สลับกลับมาเป็น root หรือ user ที่มี sudo
# อัปเดตระบบและติดตั้งเครื่องมือพื้นฐาน
sudo apt update
sudo apt install -y curl gnupg
# เพิ่ม Ceph Repository Key
curl -fsSL https://download.ceph.com/keys/release.asc | sudo gpg –dearmor -o /etc/apt/trusted.gpg.d/ceph.gpg
# เพิ่ม Ceph Repository (ตัวอย่างสำหรับเวอร์ชัน Reef และ Ubuntu 22.04)
echo “deb https://download.ceph.com/debian-reef/ jammy main” | sudo tee /etc/apt/sources.list.d/ceph.list
- ติดตั้ง cephadm และ Container Runtime
cephadm จะติดตั้ง podman ให้โดยอัตโนมัติหากยังไม่มี แต่เราสามารถติดตั้งเองก่อนได้
Bash
sudo apt update
sudo apt install -y cephadm chrony
- cephadm: เครื่องมือหลักของเรา
- chrony: สำหรับซิงโครไนซ์เวลาของทุก Node ให้ตรงกัน (สำคัญมาก!)
- ปิดการทำงาน Firewall (ชั่วคราว)
เพื่อความง่ายในการติดตั้ง เราจะปิด ufw ไปก่อน ในระบบ Production ควรตั้งค่า rules ให้ถูกต้อง
Bash
sudo ufw disable
🚀 ขั้นตอนที่ 2: Bootstrap Ceph Cluster (ทำบน ceph-node1 เท่านั้น)
ขั้นตอนนี้คือการสร้าง “หัวใจ” ของ Cluster บน Node แรก
- สลับไปที่ user ceph-admin
Bash
sudo su – ceph-admin
- Bootstrap Cluster
คำสั่งนี้จะบอก cephadm ให้เริ่มสร้าง Cluster โดยใช้ IP ของ ceph-node1 เป็น Monitor (MON) ตัวแรก
Bash
# สร้าง directory สำหรับ config
mkdir -p /home/ceph-admin/ceph-cluster
cd /home/ceph-admin/ceph-cluster
# เริ่ม Bootstrap!
cephadm bootstrap –mon-ip 192.168.1.101
ขั้นตอนนี้จะใช้เวลาสักครู่ cephadm จะดึง Ceph container image และเริ่มรัน MON กับ Manager (MGR) ตัวแรกขึ้นมา
- ตรวจสอบผลลัพธ์
เมื่อเสร็จสิ้น cephadm จะแสดงข้อความสำคัญ:
- URL สำหรับเข้าหน้า Dashboard
- Username (admin) และรหัสผ่านสำหรับ Dashboard
- คำสั่งสำหรับเข้าใช้งาน Ceph command-line
สำคัญมาก: cephadm จะสร้างไฟล์ ceph.conf และ ceph.client.admin.keyring ไว้ที่ /etc/ceph/ และจะสร้าง cephadm-ansible-inventory.yaml ไว้ใน directory ที่คุณรันคำสั่ง
- เข้าใช้งาน Ceph Shell
เพื่อให้ใช้คำสั่ง ceph ได้สะดวกที่สุด ให้ใช้ cephadm shell
Bash
sudo cephadm shell
เมื่อเข้าไปใน shell แล้ว ลองรันคำสั่งตรวจสอบสถานะ:
Bash
ceph -s
คุณควรจะเห็นสถานะเป็น HEALTH_WARN เพราะยังมี MON แค่ตัวเดียวและยังไม่มี OSD (Disk)
🌐 ขั้นตอนที่ 3: ขยาย Cluster (ทำบน ceph-node1 ใน cephadm shell)
ตอนนี้เราจะเพิ่ม Node ที่เหลือเข้ามาใน Cluster
- เพิ่ม Host
cephadm จะใช้ SSH ที่เราตั้งค่าไว้เพื่อเข้าไปติดตั้ง Ceph services บน Node ใหม่
Bash
# รันคำสั่งใน cephadm shell
ceph orch host add ceph-node2 192.168.1.102
ceph orch host add ceph-node3 192.168.1.103
- ตรวจสอบสถานะ Host
Bash
ceph orch host ls
# คุณควรจะเห็น Host ทั้ง 3 ตัวอยู่ในรายการ
- เพิ่ม MON และ MGR เพื่อทำ High Availability (HA)
Bash
# กำหนดให้มี MON ทั้งหมด 3 ตัว (กระจายไปตาม Node)
ceph orch apply mon 3
# กำหนดให้มี MGR ทั้งหมด 2 ตัว (Active/Standby)
ceph orch apply mgr 2
cephadm จะเลือก Node ที่เหมาะสมในการวาง services เหล่านี้ให้อัตโนมัติ รอสักครู่แล้วลอง ceph -s ดูอีกครั้ง จะเห็นว่าจำนวน mon และ mgr เพิ่มขึ้น
💾 ขั้นตอนที่ 4: เพิ่ม OSD (Disk สำหรับเก็บข้อมูล)
ขั้นตอนนี้คือการนำ Disk ที่ยังว่างอยู่มาใช้งาน
- ตรวจสอบ Disk ที่พร้อมใช้งาน
Bash
# ใน cephadm shell
ceph orch device ls
# คุณจะเห็นรายการ Disk ทั้งหมดใน Cluster และสถานะ (Available: true)
# เช่น /dev/sdb, /dev/sdc
- สร้าง OSD จาก Disk ที่ว่างทั้งหมด
คำเตือน: คำสั่งนี้จะล้างข้อมูลทั้งหมดใน Disk ที่มีสถานะ Available: true!
Bash
ceph orch apply osd –all-available-devices
cephadm จะเข้าไปฟอร์แมตและสร้าง OSD บน Disk เหล่านั้นให้ รอสักครู่จนเสร็จ
- ตรวจสอบสถานะ Cluster
รัน ceph -s อีกครั้ง ตอนนี้คุณควรจะเห็น:
- osd: 3 osds: 3 up, 3 in (หรือมากกว่านี้ถ้ามี Disk หลายลูก)
- สถานะ Cluster เปลี่ยนเป็น HEALTH_OK สีเขียว! 🎉
- มีพื้นที่ (RAW CAPACITY) แสดงขึ้นมา
📄 ขั้นตอนที่ 5: สร้าง Ceph File System (CephFS)
เมื่อ Cluster พร้อมแล้ว เราก็มาสร้าง File System ที่จะนำไปใช้งานกัน
- สร้าง CephFS Volume
คำสั่งนี้จะสร้างทุกอย่างที่จำเป็น (Data pool, Metadata pool, และ MDS service)
Bash
# ใน cephadm shell
ceph fs volume create my-cephfs
- ตรวจสอบสถานะ
cephadm จะสร้าง Metadata Server (MDS) ขึ้นมาโดยอัตโนมัติ
Bash
ceph -s
# คุณจะเห็น section mds: my-cephfs: 1/1/1 up {0=ceph-nodeX=active}
ยินดีด้วยครับ! ตอนนี้คุณได้ติดตั้ง Ceph Cluster ที่สมบูรณ์และพร้อมใช้งานบน Ubuntu Server เรียบร้อยแล้ว ขั้นตอนต่อไปคือการนำ CephFS นี้ไป mount บนเครื่อง Client (Docker Host) เพื่อใช้งานเป็น Persistent Volume ซึ่งสามารถทำตามขั้นตอนในคำตอบก่อนหน้านี้ได้เลยครับ