Recents

Saturday, June 27, 2015

Ceph Cluster di CentOS 7

Assalamu'alaikum.wr.wb.

Hi all, ketemu lagi dengan saya Iman Agus Trianto. Disini saya akan posting materi Storage Server menggunakan OS CentOS 7. Setelah kemaren saya memposting materi Storage Server, yaitu GlusterFS, nah pada kali ini saya akan berganti dengan Ceph Cluster. Apa itu Ceph Cluster? Penasaran? Yuk langsung masuk materi.



A. Topologi



Tabel Addressing




B. Tujuan

  • Untuk mengetahui konsep Ceph Cluster
  • Untuk mengetahui cara bekerjanya Ceph Cluster
  • Untuk mengetahui cara konfigurasi Ceph Cluster di CentOS 7

C. Bahan

1. VirtualBox
2. GNS3
3. ISO CentOS-7-x86_64-DVD-1503-01
4. Koneksi Internet


D. Konsep Dasar

Ceph Storage Cluster adalah sebuah software yang berbasis opensource yang berfungsi sebagai storage server atau server penyimpanan seperti google drive. Ceph Storage Cluster terdiri dari dua jenis daemon yaitu Ceph OSD Daemon (OSD) berfungsi untuk menyimpan data sebagai objek pada server penyimpanan dan Ceph Monitor (MON) berfungsi untuk menjaga atau memonitoring data master pada server cluster. Dalam membuat ceph storage, minimal harus mempunyai satu Ceph Monitor (MON) untuk memonitoring dan dua Ceph OSD Daemon (OSD) untuk menyimpan data replikasi.

Dalam kasus ini, saya akan membuat satu Ceph Monitor (MON), satu Metadata Server (MDS), dan tiga Ceph OSD Daemon (OSD). Berikut masing-masing dari fungsi yang ada di ceph

1. MON berfungsi untuk memonitoring data pada cluster.

2. OSD berfungsi untuk menyimpan data sebagai objek pada server.

3. MDS berfungsi sebagai file system ceph.

Admin-Node berfungsi untuk menginstalasi ceph ke node1, node2, node3, dan client. Karena, jika kalian installasi satu persatu keyringnya akan berbeda dan ceph sendiri tidak akan saling sinkronisasi. Untuk OSD, menggunakan node1, node2 dan node3 dengan menggunakan hard disk tambahan ke masing-masing node. 

MON dan MDS hanya perlu diinstal pada node1. Untuk clientnya sendiri harus di upgrade kernelnya, karena ceph tidak support menggunakan kernel 2.x. Namun, karena disini saya menggunakan CentOS 7 kernel yang digunakan di CentOS 7 adalah 3.x. Jadi, sudah support ceph, namun apabila ingin update kernelnya kembali juga bisa.


E. Konfigurasi

A. Tahap Persiapan

1. Buat virtual hard disk di VirtualBox pada masing-masing node (node1, node2, node 3). Saya membuat dahulu pada node1. Klik Storage.



2. Pilih Controller: SATA, dan klik Add Hard Disk sebelah kanan gambar CD.


3. Pilih Create new disk.



4. Berikan nama hard disk dan size harddisk yang digunakan untuk harddisk baru, lalu Create. Masing-masing node saya berikan size 10 GB.



5. Terlihat virtual hard disk sudah terbuat untuk node1.



6. Lakukan cara yang sama untuk pembuatan hard disk untuk node2 dan node3.

Node 2.
Node 3.


