Friday, September 15, 2017

Glusterfs - File System Terdistribusi

Halo Sobat Nostra,
Kali ini saya akan mengulas teori dan skenario implementasi glusterfs. GlusterFS adalah software yang berfungsi sebagai file system yang terdistribusi atau dapat juga dikatakan sebagai cloud storage. Mengapa kita membutuhkan software ini? Mudahnya kita ingin menjamin ketersediaan data file tetap utuh. Untuk lebih memahaminya, ambil segelas kopi dan mari perhatikan skenario dibawah ini.


Pada gambar tersebut dapat dilihat ada 2 mesin (server1 & server2) yang berperan sebagai glusterfs dengan membuat 1 volume yang di mount oleh mesin klien (server3) pada folder /data/picture Berikut saya akan memandu cara install & konfigurasi dengan skenario menggunakan 3 mesin sebagai berikut:

- server1: OS=Ubuntu16, IP=172.16.30.1
- server2: OS=Ubuntu16, IP=172.16.30.2
- server3: OS=Ubuntu16, IP=172.16.30.3

Langkah 1: Install glusterfs pada mesin1 & mesin2
sudo apt-get install python-software-properties –y
sudo add-apt-repository ppa:gluster/glusterfs-3.10
sudo apt-get update
sudo apt-get install gluster-server  
- package "python-software-properties" berupa depedencies yang dibutuhkan untuk menjalankan software glusterfs
- Perintah "add-apt-repository ppa:gluster/glusterfs-3.10" untuk mendaftarkan repository gluster versi 3.10 (latest stable version saat ini)
- :) Glusterfs telah terinstall pada mesin anda

Langkah 2: Set peer pada glusterfs
Login pada mesin1 lalu jalankan perintah dibawah
sudo gluster peer probe 172.16.30.2
Note: Disarankan IP dapat diganti dengan hostname

Cek status peer pada mesin dengan perintah
sudo gluster peer status
Hasil yang diharapkan adalah "State: Peer in Cluster (Connected)"

Langkah 3: Buat volume & Jalankan volume yang dibuat
sudo gluster volume create volume1 replica 2
transport tcp 172.16.30.1:/exp1 172.16.30.2:/exp2 force
Cek status volume dengan perintah "sudo gluster volume status"

Untuk menjalankan volume dengan perintah berikut
sudo gluster volume start volume1
Lalu cek kembali status volume dengan perintah "sudo gluster volume status"

Langkah 4: Mount volume yang dibuat tadi pada client (mesin3)
Buat folder mount poin
sudo mkdir -p /data/picture
Mount volume tersebut dengan perintah berikut
sudo mount -t glusterfs 172.16.30.1:/volume1 /data/picture

Cek volume sudah terdaftar dengan benar dengan perintah "df -h"

Sekian dari saya, semoga bermanfaat. :)

Transfer file using script with tool "Expect"

Hallo Sobat Nostra,
Expect adalah program yang bersifat interaktif dimana program ini memunkinkan berdialog dengan program lain saat dijalankan. Sebagai contoh saat kita melakukan ssh ke mesin A maka kita akan diminta untuk mengisi password. Bila kita ingin membuat script yang menjalankan secara otomatis, maka ini akan menjadi kendala.
Mengapa tidak menggunakan cara kunci publik & privat agar tidak perlu password atau menggunakan tool sshpass saja?

Ada kondisi dimana kita tidak dapat menggunakan cara kunci publik dan private, saya mengalaminya saat saya ingin melakukan ssh dan scp ke target dengan OS windows (telah terinstall tool openssh).
Walau saya sudah membuat dan konfig file .ssh\authorized_keys di home user target namun tetap tidak bisa menggunkaan cara ini.

Selanjutnya mengapa tidak menggunakan tool passwordpass? Alasannya tool expect lebih secure karena password disimpan pada file script sedangkan sshpass disisipkan pada perintah di terminal. Bila melihat history command pada terminal maka password yang menggunakan tool sshpass akan langsung terlihat.

Berikut script tool expect serta penjelasannya:


Terima kasih & semoga bermanfaat.

Minio Distributed Mode

Hello, pada kesempatan kali ini, saya ingin sharing tentang Minio. Minio adalah object storage opensource berbasis bahasa pemrograman GO yang dapat digunakan untuk menyimpan “unstructured data” seperti foto, video, document, log files dll. Minio menggunakan istilah “Bucket” yang akan menampung object yang akan disimpan. Tidak hanya dapat diakses dan di manage melalui “command line” Minio juga memiliki Web UI yang memudahkan user untuk memanage object dan bucket. Komponen utama dari minio adalah minio server dan minio client. Selain menggunakan "mc" utility, Minio juga support client menggunakan : Java, Javascript, GO, .Net dan Python dengan menggunakan SDK yang tersedia di official website.

Disini kita akan membahas Minio Distributed Mode “Pool Multiple drive (different machine) into single Object Storage Server” yang berarti terdapat beberapa minio server pada node berbeda yang akan menyediakan service dan akan meningkatkan data reliability dan avaibility. Minio menerapkan teknologi erasure code dan checksum untuk mengatasi data corruption, jadi jika kita kehilangan N/2 dari jumlah drive, data masih dapat di recover. Minio memiliki limit minimum 4 drives dan maksimum 16 drives.

Misal : Terdapat 3 server minio yang akan digunakan untuk distributed mode dan masing-masing memiliki 2 drive untuk penyimpanan.

