Belajar CEPH Storage (Storage Cluster) di ubuntu



Apa itu ceph storage


Ceph storage merupakan software open-source yang memberikan layanan kepada user untuk membangun sebuah storage cluster. Storage cluster merupakan kumpulan node(komputer,server) yang tergabung dalam satu pengelolaan atau satu manejemen untuk menyediakan layanan media penyimpanan lintas komputer (terdistribusi).

Layanan yang disediakan oleh ceph ada 3 :
- Object Based Storage
- Block Basesd Storage
- File System

Ketiganya merupakan jenis layanan ceph dalam menyediakan media penyimpanan reliabel dan fleksibel 
 


  • Object Based Storage
    Merupakan salah satu tipe layanan ceph dalam penyediaan media penyimpanan berbasis object. Layanan Object Based Storage tersebut menyediakan akses langsung ke dalam storage cluster agar klien dapat mengirim object yang akan disimpan ke dalam ceph cluster secara langsung.

  • Block Based Storage
    Layanan ini memungkinkan pengguna untuk membuat sebuah atau beberapa block device dari layanan ceph cluster yang fleksibel dan dapat di akses oleh sistem operasi seolah-olah menjadi salah satu bagian di dalamnya layaknya tambahan media penyimpanan baru seperti harddisk atau media penyimpanan external.

  • File System
    Hampir sama seperti Block Based Storage, File System juga menyediakan media penyimpanan yang dapat di mounting ke dalam sistem operasi, bedanya Block Storage menggunakan driver RBD (RADOS Block Device), sedangkan File system memanfaatkan FUSE. Umumnya RBD digunakan untuk Virtualisasi seperti Openstack, sedangkan File System digunakan seperti kita menggunakan NFS (Network File System).
    Ketiganya memiliki akses antarmuka yang berbeda, tetapi tetap menyimpan di dalam system storage yang sama. Ceph menyimpan data-data didalam pool, dan di setiap pool memiliki mekanisme replikasi, hak akses data seperti kita menyimpan di dalam file system biasanya.  
    Menggunakan algoritma CRUSH, ceph menyediakan penyimpanan yang Reliable, Scalable, Distributed, Fleksibel dan memiliki High Availibility yang mumpuni.

Ceph Cluster

Ceph cluster adalah penyedia layanan ceph storage. Ceph cluster ini terdiri dari sekumpulan komputer (node) yang tergabung dalam suatu mekanisme sistem terpusat yang menyediakan layanan media penyimpanan terdistribusi. Jadi data yang disimpan di dalam ceph clsuter, akan dipecah kemudian di replikasi lalu disebar secara acak ke seluruh node (cluster) yang tergabung di dalamnya. 


Salah satu keunggulan ceph storage yang terbangun di dalam ceph cluster yaitu memungkinkan penggunanya untuk mengembangkan (scale out) sumber daya cluster secara vertical maupun horizontal. Peningkatan secara vertical umumnya di implementasikan ke dalam single node (contohnya peningkatan hardware), sedangkan peningkatan secara horizontal memungkinkan peningkatan jumlah node di dalam cluster. Melalui kemampuan scale out tersebut, pengguna ceph cluster dimungkinkan untuk mengembangkan media penyimpanan yang tidak terbatas kapasitasnya secara mandiri.

Ceph cluster dapat dibangun dari berbagai perangkat keras komputer yang mudah didapatkan di pasaran. Oh iya aplikasi Ceph ini tidak berbayar dan dapat berjalan di sistem operasi Linux seperti OpenSuse, Ubuntu, Red Hat. Seperti kita ketahui bahwa sistem operasi Linux seperti Ubuntu adalah sistem open source yang dapat kita gunakan tanpa harus membayar biaya lisensi.

Ada minimal 3 services yang harus aktif (dibalik layar) ketika menjalankan ceph cluster, antara lain:
  • Monitor daemon
  • Manager daemon
  • OSD
Monitor bertugas:
  • Mengelola penempatan data ke dalam cluster sesuai algoritma CRUSH.
  • Mengelola status (kesehatan) setiap node dan services nya di dalam cluster.
  • Mengelola peta node pada cluster, peta node ini digunakan untuk koordinasi antar node dalam satu cluster. Node yang berperan sebagai monitor ini minimal harus ada satu di setiap cluster dan disarankan ada 3 node yang berfungsi sebagai Monitor atau lebih.