7. Atur network pada masing-masing node (admin-node, node1, node2, node3) dan client, disini saya menggunakan subnet /24. Setelah di konfigurasi, restart network dan chkconfig agar network otomatis menyala pada saat saat mesin dinyalakan
[root@admin-node ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
[root@admin-node ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@admin-node ~]# chkconfig network on

[root@node1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
[root@node1 ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@node1 ~]# chkconfig network on

[root@node2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
[root@node2 ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@node2 ~]# chkconfig network on

[root@node3 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
[root@node3 ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@node3 ~]# chkconfig network on

[root@client ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
[root@client ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@client ~]# chkconfig network on

Admin-Node.
Node 1.
Node 2. 
Node 3.
Client.


8. Matikan SELinux di masing-masing node (admin-node, node1, node2, node) dan client. Agar tidak di proteksi policy, biar bisa masuk ke sistem.
[root@admin-node ~]# vi /etc/sysconfig/selinux
[root@node1 ~]# vi /etc/sysconfig/selinux
[root@node2 ~]# vi /etc/sysconfig/selinux
[root@node3 ~]# vi /etc/sysconfig/selinux
[root@client ~]# vi /etc/sysconfig/selinux

Admin-Node.
Node 1.
Node 2. 
Node 3.
Client.


9. Hentikan sekaligus martikan beberapa layanan yang sedang aktif seperti, firewall, iptables di masing-masing server maupun client.
[root@admin-node ~]# setenforce 0
[root@admin-node ~]# systemctl stop firewalld 
[root@admin-node ~]# systemctl stop iptables
[root@admin-node ~]# systemctl stop ip6tables
[root@admin-node ~]# systemctl disable firewalld 
[root@admin-node ~]# systemctl disable ip6tables
[root@admin-node ~]# systemctl disable iptables

[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl stop firewalld 
[root@node1 ~]# systemctl stop iptables
[root@node1 ~]# systemctl stop ip6tables
[root@node1 ~]# systemctl disable firewalld 
[root@node1 ~]# systemctl disable ip6tables
[root@node1 ~]# systemctl disable iptables

[root@node2 ~]# setenforce 0
[root@node2 ~]# systemctl stop firewalld 
[root@node2 ~]# systemctl stop iptables
[root@node2 ~]# systemctl stop ip6tables
[root@node2 ~]# systemctl disable firewalld 
[root@node2 ~]# systemctl disable ip6tables
[root@node2 ~]# systemctl disable iptables

[root@node3 ~]# setenforce 0
[root@node3 ~]# systemctl stop firewalld 
[root@node3 ~]# systemctl stop iptables
[root@node3 ~]# systemctl stop ip6tables
[root@node3 ~]# systemctl disable firewalld 
[root@node3 ~]# systemctl disable ip6tables
[root@node3 ~]# systemctl disable iptables

[root@client ~]# setenforce 0
[root@client ~]# systemctl stop firewalld 
[root@client ~]# systemctl stop iptables
[root@client ~]# systemctl stop ip6tables
[root@client ~]# systemctl disable firewalld 
[root@client ~]# systemctl disable ip6tables
[root@client ~]# systemctl disable iptables


B. Konfigurasi Openssh-Clients  (Admin-Node)

1. Openssh-clients ini bertujuan agar ssh ke node lain, tidak diperlukan lagi password untuk login. Biasanya disebut ssh tanpa password, kalian bisa melihat video tutorial yang saya buat disini. Install openssh-clients di admin-node, karena secara default CentOS belum mempunyai fitur ssh-copy-id.
[root@admin-node ~]# yum install openssh-clients -y



2. Edit file hosts, tambahkan IP Address dari node 1 sampai client kemudian berikan nama pada IP tersebut. Fungsinya agar kalian tidak perlu lagi menggunakan IP Address tersebut, jadi menggunakan nama saja yang sudah diinisialisasikan.
[root@admin-node ~]# vi /etc/hosts



3. Masukkan perintah ssh-keygen untuk membuat rsa public key.
[root@admin-node ~]# ssh-keygen 



4. Masukkan perintah ssh-copy-id untuk menyimpan password dari server yang diremote.
[root@admin-node ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node1
[root@admin-node ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2
[root@admin-node ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node3
[root@admin-node ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@client 






B. Mendownload dan Menginstall EPEL Repository CentOS 7 beserta Ceph  (Admin-Node)

1. Download EPEL Repository untuk CentOS 7, masuk dahulu ke direktory /opt.
[root@admin-node opt]# wget -c http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 



2. Keluar dari direktory opt, install beberapa packages untuk CentOS 7, hal ini diperlukan karena apabila install ceph di tidak mengalami error. Karena saya sendiri yang mengalaminya, solusinya install package dibawah ini.
[root@admin-node ~]# yum install -y net-tools snappy leveldb gdisk python-argparse gperftools-libs



3. Download Repository Ceph untuk CentOS 7.
[root@admin-node ~]# yum install -y net-tools snappy leveldb gdisk python-argparse gperftools-libs



4. Install Epel Repository dan Repo Ceph.
[root@admin-node opt]# rpm -ivh epel-release-7-5.noarch.rpm
[root@admin-node opt]# rpm -ivh ceph-release-1-0.el7.centos.noarch.rpm 



5. Sebelum instalasi ceph,  tambahkan priority=1 pada repositori ceph dan instal packages plugin-priorieties.
[root@admin-node opt]# sed -i -e "s/enabled=1/enabled=1\npriority=1/g" /etc/yum.repos.d/ceph.repo
[root@admin-node opt]# yum install yum-plugin-priorities -y



6. Install ceph pada Admin-Node.
[root@admin-node opt]# yum install ceph ceph-deploy -y



C. Membuat Ceph MON, Install Ceph Node 1-Node3, dan Membuat Admin-Keyring

1. Buat direktory untuk penyimpanan konfigurasi ceph. Ketika kalian melakukan perintah ceph-deploy, file konfigurasi ceph-deploy akan menyimpan file konfigurasi ke dalam direktory yang sedang dibuka. Misalnya kalian berada di /etc/ceph-cluster, otomatis jika kalian masuk ke /etc/ceph-cluster maka ceph-deploy akan menyimpan file konfigurasi pada /etc/ceph-deploy.
[root@admin-node ~]# mkdir /etc/ceph-cluster
[root@admin-node ~]# cd /etc/ceph-cluster/
[root@admin-node ceph-cluster]#



2. Membuat MON ke node 1.
ceph-deploy new (initial-monitor-node(s))
[root@admin-node ceph-cluster]# ceph-deploy new node1



3. Menginstal ceph ke node1 sampai node3. Untuk instalasi ceph, kita cukup membuka port ssh pada masing-masing node akan memudahkan kita untuk menginstal ceph. Tunggu proses hingga selesai.
[root@admin-node ceph-cluster]# ceph-deploy install admin-node node1 node2 node3




4. Membuat admin-keyring. Tunggu proses hingga selesai.
[root@admin-node ceph-cluster]# ceph-deploy mon create-initial




D. Memformat Hard Disk untuk Ceph OSD  (Node 1-Node3)

1. Buat partisi hard disk harus ke dalam type xfs dan labelnya harus gpt. Dalam memformat partisi saya menggunakan menggunakan parted, karena lebih mudah.
[root@node1 ~]# parted -s /dev/sdb mklabel gpt
[root@node1 ~]# parted -s /dev/sdb mkpart primary xfs 0% 100%
[root@node1 ~]# mkfs.xfs /dev/sdb1 -f



2. Buat direktori untuk mountingan partisi yang sudah diformat dan mounting partisi tersebut.
[root@node1 ~]# mkdir /ceph-OSD
[root@node1 ~]# mount -t xfs /dev/sdb1 /ceph-OSD/



3. Edit file fstab dan tambahkan script mounting otomatis partisi hard disk yang sudah dimounting. Berfungsi ketika kita restart server tersebut, langsung memounting otomatis partisi tersebut.
[root@node1 ~]# vi /etc/fstab
/dev/sdb1       /ceph-OSD       xfs    defaults  0       0



4. Cek hasil mountingan dengan perintah df -h.
[root@node1 ~]# df -h



5. Lakukan cara yang sama seperti node 1 untuk node 2 dan node 3 dalam hal memformat hard disk sekaligus memounting hard disk yang sudah di format. Kemudian cek hasil mountingan dengan perintah df -h pada node 2 dan node 3.
[root@node2 ~]# df -h
[root@node3 ~]# df -h

Node 2.
Node 3.


E. Membuat Ceph Object Storage atau OSD  (Admin-Node)

1. Buat OSD yang digunakan pada Ceph.
ceph-deploy osd prepare (ceph-node):/directory
[root@admin-node ceph-cluster]# ceph-deploy osd prepare node1:/ceph-OSD node2:/ceph-OSD node3:/ceph-OSD



2. Aktifkan node yang sudah dibuat.
ceph-deploy osd activate (ceph-node):/directory
[root@admin-node ceph-cluster]# ceph-deploy osd activate node1:/ceph-OSD node2:/ceph-OSD node3:/ceph-OSD



F. Mengcopy File Konfigurasi dan Key Ceph ke Node1 sampai Node 3 → (Admin-Node)

1. Mengcopy file konfigurasi Ceph dari admin-node ke node 1 sampai node 3.
ceph-deploy admin (admin-node) (ceph-node)
[root@admin-node ceph-cluster]# ceph-deploy admin admin-node node1 node2 node3



2. Memberikan hak akses read pada file ceph.client.admin.keyring.
[root@admin-node ceph-cluster]# chmod +r /etc/ceph-cluster/ceph.client.admin.keyring



G. Membuat Metadata Server ke Node 1 dan Cek Status Ceph → (Admin-Node)


1. Buat metadata server ke node 1. 
[root@admin-node ceph-cluster]# ceph-deploy mds create node1



2. Mengecek kesehatan Ceph yang berfungsi sebagai active+clean.
[root@admin-node ceph-cluster]# ceph-deploy mds create node1



3. Mengecek quorum status sebagai monitoring cluster.
[root@admin-node ceph-cluster]# ceph quorum_status --format=json-pretty




H. Mengecek Status di Ceph Node 1 sampai Node 3

1. Mengecek status OSD.
[root@node1 ~]# ceph osd stat
[root@node2 ~]# ceph osd stat
[root@node3 ~]# ceph osd stat

Node 1.
Node 2.
Node 3.


2. Mengecek service Ceph.
[root@node1 ~]# service ceph status
[root@node2 ~]# service ceph status
[root@node3 ~]# service ceph status

Node 1.
Node 2. 
Node 3.


3. Melihat OSD aktif atau tidak.
[root@node1 ~]# ceph osd tree
[root@node2 ~]# ceph osd tree
[root@node3 ~]# ceph osd tree

Node 1. 
Node 2.
Node 3.


4. Melihat kapasitas hard disk Ceph.
[root@node1 ~]# ceph df
[root@node2 ~]# ceph df
[root@node3 ~]# ceph df

Node 1.
Node 2.
Node 3.


I. Konfigurasi Client 

1. Instalasi Xen berfungsi agar Ceph lebih stabil karena dalam kasus ini, saya menggunakan virtualisasi bukan real device. Namun, untuk CentOS 7 Xen tidak tersedia dalam packages, Xen hanya tersedia di CentOS 6.x, kalian bisa lihat artikel yang saya temukan https://www.centos.org/forums/viewtopic.php?f=48&t=48074.

2. Bagi yang menggunakan CentOS 6.x, harus upgrade kernel terlebih dahulu karena ceph tidak support kernel 2.x. Ceph support kernel 3.x, dalam hal ini CentOS 7 sudah memakai kernel 3.x. Namun disini saya mengupdate kernel di CentOS 7, supaya lebih baru. Kalau tidak mengupdate pun tidak masalah.
[root@client ~]# yum update kernel -y




3. Cek kernel yang sudah di update pada client.
[root@client ~]# uname -a



J. Menginstall Ceph dan Menyalin Keyring ke Client → (Admin-Node)

1. Menginstall Ceph ke Client.
[root@admin-node ceph-cluster]# ceph-deploy install client




2. Menyalin file keyring ke client dari admin-node.
[root@admin-node ceph-cluster]# ceph-deploy install client



K. Membuat Block Device dari Client → (Client)

1. Buat disk baru dengan menggunakan rbd. Saya kasih size semua hard disk yang sebelumnya telah dibuat sebesar 10 GB.
[root@client ~]# rbd create disk --size 10240
[root@client ~]# rbd ls
[root@client ~]# rbd ls -1



2. Membuat mapping dari disk yang sudah dibuat.
[root@client ~]# rbd map disk
[root@client ~]# rbd showmapped



3. Memformat disk yang sudah dimapping.
[root@client ~]# mkfs.ext3 /dev/rbd0



4. Memounting partisi yang sudah di format. Buat direktori terlebih dahulu.
[root@client ~]# mkdir /ceph-client
[root@client ~]# mount -t ext3 /dev/rbd0 /ceph-client/
[root@client ~]# df -h



L. Membuat Ceph File System dan Uji Coba

1. Buat pool pada Ceph OSD.
ceph osd pool create (nama pool) (nomor) 
[root@client ~]# ceph osd pool create data 10
[root@client ~]# ceph osd pool create metadata 10



2. Buat file system Ceph dari pool yang sudah dibuat.
ceph fs new {nama ceph fs} ((pool) (pool))
[root@client ~]# ceph fs new fsdata metadata data



3. Lihat key dari file ceph.client.admin.keyring, Kemudian salin key tersebut.
[root@client ~]# more /etc/ceph/ceph.client.admin.keyring
key = AQC6MYpVbj6RKBAArq6hnA27lvwU1vgaDbQ4mg==



4. Memounting driver ceph.
mount -t ceph (IP Address MON):6789:/(Direktori untuk ceph) -o name=admin,secretfile=(key ceph.client.admin.keyring)
[root@client ~]# mkdir /mnt/cephfsclient
[root@client ~]# mount -t ceph 192.168.100.171:6789:/ /mnt/cephfsclient -o name=admin,secret=AQC6MYpVbj6RKBAArq6hnA27==



5. Menginstall package ceph-fuse.
[root@client ~]# yum install ceph-fuse -y




6. Memounting file system atau Ceph-Fuse. Buat dahulu direktory untuk memounting.
[root@client ~]# mkdir /mycephfs
[root@client ~]# ceph-fuse -m 192.168.100.171:6789 /mycephfs



7. Cek hasil mountingan dengan df -h.
[root@client ~]# df -h



8. Melakukan uji coba pada Ceph-Fuse file system. Disini saya akan membuat direktory untuk uji coba. Saya membuat dengan nama agan.
[root@client ~]# cd /mycephfs/
[root@client mycephfs]# ls
[root@client mycephfs]# mkdir agan
[root@client cephfsclient]# cd /mnt/cephfsclient/
[root@client cephfsclient]# ls



9. Setelah membuat direktory, disini saya akan uji coba membuat file. Isi file tersebut.
[root@client mycephfs]# touch gan.txt
[root@client mycephfs]# echo "testing bro" >> gan.txt



10. Lihat hasil pembuatan file dan isi file.
[root@client cephfsclient]# cd /mnt/cephfsclient/
[root@client cephfsclient]# ls
[root@client cephfsclient]# more gan.txt



M. Cek Hasil Mountingan Ceph File System → (Node 1-Node 3)

1. Melihat hasil mountingan Ceph file system node 1 sampai node 3.
[root@node1 ~]# ceph df
[root@node2 ~]# ceph df
[root@node3 ~]# ceph df

Node 1.
Node 2. 
Node 3.


Semoga Bermanfaat

Terima kasih

Wassalamu'alaikum.wr.wb.

3 comments:

  1. mau nanya gan? jadi ceph ini hanya untuk replika atau apa gan? jika ada file yang mau diakses client,dan file itu ada di node 1? dariman sistem tau itu ada di node 1 ? atau semua node punya file yang sama?

    ReplyDelete
  2. mau nanya gan? jadi ceph ini hanya untuk replika atau apa gan? jika ada file yang mau diakses client,dan file itu ada di node 1? dariman sistem tau itu ada di node 1 ? atau semua node punya file yang sama?

    ReplyDelete