3 x 2 = 6 drives, jika salah satu server mati, berarti hanya tersisa 4 drive dan masih > dari N/2.
Kita masih dapat menggunakan Minio untuk mode Read and Write, yang berarti data Minio safe dan dapat digunakan dengan full mode jika jumlah drive  = N/2 + 1

Jika 2 server mati, yang artinya kita hanya memiliki 2 drive yang tersisa, maka kita hanya dapat Read data dari Minio.

Oke, kita langsung saja ke How to Setup Distributed Minio, kali ini saya akan menggunakan CentOS 7 64 bit. Sebelum nya ikuti instruksi untuk setup single minio server https://docs.minio.io/docs/minio-quickstart-guide.
  1. Download package dan change permission to executable mode. (lakukan langkah berikut ini disetiap server)
  2. Untuk initial setup jalankan minio single server pada salah satu server untuk mendapatkan ACCESS KEY dan SECRET KEY yang akan di export ke server lainnya.
  3. Create drive yang akan dijadikan penyimpanan dan start minio single server
    maka akan tampil output :
  4. Nah, kita mendapatkan ACCESS KEY dan SECRET KEY yang akan diexport ke server node. Kill proses Minio tersebut denga command : kill -9 “Program PID”. 
  5. Export ACCESS KEY dan SECRET KEY key tersebut ke server node lain dengan command:
  6. Eksekusi command berikut di setiap server untuk menjalankan minio distributed mode
  7. Setelah menjalankan command tersebut disetiap server, maka minio server akan tersinkronisasi secara otomatis.
  8. Buka web browser di <IPSERVER>:9000, masukkan ACCESS KEY dan SECRET KEY yang telah didapatkan
  9. Minio sudah dapat digunakan sebagai object storage.

Wednesday, August 9, 2017

Share code di blog dengan cara Gist GitHub

Berhubung banyak yang mau mulai nulis blog nih, dan sejauh ini kita share code di blog dengan cara standar, saya mau share cara like a boss dengan Gist GitHub

  1. Login ke GitHub, kalau belum punya register dulu ya, lalu masuk ke Gist GitHub
  2. Nah, isi Gist Description dengan deskripsi, Filename dengan nama file berikut dengan extensionnya contoh app.js, lalu tulis kode di textarea yang ada, bisa juga menambah kan dari lebih dari 1 file code dengan menambah Add file. Jika sudah selesai klik tombol Create Public Gist
  3. Setelah selesai, web akan redirect ke halaman file tersebut, copy code untuk embed tersebut
  4. Saat menulis blog, kita dapat meng-embed code tersebut dengan klik HTML
  5.  Paste code tersebut di tempat yang diinginkan, selesai
  6. Berikut contoh share code di Gist GitHub, terlihat lebih profesional dan rapih
  7.   
Happy Blogging
Sumber : About Gists

Wednesday, July 5, 2017

Tunnel aman ke localhost, lets Ngrok 'n roll

Di posting perdana ini, saya akan mengenalkan aplikasi bernama Ngrok (dibaca en-grok). Ngrok adalah aplikasi untuk membuat tunnel menuju ke localhost
Seperti di ilustrasi, programmer mengerjakan kodingan di lokalnya, tanpa perlu mendeploy kode ke server development, klien bisa langsung melihat hasil perkerjaan secara real time di lokal programmer melalui ngrok

Alan Shreve, sang pembuat aplikasi ini menjelaskan kegunaan dari ngrok ini antara lain
  • Sharing website sementara yang berjalan di lokal
  • Demo hackathon tanpa deploy
  • Develop service yang menggunakan webhooks (HTTP Callback) dengan mengizinkan untuk mereplay request
  • Debugging service dengan memantau trafik HTTP
  • Menjalankan service dari mesin yang dilindungi firewall dari internet
Menurut saya ngrok dapat mempercepat proses development dengan melewati proses deploy yang berulang-ulang di development saat di tes oleh klien. Ngrok juga digunakan untuk mengetes desain responsif. Fitur terkerennya menurut saya adalah memonitor trafik yang bisa diakses oleh API

Meski terdengar sakti, ngrok cocok untuk project dengan tim dengan skala kecil dan versi gratisnya memberikan subdomain yang random dan berganti-ganti. Versi berbayarnya paling murah 5$ per bulan

Package ngrok sudah ada di npm, namun jika tidak berbayar lebih baik pakai yang universal. Berikut cara mudah untuk menggunakan ngrok. Dalam contoh ini saya coba membuat tunnel ke aplikasi Hello World di nodeJS

Step 1
Jalankan aplikasi pada suatu port, untuk contoh ini Hello World di NodeJS
Lalu jalankan dengan command "node app" di terminal, maka dengan membuka localhost:3000/world terlihat aplikasi sudah berjalan di port 3000

Step 2
Download dari ngrok, Unzip, dan Jalankan ngrok.exe
Masukkan command sesuai dengan port, dalam contoh ini maka "ngrok http 3000"

Aplikasi Hello World sudah dapat diakses sesuai dengan url terlihat di ngrok.io
Step 3
Buka localhost:4040
Di sini terlihat url dari subdomain ngrok.io, coba masukkan url sesuai diikuti '/world' atau kata-kata lain. Terlihat tunnel sudah sesuai dengan localhost:3000
Di localhost:4040, semua request, response dengan lengkap dapat terlihat
Data ini dapat diolah dari bentuk JSON dengan url localhost:4040/api/requests/http


Untuk mendalam dan lebih lengkap bisa cek di dokumen ngrok
Happy Code

Rukaan Nasrullah Adha

Sumber :