Manager bertugas:
  • Mengelola penggunaan sumberdaya pada masing-masing node
  • Mengelola dan memberi layanan antarmuka untuk menampilkan informasi melalui ceph Dashboard dan REST API.
  • Node yang berperan sebagai Manager ini minimal harus ada satu di setiap cluster dan disarankan ada 2 node yang berperan sebagai Manager di setiap cluster.
OSD bertugas:
  • Mengelola penyimpanan data di dalam ceph cluster.
  • Mengelola replikasi data di dalam cluster.
  • Menyeimbangkan jumlah data di dalam cluster.
  • Setiap node yang akan berperan sebagai OSD ini minimal harus berjumlah 3 buah di setiap clusternya dengan tujuan untuk meningkatkan redundans1 dan ketersediaan data yang disimpan di dalam cluster.


Preconfigration CEPH

Ini adalah topologi yang saya gunakan untuk lab ceph storage




Ada beberapa hal yang perlu disiapkan untuk melakukan konfigurasi ceph, berikut penjabarannya :

  • Konfigurasi network di tiap server menggunakan netplan

Server 1 (admin-00) :
root@admin-00:~# nano /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
  version: 2
network:
  ethernets:
    ens192:
     addresses: [10.10.10.1/27]
     gateway4: 10.23.2.128
     nameservers:
       addresses: [1.1.1.1, 8.8.8.8]
root@admin-00:~# netpan apply

Server 2 (node-00) :
user-node00@node-00:~# nano /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
     addresses: [10.10.10.10/27]
     gateway4: 10.10.10.1
     nameservers:
       addresses: [1.1.1.1, 8.8.8.8]
user@node-01:~# netpan apply
Server 3 (node-01) :
root@node-00:~# nano /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
     addresses: [10.10.10.11/27]
     gateway4: 10.10.10.1
     nameservers:
       addresses: [1.1.1.1, 8.8.8.8]
user@node-01:~# netpan apply
Server 4 (node-02) :
root@node-02:~# nano /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
     addresses: [10.10.10.10/27]
     gateway4: 10.10.10.1
     nameservers:
       addresses: [1.1.1.1, 8.8.8.8]
user@node-02:~# netpan apply

  • Konfigurasi hosts untuk alias dari ip ke host  di admin-00

    root@admin-00:~# nano /etc/hosts
    
    127.0.0.1 localhost
    10.10.10.10 node-00
    10.10.10.11 node-01
    10.10.10.12 node-02
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

  • Remote ssh login tanpa password
     Buat sekali saja keygen-nya di komputer admin-00 lalu salin ke seluruh komputer anggota ceph cluster dengan menjalankan perintah:
    ssh-keygen 
    ssh-copy-id user-node00@node-00
    ssh-copy-id user-node01@node-01
    ssh-copy-id user-node02@node-02

Selesai menyalin seluruh keygen dari admin-00 ke tiga komputer anggota ceph cluster, sekarang saatnya membuat file config di dalam folder .ssh (yang berisi keygen) untuk memetakan user yang akan ceph gunakan sebagai user untuk remote login ssh ke seluruh komputer cluster. Untuk membuat file config tersebut di komputer admin-00 saya bisa menjalankan perintah:

        
root@admin-00:~# nano /etc/hosts

127.0.0.1 localhost
10.10.10.10 node-00
10.10.10.11 node-01
10.10.10.12 node-02
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

  • Konfigurasi sudo tanpa password (di tiap server, ini salah satu contohnya)
user-node00@node-00:~$ sudo visudo
# User privilege specification
root    ALL=(ALL:ALL) ALL
user-node00 ALL=(ALL:ALL) NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD: ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL



Instalasi ceph

Masuk ke langkah selanjutnya yaitu melakukan instalasi aplikasi deployment di dalam komputer admin-00 dan seluruh komputer ceph cluster. Pada komputer admin-00 perlu menambahkan repository ceph versi nautilus terlebih dahulu dengan beberapa step, yang pertama adalah menjalankan perintah:

root@admin-00:~# wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
OK

perintah diatas digunakan untuk menambahkan key repository yang akan ditambahkan. Lanjut ke step berikutnya, saya menjalankan perintah:

