2014-04-16

iSCSI adalah teknologi yang biasa digunakan untuk menghubungkan server dengan SAN (storage area network). Biasanya harddisk terhubung langsung dengan server melalui konektor seperti SATA, SCSI, atau SAS. Protokol iSCSI mengemulasikan koneksi SCSI melalui jaringan TCP/IP. Keuntungan utamanya adalah fleksibilitas dalam menyambungkan server dengan storage (atau disk array). Jauh lebih flexible karena koneksinya melalui jaringan TCP/IP. Untuk mendapat throughput yang cukup untuk keperluan transfer data, tentu perlu koneksi yang cukup stabil & setidaknya memiliki bandwidth 1 Gbps melalui Gigabit Ethernet.

Dalam terminologi iSCSI setidaknya ada 2 istilah penting yang perlu kita kenal :

iSCSI Target : ini adalah server yang memiliki storage & membagi-bagikannya kepada server lain yang membutuhkan.

iSCSI Initiator : ini adalah client yang akan butuh storage dengan mengakses iSCSI Target.



Dalam tulisan ini saya akan menulis langkah-langkah sederhana untuk membuat CentOS Linux sebagai iSCSI Target & juga sebagai iSCSI Initiator seperti pada gambar di atas. Server yang akan menjadi iSCSI Target adalah sansvr01, sementara server yang menjadi iSCSI Initiator adalah dev01. Idenya adalah server dev01 membutuhkan tambahan storage, server ini akan menggunakan storage yang di-share oleh sansvr01.

Untuk komunikasi iSCSI, kedua server akan menggunakan network 172.16.10.0/24. Network ini terpisah dari public network 192.168.10.0/24.

Menyiapkan iSCSI Target

Mesin sansvr01 menggunakan CentOS 6.5 & mempunyai konfigurasi IP seperti berikut ini :

Mesin sansvr01 memiliki 2 buah harddisk yaitu sda (boot disk-nya) & sdb (harddisk yang akan dijadikan shared storage). :

Pertama saya perlu menyiapkan /dev/sdb terlebih dulu. Dengan menggunakan perintah fdisk saya membuat 1 partisi /dev/sdb1 :

Saya memilih untuk mengatur shared disk-nya menggunakan LVM. Ada 3 langkah yang perlu dilakukan untuk membuat logical volume yang akan dibagikan ke semua iSCSI Client.

Inisialisasi partisi dengan perintah pvcreate :

Membuat volume group baru dengan perintah vgcreate. Pada contoh ini saya membuat grup baru dengan nama “vg_shareddisk” :

Membuat logical volume yang nantinya akan di-share kepada iSCSI Client. Dalam contoh ini saya membuat sebuah logical volume berukuran 500MB & menamainya “shared01” :

Setelah menyiapkan logical volume, langkah berikutnya adalah menginstal semua paket yang diperlukan oleh iSCSI Server ini. Di RedHat atau CentOS paket-paket yang diperlukan tersedia dalam grup paket “Network Storage Server” :

tgtd adalah nama daemon dari iSCSI Server. Kita bisa melihat berkas-berkas yang termasuk dalam paket scsi-target-utils tadi dengan menggunakan perintah berikut ini :

Berikutnya saya tinggal mendaftarkan logical volume yang sudah dibuat tadi. Mari kita lihat lagi logical volume “shared01” dengan menggunakan perintah lvs :

Logical volume “shared01” memiliki alamat device seperti berikut ini :

Saya perlu mendaftarkan logical volume tersebut ke dalam berkas /etc/tgt/targets.conf. Berkas targets.conf memuat daftar semua harddisk (logical volume) yang dimiliki oleh iSCSI Server. Berikut ini adalah contoh konfigurasi yang perlu ditambahkan ke dalam berkas targets.conf :

Setiap harddisk atau logical volume yang diatur oleh iSCSI Server dikenal sebagai “target”. Tiap target harus memiliki nama yang unik dalam satu jaringan. Ada konvensi penulisan nama target, aturan ini dikenal dengan “iSCSI Qualified Name” (IQN). IQN ini kurang lebih seperti ini aturannya :

Setelah selesai mendaftarkan logical volume, saya bisa langsung mengaktifkan service tgtd seperti pada contoh berikut ini :

Penting juga untuk mengatur tgtd supaya otomatis aktif saat proses booting :

Kita bisa lihat status shared disk dengan perintah tgt-admin seperti contoh berikut ini :