root@admin-00:~# echo deb https://download.ceph.com/debian-nautilus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
deb https://download.ceph.com/debian-nautilus/ bionic main

Setelah melalui dua persiapan, sekarang saatnya mulai menginstall ceph cluster, dan hampir seluruh perintah yang saya jalankan berada di komputer admin-00. Untuk menyimpan seluruh konfigurasi, saya membuat sebuah folder baru dan memasukinya dengan perintah

root@admin-00:~/sandbox-ceph# mkdir sandbox-ceph && cd sandbox-ceph

setelah itu saya mulai menginstall aplikasi ceph, ada beberapa cara untuk menginstall aplikasi ceph cluster, berikut ini diantaranya:

  • cephadmin (untuk versi terbaru seperti versi Octopus)
  • ceph-deploy (untuk versi nautilus dan di bawahnya)
  • rook (untuk install ceph di Kubernetes)
  • ceph-ansible
  • juju
  • salt
  • puppet
  • dan install secara manual
tetapi disini saya memilih menggunakan ceph-deploy, tidak ada alasan khusus kenapa saya menggunakan ceph-deploy. Lanjut ya, setelah masuk ke dalam folder sandbox-ceph saya menjalankan perintah:

root@admin-00:~/sandbox-ceph# ceph-deploy new node-00

perintah di atas digunakan untuk melakukan inisiasi node-00 sebagai monitor dan di dalam folder sandbox-ceph anda akan menemui 3 file yang barusan dibuat yang terdiri dari:

  • ceph-deploy-ceph.log
  • ceph.conf
  • ceph.mon.keyring

Setelah itu saya jalankan perintah:

root@admin-00:~/sandbox-ceph# ceph-deploy install --release nautilus node-00 node-01 node-02 
perintah diatas digunakan untuk menginstall seluruh aplikasi ceph di dalam node-00, node-01, node-02 serta mendaftarkan mereka sebagai anggota ceph cluster. 


Lanjut ke step selanjutnya, disini saya menjalankan perintah:

root@admin-00:~/sandbox-ceph# ceph-deploy mon create-initial

perintah di atas digunakan untuk membuat keyring pada monitor server yang nanti akan didistribusikan ke seluruh anggota ceph cluster untuk keperluan monitoring oleh server monitor. 


kemudian pada langkah berikutnya saya menjalankan perintah di bawah ini:

root@admin-00:~/sandbox-ceph# ceph-deploy admin node-00 node-01 node-02

Melalui perintah tersebut keyring yang dibuat akan didistribusikan ke seluruh anggota ceph cluster. Keyring tersebut berfungsi untuk mempermudah penggunaan perintah untuk mengoperasional cluster ceph.


Kemudian pada langkah selanjutnya adalah melakukan instalasi manager daemon di node-00 dengan menjalankan perintah:


root@admin-00:~/sandbox-ceph# ceph-deploy mgr create node-00
Format disk yang akan dijadikan server osd di ketiga node tersebut seperti berikut contohnya:






saya kemudian menjalankan perintah:


root@admin-00:~/sandbox-ceph# ceph-deploy osd create --data /dev/sdb1 node-00  && ceph-deploy osd create --data /dev/sdb1 node-01 && ceph-deploy osd create --data /dev/sdb1 node-02

perintah di atas digunakan untuk mendaftarkan partisi dev/sdb1 minil node-00 ke dalam ceph cluster, jika pendaftaran OSD di node-00 berhasil dilakukan, maka selanjutnya otomatis mendaftar lagi di node berikutnya



Setelah selesai menambahkan ketiga OSD tersebut, untuk mengecek apakah instalasi ceph sudah benar, saya coba menjalankan perintah di bawah ini untuk melihat status ceph cluster:


root@admin-00:~/sandbox-ceph# ssh node-00 sudo ceph -s
  cluster:
    id:     02ab0c39-93bf-4378-912a-ea073497682e
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
 
  services:
    mon: 1 daemons, quorum node-00 (age 30m)
    mgr: node-00(active, since 27m)
    osd: 3 osds: 3 up (since 3m), 3 in (since 3m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs:     
 

Dari keterangan diatas, dapat dilihat bahwa ceph cluster berhasil terinstall dan berjalan dengan benar karena dilihat di bagian health berisi HEALTH_OK. Jika anda juga mendapati pesan seperti di atas,


Konfigurasi Ceph File System pada Ceph Cluster 


Untuk membuatnya, anda bisa menjalankan perintah di bawah dari komputer admin-00:

root@admin-00:~/sandbox-ceph# ceph-deploy mds create node-00

perintah di atas berfungsi untuk mengkonfigurasi node-00 sebagai metadata server, kemudian setelah itu saya akan membuat pool data dan pool metadata di node-00 selaku server metadata. Pool data  dan pool metadata ini yang akan digunakan ceph cluster untuk menampung seluruh data yang disimpan di dalam cluster. 


root@admin-00:~/sandbox-ceph# ssh node-00 sudo ceph osd pool create cephfs_data 128
pool 'cephfs_data' created

perintah diatas untuk membuat pool data, sedangkan untuk membuat pool metadata dengan menjalankan perintah:

root@admin-00:~/sandbox-ceph# ssh node-00 sudo ceph osd pool create cephfs_metadata 8
pool 'cephfs_metadata' created

selesai membuat pool metadata dan pool data, sekarang saya akan menggabungkan kedua 
pool tersebut dalam satu layanan ceph file system dengan menjalankan perintah:

root@admin-00:~/sandbox-ceph# ssh node-00 sudo ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1


Untuk melihat hasilnya saya menjalankan perintah:


root@admin-00:~/sandbox-ceph# ssh node-00 sudo ceph -s
  cluster:
    id:     02ab0c39-93bf-4378-912a-ea073497682e
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
 
  services:
    mon: 1 daemons, quorum node-00 (age 46m)
    mgr: node-00(active, since 42m)
    mds: cephfs:1 {0=node-00=up:active}
    osd: 3 osds: 3 up (since 19m), 3 in (since 19m)
 
  data:
    pools:   2 pools, 136 pgs
    objects: 22 objects, 2.2 KiB
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs:     136 active+clean
 

selain itu, anda bisa lihat di bagian pool, terdapat 2 pool yang sudah aktif dari beberapa perintah yang kita jalankan sebelumnya. Total storage yang tersedia adalah 900GB gabungan dari tiga node (200GB, 500GB dan 200GB).




Cara mengakses layanan ceph file system



Oke, jadi disini sudah terbangun ceph cluster dari 3 node (node-00, node-01 dan node-02). Sekarang node admin-00 disini akan saya jadikan sebagai klien untuk mengakses layanan ceph file system. Agar komputer admin-00 dapat mengakses layanan ceph file system, maka komputer admin-00 membutuhkan keyring yang ada di file: 


  • ceph.client.admin.keyring 


yang telah dibuat sebelumnya dan berada di folder sandbox-ceph. Saya buka isinya dan hasilnya adalah seperti ini:


root@admin-00:~/sandbox-ceph# cat ceph.client.admin.keyring 
[client.admin]
	key = AQAsATxjKjldJRAA/BNXDUiXUzCaXW/kGdj2BA==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"





Setelah itu pada komputer klien saya perlu menginstall aplikasi pendukungnya, yaitu ceph-common dan ceph-fuse dengan menjalankan perintah:




Tunggu sampai proses instalasi berjalan hingga selesai. Setelah itu saya buat folder baru yang akan saya gunakan untuk menampung layanan ceph file system di komputer klien dengan menjalankan perintah:



root@admin-00:~/sandbox-ceph# mkdir /home/user/cfs

perintah di atas digunakan untuk membuat folder bernama cfs. Untuk melakukan mounting layanan ceph file system  ke komputer klien, saya cukup menjalankan perintah:

root@admin-00:~/sandbox-ceph# mount -t ceph node-00:6789:/ /home/user/cfs/ -o name=admin,secretfile=/root/sandbox-ceph/admin.secret


jika ceph file system berhasil di akses, perintah di atas tidak akan menghasilkan pesan error apapun, lalu ketika saya menjalankan perintah pengecekan kapasitas komputer dengan perintah:



root@admin-00:~/sandbox-ceph# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               1.9G     0  1.9G   0% /dev
tmpfs                              395M  892K  394M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   19G  5.9G   12G  34% /
tmpfs                              2.0G     0  2.0G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda2                          974M   78M  829M   9% /boot
tmpfs                              395M     0  395M   0% /run/user/1000
tmpfs                              395M     0  395M   0% /run/user/0
10.10.10.10:6789:/                 8.5G     0  8.5G   0% /home/user/cfs

dari hasil diatas anda bisa lihat bahwa pada folder /home/user/cfs tersedia kapasitas 284GB dari hasil mounting ceph file system di node-00 yang beralamat IP 10.10.10.10:6789. 


Kenapa besarannya hanya 284GB tidak full 900GB, karena secara default ceph file system akan menyediakan sepertiga dari seluruh kapasitas yang tersedia. Hal ini dikarenakan fungsi replikasi setiap file yang disimpan dibuat 3 kali dari jumlah aslinya. Fungsi replikasi tersebut adalah menjaga data yang disimpan agar tetap tersedia apabila terjadi kerusakan pada salah satu OSD server.


Jangan lupa, jalankan perintah:


root@admin-00:~/sandbox-ceph# sudo chmod 777 /home/user/cfs


agar folder cfs hasil mounting dari server ceph file system tersebut dapat ditulisi oleh user yang anda pakai atau user lainnya.


Mengaktifkan Ceph Dashboard di Ceph Cluster Nautilus 



untuk melihat status ceph cluster, kita sudah disediakan aplikasi yang sangat user friendly dibandingkan menggunakan perintah ceph di terminal. Aplikasi ini disebut dengan ceph dashboard. Ceph dashboard adalah salah satu modul yang disediakan ceph cluster untuk mempermudah penggunanya untuk melakukan monitoring terhadap ceph cluster mereka.  Ceph Dashboard ini bekerja dengan memanfaatkan layanan Manager Daemon yang ada di ceph cluster. 



Pada seri ceph cluster sebelumnya saya mengaktifkan Ceph manager Daemon di komputer node-00, maka ceph dashboard ini hanya bisa diinstall dan diaktifkan di komputer node-00.

user-node00@node-00:~$ sudo apt-get install ceph-mgr-dashboard



Selesai instalasi ceph manager dashboard, saya perlu mengaktifkan modul ceph dashboard tersebut  pada ceph cluster dengan menjalankan perintah:




user-node00@node-00:~$ sudo apt-get install ceph-mgr-dashboard



setelah itu saya buat user dengan nama admin dan password 123456789 untuk masuk ke dalam ceph dashboard. Cara membuat user dan password tersebut, saya cukup menjalankan perintah:

Tapi sebelum itu buat dulu file password yang didalamnya adalah password



user-node00@node-00:~$ sudo ceph dashboard ac-user-create admin -i password administrator
{"username": "admin", "lastUpdate": 1664882321, "name": null, "roles": ["administrator"], "password": "$2b$12$54Y6zCbi.qafAB73lQnI4.kSDOrOc6/uQywjBgsHtBG0tYL4w/tZO", "email": null}



dan langkah terakhir adalah saya membuat sertifikat ssl untuk protokol komunikasi ceph dashboard terhadap pengguna, karena ceph dashboard ini bisa diakses via browser, jadi membutuhkan proteksi enkripsi untuk aksesnya. Cara membuat sertifikat ssl di ceph dashboard tersebut cukup menjalankan perintah:



user-node00@node-00:~$ sudo ceph dashboard create-self-signed-cert
Self-signed certificate created


oke, dengan begitu ceph dashboard sudah siap digunakan, untuk melihat ada di port berapa layanan ceph dashboard aktif, saya menjalankan perintah:




user-node00@node-00:~$ sudo ceph mgr services{
    "dashboard": "https://10.10.10.10:8443/"
}


dari situ menunjukkan bahwa modul ceph dsahboard telah aktif di alamat 10.10.10.10:8443 atau bisa menggunakan alamat ip 10.10.10.10, jadi saya bisa akses ceph dashboard dari port 8443 di alamat IP 10.10.10.10, ketika saya coba mengaksesnya dari browser (firefox), berikut ini tampilan halaman login-nya:








kemudian ketika saya login dengan user admin tersebut, berikut ini hasilnya:




Pengelolaan ceph cluster menjadi semakin mudah dengan aplikasi ceph dashboard ini

Komentar

Postingan populer dari blog ini

Konfigurasi DNS Server (Master Zone, Slave Zone, RPZ Zone) di RedHat

Bahas Firewalld di Redhat