Bila sudah muncul tampilan seperti contoh di atas, itu artinya logical volume sudah siap diakses oleh iSCSI Client.

Kita bisa menambahkan ACL (access control list) pada berkas targets.conf tadi. ACL ini fungsinya untuk membatasi hanya iSCSI Client tertentu saja yang berhak mengakses shared disk tersebut. Pada contoh di bawah ini saya mengatur tgtd supaya hanya mengijinkan akses dari client yang memiliki IP 172.16.10.31 :

Tiap kali kita mengubah konfigurasi berkas targes.conf tadi, kita perlu me-restart tgtd :

Status ACL bisa dilihat dari hasil perintah tgt-admin seperti pada contoh di bawah ini :

Selain perintah tgt-admin tadi, kita juga bisa gunakan perintah tgtadm seperti contoh berikut ini :

Menyiapkan iSCSI Initiator

Mesin dev01 menggunakan CentOS 6.5 & mempunyai konfigurasi IP seperti berikut ini :

Mesin dev01 hanya memiliki satu buah harddisk (/dev/sda) :

Di mesin yang akan menjadi iSCSI Client ini, kita perlu menginstal paket iscsi-initiator-utils. Paket ini bisa juga diperoleh dari YUM grup “iSCSI Storage Client”

Setelah paket iscsi-initiator-utils terpasang, kita perlu mengaktifkan service iscsid dan iscsi :

Penting untuk memastikan kedua servis tersebut aktif otomatis saat proses booting :

Sampai tahap ini mesin dev01 sudah siap untuk mengakses iSCSI Target dari mesin sansvr01. Kita bisa gunakan perintah iscsiadm untuk melakukan scanning semua iSCSI Target yang tersedia (atau lebih tepatnya iSCSI Target yang sudah disediakan oleh sansvr01). Perintahnya seperti contoh di bawah ini :

Bila muncul error “No route to host” seperti ini, kita perlu memeriksa konektivitas antara iSCSI Client (dev01) dan iSCSI Server-nya (sansvr01). Pertama kita bisa gunakan perintah ping.

Bila iSCSI Client dapat melakukan ping ke mesin iSCSI Server, berikutnya kita perlu memastikan port 3260 sudah tersedia (LISTEN) di iSCSI Server. Caranya kita bisa coba telnet port tersebut.

Bila perintah telnet tidak tersedia, kita perlu instal paket telnet terlebih dulu :

Lalu kita coba lagi telnet port 3260 :

Bila iSCSI Client masih belum bisa melakukan telnet ke port 3260, kita perlu cek dulu apakah servis tgtd benar-benar aktif di iSCSI Server :

Bila ternyata servis tgtd sudah aktif & port 3260 sudah tersedia, maka dapat dipastikan port 3260 ini terblok oleh firewall. Kita perlu membuka akses port 3260 ini supaya semua iSCSI Client bisa mengakses shared disk melalui protokol iSCSI. Berikut adalah contoh perintah iptables untuk membuka akses port 3260 dari semua mesin di jaringan 172.16.10.0/24.

Setelah kita selesai mengatur firewall, kita bisa coba lagi untuk melakukan telnet dari iSCSI Client :

Bila perintah telnet sukses mengakses port 3260, kita bisa coba perintah iscsiadm tadi sekali lagi :

Sekarang mesin dev01 sudah mengenali ada 1 shared disk yang disediakan oleh mesin sansvr01 (iqn.2014-04.localdomain:sansvr01.shared01). Setelah itu kita gunakan perintah iscsiadm lagi untuk mengakses iqn.2014-04.localdomain:sansvr01.shared01, kali ini dengan opsi --login.

Bila perintah tadi sukses dijalankan, sekarang dev01 sudah memiliki 1 buah hardisk baru. Mesin dev01 sukses mengakses iSCSI Target “shared01”, terdeteksi oleh dev01 sebagai /dev/sdb :

Setelah mesin dev01 sukses mengakses shared disk “shared01” tersebut, selanjutnya kita bisa gunakan “shared01” ini seperti layaknya internal harddisk. Langkah-langkah untuk menyiapkan iSCSI disk misalnya seperti ini :

Membuat partisi baru :

Membuat filesystem baru pada partisi /dev/sdb1, pada contoh ini saya pilih filesystem ext4 :

Membuat mountpoint untuk /dev/sdb1 tadi :

Mounting partisi /dev/sdb1

Kira-kira seperti itu cara sederhana untuk menyiapkan shared disk via protokol iSCSI sekaligus mengatur iSCSI Initiator-nya.

Show more