Tuesday, June 30, 2015

Recovery Root Password di Centos 6.x

Mau bahas soft topik dulu sekalian catetan, yups recovery root password di centos 6.x penting gak penting sih. Tapi kalo misalnya kita bener-bener lupa root password bisa bahaya. Maka dari itu sebagai sys-ad ataupun sys-eng wajib tau cara untuk recovery root password.

Ada beberapa cara sebenernya untuk recovery root password di CentOS 6.x , yaitu :
  • Booting ke single user mode.
  • Menggunakan boot disk dan edit file passwd.
  • Mounting drive kita ke OS lain, lalu ubah file passwd.
Namun cara paling mudah adalah booting lalu masuk ke single user mode, teknik ini juga paling sering digunakan apabila temen-temen ada yang mengambil ujian rchsa sampai rhce. Nah, kali ini kita akan coba recovery root password dengan cara booting ke single user mode.


1) Reboot lalu "interrupt" ketika booting di GRUB stage dengan tombol "space" atau "arrow"


Setelah proses reboot akan muncul gambar diatas, masuk ke grub stage dengan menakan tombol "space" atau "arrow". Maka akan muncul gambar seperti dibawah ini :


Setelah muncul gambar diatas, tekan tombol "e" untuk mengedit kernel parameter sehingga kita masuk ke runlevel 1 ketika proses booting selanjutnya. 

Nah ketika muncul gambar diatas pilih opsi ke-2, lalu tekan tombol "e" lagi untuk edit parameter.

2) Modifikasi kernel parameter untuk masuk ke single user mode pada booting selanjutnya







Setelah masuk tambahkan 1 setelah rhgb quite lalu tekan ENTER, setelah tekan ENTER maka kita akan kembali lagi ke grub loader seperti dibawah ini.















Tekan "b" untuk booting, maka pada booting selanjutnya kita akan masuk ke single user mode.

3) Ganti root password dari single user mode








Saat ini kita sudah berada di single user mode, tahap selanjutnya kita hanya perlu mengganti password root kita dari sini dengan command passwd.









Setelah selesai masukan password root baru maka selanjutnya kita tinggal reboot kembali. 

Done! Semoga bermanfaat guys.

Baca Juga : Recover Root Password di CentOS 7.

Sunday, June 28, 2015

Konsep dan Implementasi GlusterFS CentOS 6.x

GlusterFS adalah sebuah distributed file system yang dapat digunakan oleh user yang sifatnya fleksibel. Saat ini penggunaan GlusterFS sangat populer karna banyak keuntungan yang diperoleh ketika melakukan implementasi ini dilapangan.

Lalu Apa Keuntungan Menggunakan GlusterFS?
  • Innovasi - Penggunaan GlusterFS mengeliminasi metadata, ini artinya performance GlusterFS akan sangat jauh meningkat dibanding menggunakan teknologi file sharing konvensional.
  • Flexibel - GlusterFS dapat beradaptasi dengan penambahan dan pengurangan ukuran data.
  • Simple - Mudah dimanage dan prosesnya independent.
  • Skala Linier - Availability mencapai petabytes dan seterusnya.

Apa yang Membuat GlusterFS Lebih Populer Ketimbang Distributed File System Lainnya?
  • Performance - Tidak adanya metadata server membuat proses file sytem lebih cepat.
  • Terjangkau - Dapat di implementasikan di semua komoditas hardware.
  • Fleksibel - GlusterFS adalah sebuah software filesystem dan dapat memproses native filesystem, selain itu dapat juga beradaptasi dengan perubahan size data.
  • Opensource - GlusterFS adalah software opensource.

Konsep dan Terminologi GlusterFS
  • Brick - Brick adalah sebuah direktori yang di shared di antara trusted storage pool.
  • Trusted Storage Pool - Kumpulan shared file/direktori yang didasarkan pada desain protocol.
  • Block Storage - Device yang dilewati data yang bergerak melintasi sistem dalam bentuk block.
  • Cluster - Dalam istilah manajemen storage, cluster dan trusted storage pool mempunyai makna yang sama dari kolaborasi storage server bedasarkan protocol yg didefinisikan.
  • Distributed File System - Sebuah file sistem dimana data tersebar di node yang berbeda dimana pengguna dapat mengakses file tanpa perlu mengetahui dimana lokasi file sebenarnya. 
  • FUSE - Sebuah module kernel yang memungkinkan user untuk dapat membuat file system diatas kernel tanpa melibatkan dan mengganggu proses berjalannya kernel code.
  • Glusterd - Adalah sebuah daemon untuk glusterfs management dan merupakan backbone dari gluster file system yang akan berjalan sepanjang waktu selama server dalam keadaan aktif.
  • POSIX - Portable Operating System Interfaces (POSIX) adalah sebuah standard yang didefinisikan oleh IEEE sebagai solusi dari kompatibilitas antara unix-varian dalam bentuk API.
  • RAID - Sebuah teknologi storage yang mampu meningkatkan storage reliability dengan cara redudancy.
  • Subvolume - Sebuah brick yang telah diproses setelah ditranslasikan.
  • Translator - Sekumpulan code yang menjalankan basic action yang ditrigger oleh user dari mount point. Translator dapat menghubungkan satu atau lebih subvolume.
  • Volume - Sebuah kumpulan logical dari brick. Semua proses operasi dalam volume adalah bedasarkan tipe yang didefinisikan oleh user.

Tipe Volume GlusterFS
Ada beberapa macam tipe volume dalam glusterfs, sebelum implementasi ada baiknya kita mengetahui tipe volume ini karna ada hubungannya dengan cara kerjanya nanti dilapangan. Dibawah ini kira-kira ilustrasi gambaran tipe-tipe volume GlusterFS yang umumnya sering digunakan.

Distributed Volume



Replicated Volume



Stripped Volume



Distributed Replicated Volume




Instalasi & Provisioning GlusterFS di CentOS 6.5

Dalam tutorial kali ini kita akan mencoba implementasi GlusterFS dengan tipe volume replicated. Topologinya kira2 adalah sebagai berikut.


Notes :
1) Di lab ini selinux dalam keadaan disabled. 
Untuk mematikan secara permanent edit file /etc/selinux/config lalu ubah parameter SELINUX menjadi disabled.
2) Di lab ini iptables dalam keadaan off.
Untuk mematikan service iptables jalankan command /etc/init.d/iptables off  lalu buat persistent agar service tidak nyala saat booting chkconfig iptables off.
3) Tambahkan parameter di bawah ini di dalam file /etc/hosts
192.168.227.154 server1
192.168.227.155 server2
192.168.227.156 glufscl

- Enable EPEL Repository di Semua Server (Server1, Server2 & GlufsClient)
CentOS, 32 bit:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
CentOS, 64 bit:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

- Enable GlusterFS Repository di Semua Server (Server1, Server2 & GlufsClient)
# wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo

- Install Dependency di Semua Server (Server1, Server2 & GlufsClient)
# yum -y install pyxattr python-webob1.0 python-paste-deploy1.5 python-sphinx10 git autoconf automake bison dos2unix flex fuse-devel libaio-devel libibverbs-devel libtool libxml2-devel lvm2-devel make openssl-devel pkgconfig python-devel python-eventlet python-netifaces python-paste-deploy python-simplejson python-sphinx python-webob readline-devel rpm-build systemtap-sdt-devel tar

- Install Software GlusterFS di Semua Server, Nyalakan Service & Buat Persistent On Boot
# yum install glusterfs{-fuse,-server}
# yum install xfsdump xfsprogs
# /etc/init.d/glusterd start ; chkconfig glusterd on

- Tambahkan Fuse Module Hanya di Server GlusterFS Client (192.168.227.156)
# /sbin/modprobe fuse

Lalu, buat persistent on boot.
# echo "modprobe fuse" > /etc/sysconfig/modules/fuse.modules
# chmod +x /etc/sysconfig/modules/fuse.modules


Konfigurasi GlusterFS
1) Create Trusted Pool
Jalankan command dibawah ini di  'Server1'.
# gluster peer probe server2

Jalankan command dibawah ini di  'Server2'.
#gluster peer probe server1

2) Set Up GlusterFS Volume
Buat direktori yang akan berfungsi sebagai brick di kedua server (Server1 & Server2).
# mkdir /data/brick/gv0

Setelah itu, definisikan volume di salah satu server. Ingat hanya di salah satu server saja, kita akan coba di Server1.
# gluster volume create gv0 replica 2 server1:/data/brick/gv0 server2:/data/brick/gv0 force
# gluster volume start gv0

Jika sudah, lakukan pengecekan bahwa volume sudah selesai dibuat.
# gluster volume info

Jika output di kedua server (server1&server2) seperti dibawah ini harusnya sudah OK, maka kita hanya tinggal mounting saja dari Server GlusterFS Client.

Volume Name: gv0
Type: Replicate
Volume ID: cade1291-b1bc-4398-8862-afb4a27a4601
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1:/data/brick/gv0
Brick2: server2:/data/brick/gv0
Options Reconfigured:
performance.readdir-ahead: on

3) Mount GlusterFS Client
Langkah terakhir lakukan mounting dari server mount point, kalo di lab kali ini dari server 192.168.227.156 mount ke server1(192.168.227.154). 

Buat Direktori
[root@glufscl ~]# mkdir /glusterfs

Mounting Client Node ke Server Node
[root@glufscl ~]# mount -t glusterfs server1:/gv0 /glusterfs/

Check & Re-Check
[root@glufscl ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        18G  2.6G   15G  16% /
tmpfs           242M   72K  242M   1% /dev/shm
/dev/sda1       291M   34M  242M  13% /boot
server1:/gv0     18G  2.6G   15G  16% /glusterfs

Buat Persistent On Boot
Kalo mau buat persistent on boot jangan lupa edit file /etc/fstab lalu tambahkan parameter ini.
server1:/gv0 /glusterfs glusterfs defaults,_netdev 0 0
Lalu apabila sudah selesai save file & close. Untuk testingnya, coba reboot server kamu lalu cek lagi dengan command df -h. Apabila terdapat output seperti dibawah ini maka berarti sudah persistent.

[root@glufscl ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        18G  2.6G   15G  16% /
tmpfs           242M   72K  242M   1% /dev/shm
/dev/sda1       291M   34M  242M  13% /boot
server1:/gv0     18G  2.6G   15G  16% /glusterfs

Cek Create File, Pastikan Sudah Replicated di Seluruh Node
Dari node glusterfs client (192.168.227.156) coba create file di dalam direktori /glusterfs, lalu cek di server1 & server2 di dalam direktori /data/brick/gv0/ apakah terdapat file yang sama atau tidak.
  • Buat File di Server GlusterFS Client (192.168.227.156)
    [root@glufscl glusterfs]# echo "Arif & Desy" >> ArifDSFile.txt[root@glufscl glusterfs]# cat ArifDSFile.txt
    Arif & Desy
  • Cek di Node Server1 & Server2 (192.168.227.154 & 192.168.227.155)
    Server1
    [root@server1 ~]# ll /data/brick/gv0/
    total 8
    -rw-r--r-- 2 root root 12 Jun 28 23:29 ArifDSFile.txt

    [root@server1 ~]# cat /data/brick/gv0/ArifDSFile.txt
    Arif & Desy


    Server2
    [root@server2 ~]# ll /data/brick/gv0/
    total 8
    -rw-r--r-- 2 root root 12 Jun 28 23:29 ArifDSFile.txt

    [root@server2 ~]# cat /data/brick/gv0/ArifDSFile.txt
    Arif & Desy

Done! Semoga bermanfaat.

Thursday, June 25, 2015

Redirection Output ke Remote Server di Linux

Redirection output file merupakan salah satu teknik manipulasi file output ketika kita mengolah file. Untuk menguasai scripting seperti bash scripting maka menguasai teknik redirection file di linux merupakan sebuah kewajiban bagi seorang system administrator/ system engineer.

Sebagai catatan, berikut contoh-contoh redirection file output yang sering digunakan di dunia persilatan.


  • Redirect Output Backup File dari Local ke Remote Server
    # tar -zcf - /direktori | ssh username@server "cat > backup.tar.gz"

  • Redirect Output dari Local ke Remote Server
    echo "text" | ssh username@arifzulfikarp.com "cat > file.txt"

  • Backup Local Mysql Database ke Remote Server
    mysqldump --opt database_name | gzip -c | ssh username@arifzulfikarp.com "cat > /remote/dir/DB_azpbackup.gz"

    Atau, bisa juga menggunakan tar untuk kompresi backup filenya.

    mysqldump | tar cf - | gzip -c | ssh username@arifzulfikarp.com "cat > /remote/dir/DB_backup.tar.gz"

  • Execute Command di Remote Server
    # ssh username@arifzulfikarp.com "uname -a"

    Atau, execute command di remote server namun outputnya di save di local.

    ssh user@arifzulfikarp.com "mysqldump -u DB_username -pDB_password DB_name | gzip -c" > /local/dir/DB_backup.gz

    Notes :
    1) Parameter -p butuh value input password database.
    2) Dari contoh 3 dan 4 diatas, tanda " bisa menjadi pembeda mana file yang outputnya akan diredirect di local mana file yang outputnya akan di redirect di remote server.

Semoga bermanfaat.

Friday, June 19, 2015

High Availability Cluster Failover Menggunakan Pacemaker, Corosync dan PCS di CentOS 7

Teknologi High Availabilty menggunakan pacemaker pada dasarnya serupa dengan heartbeat, namun konon katanya memiliki banyak keunggulan serta merupakan teknologi yang lebih baru dan fresh ketimbang heartbeat.


Di dunia persilatan banyak sekali skenario implementasi high availability, namun seperti judul tulisan kali ini kita akan fokus pada "Penerapan high availability pada 2 node yang menjalankan web services dengan metode cluster failover".

Untuk membuat system seperti ini kita akan membuat simpel cluster. Dimana Virtual IP Address akan merepresentasikan sebuah cluster node (terlepas dari berapa pun jumlah servernya). Pada intinya client hanya butuh virtual ip address yang kita buat saja, mereka tidak butuh mengetahui ip server ktia.

Dalam kondisi normal, topologi dari sistem yang akan kita buat akan berjalan seperti dibawah ini.



Dari gambar topologi diatas apabila pada kondisi tertentu terjadi error pada node01 misalnya system crash, daemon service error, node unreacheble, dsb maka node02 akan otomatis menggantikan peran node01 dan menjalankan layanan web service dalam cluster tsb.



Pada skenario inilah terlihat fungsi penting dari virtual ip dalam cluster node tsb, pada sisi klien tidak perlu ada perubahan sama sekali. Mereka tidak tahu sama sekali apabila web server di node01 crash karna IP Address yang mereka kunjungi adalah Virtual IP Address.

Untuk membangun cluster seperti diatas, kita membutuhkan beberapa komponen.
  • Definisikan service yang ingin kita implementasikan (Webserver, Mailserver, dsb).
  • Resource manager (Pacemaker).
  • Messaging component untuk komunikasi membership dalam cluster (Corosync).
  • Optional : File synchronize yang menjaga file system konsisten dengan semua cluster node (DRBD atau GlusterFS). 
  • Optional : Cluster manager untuk memanage cluster settings dalam semua nodes (PSC).

PRE-INSTALASI
- Konfigurasi static IP Address,
- Konfigurasi static hostname,
- Pastikan kedua node tsb (node01 dan node02) ada dalam subnet yang sama.

Cek Node01
[root@node01 ~]# uname -n
node01
[root@node01 ~]# ip addr show | grep "inet "
    inet 127.0.0.1/8 scope host lo
    inet 192.168.227.139/24 brd 192.168.227.255 scope global dynamic eno16777736

Cek Node02
[root@node02 ~]# uname -n
node02
[root@node02 ~]# ip addr show | grep "inet "
    inet 127.0.0.1/8 scope host lo
    inet 192.168.227.140/24 brd 192.168.227.255 scope global dynamic eno16777736


Apabila belum sesuai seperti diatas maka setting dulu konfigurasinya sebagai berikut ini.

Konfigurasi Hostname
Node01
[root@node01 ~]# vi /etc/hostname 
#Isi file ini menjadi node01#
node01

Node02
[root@node02 ~]# vi /etc/hostname 
#Isi file ini menjadi node02#
node02

Konfigurasi Network
Node01
[root@node01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
##Isi parameter dibawah menjadi seperti dibawah ini##
HWADDR=00:0C:29:90:97:93
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=f9292821-a79f-4104-abab-3b5e6f0b7623

ONBOOT=yes
IPADDR=192.168.227.139
NETMASK=255.255.255.0
GATEWAY=192.168.227.1

Save file lalu restart service
[root@node01 ~]# systemctl restart network.service

[root@node01 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.227.139 node01
192.168.227.140 node02

Node02
[root@node02 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
##Isi parameter dibawah menjadi seperti dibawah ini##
HWADDR=00:0C:29:FD:BC:46
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=f9292821-a79f-4104-abab-3b5e6f0b7623

ONBOOT=yes
IPADDR=192.168.227.140
NETMASK=255.255.255.0
GATEWAY=192.168.227.1

Save file lalu restart service
[root@node02 ~]# systemctl restart network.service

[root@node02 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.227.139 node01
192.168.227.140 node02

Turn Off Firewall dan Selinux
Node01
[root@node01 ~]# systemctl status firewalld.service
[root@node01 ~]# setenforce 0

Node02
[root@node02 ~]# systemctl status firewalld.service
[root@node02 ~]# setenforce 0



TAHAP INSTALASI & KONFIGURASI AWAL
Instalasi Package
Node01
[root@node01 ~]# yum install corosync pcs pacemaker

Node02
[root@node02 ~]# yum install corosync pcs pacemaker

Notes
Kita akan menggunakan PCS untuk memanage cluster. Setelah install package diatas, maka system akan secara otomatis membuat user hacluster. Sebelum lanjut ke tahap selanjutnya, change password hacluster di kedua node agar PCS dapat digunakan.


Ganti Password User hacluster
Node01
[root@node01 ~]# passwd hacluster

Node02
[root@node02 ~]# passwd hacluster


Turn on pcsd service di kedua node
Node01
[root@node01 ~]# systemctl start pcsd

Node02
[root@node02 ~]# systemctl start pcsd

Authentikasi Cluster Node, Gunakan Password yg dari Tahap Setting Password hacluster
Node01 (Lakukan hanya di Node01)
[root@node01 ~]# pcs cluster auth node01 node02

Notes
Setelah selesai tahap diatas, maka pada tahap selanjutnya kita bisa mengontrol cluster dengan PCS dari node01, jadi konfigurasi gak perlu diulang di semua server karna sudah bisa dikontrol dari node01.

Buat Cluster Lalu Tambahkan Node
[root@node01 ~]# pcs cluster setup --name cluster_web node01 node02

Start Cluster yang Telah Dibuat
[root@node01 ~]# pcs cluster start --all

Cek & Verifikasi Status Cluster
[root@node01 ~]# pcs status cluster
Cluster Status:
 Last updated: Fri Jun 19 18:08:01 2015
 Last change: Fri Jun 19 11:38:57 2015
 Stack: corosync
 Current DC: node02 (2) - partition with quorum
 Version: 1.1.12-a14efad
 2 Nodes configured

 1 Resources configured

Cek Status Node Cluster
[root@node01 ~]# pcs status nodes
Pacemaker Nodes:
 Online: node01 node02 
 Standby: 

 Offline:

[root@node01 ~]# corosync-cmapctl | grep members
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(192.168.227.139) 
runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.1.status (str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(192.168.227.140) 
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1

runtime.totem.pg.mrp.srp.members.2.status (str) = joined

[root@node01 ~]# pcs status corosync

Membership information
----------------------
    Nodeid      Votes Name
         1          1 node01 (local)

         2          1 node02


KONFIGURASI CLUSTER
Cek Stonith Status & Turn Off
[root@node01 ~]# crm_verify -L -V
error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
 error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
 error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity

 Errors found during check: config not valid

Notes
Apabila output seperti diatas, maka masih ada error di STONITH (Shoot The Other Node In The Head). STONITH adalah mekanisme untuk memastikan agar cluster tidak berakhir dengan dua node yang mereka keduanya aktif dan mengklaim sebagai pemilik IP virtual, teknik ini juga disebut sebagai split brain. Karna cluster kita sederhana maka kita bisa matikan saja, gunakan command.

[root@node01 ~]# pcs property set stonith-enabled=false

Konfigurasi Quorom
Setelah selesai konfigurasi behavior cluster, maka kita masuk ke tahap konfigurasi Quorom. Quorom adalah minimum jumlah nodes dalam cluster yang harus diaktifkan agar cluster dapat berjalan. Teknik ini bisa sangat berguna ketika banyak node memprovide computing power secara simultan. Nah ketika jumlah node terlalu rendah, maka sebaiknya cluster dihentikan daripada mendeliver service yang tidak dapat berjalan sebagaimana mestinya. Secara default, quorum dianggap terlalu rendah apabila jumlah node lebih kecil dari dua kali jumlah node yang aktif. Nah untuk cluster yang terdiri dari 2 node, maka berarti kedua node tersebut harus ada agar cluster dapat berjalan.

Namun dalam praktek kali ini kita akan ignore low quorom, gunakan command dibawah ini.

[root@node01 ~]# pcs property set no-quorum-policy=ignore
[root@node01 ~]# pcs property
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: cluster_web
 dc-version: 1.1.12-a14efad
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false

Set Virtual IP Address
[root@node01 ~]# pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.227.138 cidr_netmask=32 op monitor interval=30s
[root@node01 ~]# pcs status resources

 virtual_ip (ocf::heartbeat:IPaddr2): Started 

Verifikasi Virtual IP Address Sudah Aktif
[root@node01 ~]# ping 192.168.227.138

Untuk Melihat Current Owner Resource Virtual IP Address, Gunakan Command.
[root@node01 ~]# pcs status|grep virtual_ip

 virtual_ip (ocf::heartbeat:IPaddr2): Started node01 


KONFIGURASI APACHE WEB-SERVICES
Install Apache
Node01
[root@node01 ~]# yum install httpd -y

Node02
[root@node02 ~]# yum install httpd -y

Buat Script Test-Mechanism di Node01 dan Node02
Node01
[root@node01 ~]# vi /etc/httpd/conf.d/serverstatus.conf
#isi dengan konfigurasi seperti dibawah ini#
Listen 127.0.0.1:80
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1

</Location>

Node02
[root@node02 ~]# vi /etc/httpd/conf.d/serverstatus.conf
#Isi dengan konfigurasi seperti dibawah ini#
Listen 127.0.0.1:80
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1

</Location>

Disabled Listen Statement, Untuk Menghindari Apache Listen ke Port yg Sama
Node01
[root@node01 ~]# sed -i 's/Listen/#Listen/' /etc/httpd/conf/httpd.conf

Node02
[root@node02 ~]# sed -i 's/Listen/#Listen/' /etc/httpd/conf/httpd.conf

Start Apache dan Verifikasi Status Page yg Telah Dibuat Bekerja
Node01
[root@node01 ~]# systemctl restart httpd.service
[root@node01 ~]# wget http://127.0.0.1/server-status

Node02
[root@node02 ~]# systemctl restart httpd.service
[root@node02 ~]# wget http://127.0.0.1/server-status

Buat Web-Page Sederhana di Document Root Apache
Node01
[root@node01 ~]# vi /var/www/html/index.html
##Isi seperti dibawah ini##
<html>
<h1>node01</h1>
</html>

Node02
[root@node02 ~]# vi /var/www/html/index.html
##Isi seperti dibawah ini##
<html>
<h1>node02</h1>
</html>

Buat Agar Cluster yg Mengkontrol Apache

Pertama, Stop Apache di Kedua Node
Node01
[root@node01 ~]# systemctl stop httpd

Node02
[root@node02 ~]# systemctl stop httpd

Kedua, Konfigurasi Apache Agar Listen ke Virtual IP Address
Node01
[root@node01 ~]# echo "Listen 192.168.227.138:80"|sudo tee --append /etc/httpd/conf/httpd.conf

Node02
[root@node02 ~]# echo "Listen 192.168.227.138:80"|sudo tee --append /etc/httpd/conf/httpd.conf

Sekarang apache sudah siap dikontrol oleh cluster.

Ketiga, Manage Cluster dengan PCS
[root@node01 ~]# pcs resource create webserver ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min
[root@node01 ~]# pcs constraint colocation add webserver virtual_ip INFINITY
[root@node01 ~]# pcs constraint order virtual_ip then webserver
[root@node01 ~]# pcs constraint location webserver prefers node01=50

Keempat, Verifikasi PCS Constraint dan Restart Cluster
[root@node01 ~]# pcs constraint
Location Constraints:
  Resource: webserver
    Enabled on: node01 (score:50)
Ordering Constraints:
  start virtual_ip then start webserver (kind:Mandatory)
Colocation Constraints:

  webserver with virtual_ip (score:INFINITY)

[root@node01 ~]# pcs cluster stop --all && sudo pcs cluster start --all
node02: Starting Cluster...

node01: Starting Cluster...

[root@node01 ~]# pcs status
Cluster name: cluster_web
Last updated: Fri Jun 19 18:56:03 2015
Last change: Fri Jun 19 18:28:59 2015
Stack: corosync
Current DC: node01 (1) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
2 Resources configured


Online: [ node01 node02 ]

Full list of resources:

 virtual_ip (ocf::heartbeat:IPaddr2): Started node01 
 webserver (ocf::heartbeat:apache): Started node01 

PCSD Status:
  node01: Online
  node02: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled

  pcsd: active/enabled

Dari output hasil verifikasi diatas terlihat bahwa virtual ip dan web service berjalan di node01.


Kelima, Akses Virtual IP dari Web-Browser & Pastikan Output adalah "Node01"
Akses web-service dari browser ke http://192.168.227.138



Keenam, Test Fail-Over dan Pastikan Berjalan Sesuai
Matikan node01 dari Cluster 
[root@node01 ~]# pcs cluster stop node01

Hit Virtual IP Address dari browser, seharusnya outputnya adalah "Node02".



Terakhir, Enables Cluster Component Persistent (Start Up Ketika Booting).
Node01
[root@node01 ~]# systemctl enable pcsd
[root@node01 ~]# systemctl enable corosync
[root@node01 ~]# systemctl enable pacemaker

Node02
[root@node02 ~]# systemctl enable pcsd
[root@node02 ~]# systemctl enable corosync
[root@node02 ~]# systemctl enable pacemaker

NOTES PENTING
Pada tahap ini ketika reboot cluster tidak akan berjalan, ketika di cek di /var/log/messages akan ada output seperti dibawah ini.

Jun 19 22:43:36 node01 corosync: Starting Corosync Cluster Engine (corosync): [FAILED]^M[  OK  ]
Jun 19 22:43:36 node01 systemd: corosync.service: control process exited, code=exited status=1
Jun 19 22:43:36 node01 systemd: Failed to start Corosync Cluster Engine.
Jun 19 22:43:36 node01 systemd: Dependency failed for Pacemaker High Availability Cluster Manager.
Jun 19 22:43:36 node01 systemd:
Jun 19 22:43:36 node01 systemd: Unit corosync.service entered failed state.

Apabila agan membaca di forum redhat, hal ini terjadi karena bugs yang sudah dideskripsikan di Redhat bugzilla bug #1030583.

Solusinya adalah edit systemd-service dari corosync service di node01 dan node02, lalu menambah jeda dengan sleep 10 detik. Langkahnya ialah, edit file /usr/lib/systemd/system/corosync.service lalu edit bagian [Service] dan tambahkan ExecStartPre=/usr/bin/sleep 10.

[Unit]
Description=Corosync Cluster Engine
ConditionKernelCommandLine=!nocluster
Requires=network-online.target
After=network-online.target

[Service]
ExecStartPre=/usr/bin/sleep 10
ExecStart=/usr/share/corosync/corosync start
ExecStop=/usr/share/corosync/corosync stop
Type=forking

[Install]
WantedBy=multi-user.target

Setelah selesai edit di kedua node langkah selanjutnya adalah reload daemon-service, gunakan command dibawah ini.
Node01
[root@node01 ~]# systemctl daemon-reload

Node02
[root@node02 ~]# systemctl daemon-reload


Done! Semoga bermanfaat...

Wednesday, June 17, 2015

Memahami Linux File System

Hampir seluruh operating system memiliki file system untuk memanage file yang ada di dalamnya. Apabila di windows kita mengenal ntfs maka di linux kita akan berkenalan dengan ext3, ext4, xfs, dsb. Pada dasarnya seluruh file yang ada di operating system berbasis linux akan di simpan di dalam file system yang disusun kedalam bentuk tree, oleh sebab itu muncul istilah file system hierarki.

Tree dalam linux file system berbentuk terbalik dan puncak dan puncak dari tree disebut kita kenal sebagai root, sedangkan cabang dari direktori dan subdirektori akan berada dibawah root.


Gambar diatas adalah tree direktori dari CentOS, sedangkan dibeberapa platform lain mungkin hirarkinya sedikit berbeda. Apabila dari gambar diatas direktori / berada di puncak hirarki dari tree tsb. Sebagai catatan juga karakter / digunakan sebagai separator direktori dalam file name
Contoh : 
/home/arif -> Separator antara home dan arif adalah /.

Hampir diseluruh operating system berbasis linux, subdirektori dari / biasanya digunakan untuk memobilisasi file-file tertentu yang berkaitan dengan operating system itu sendiri. Dengan arsitektur dan model hirarki seperti ini maka memudahkan administrator untuk kebutuhan administrasi, manajemen file dan juga troubleshoot. 
Contoh :
Subdirektori /boot digunakan untuk menyimpan file yang dibutuhkan oleh operating system ketika proses booting.

Direktori Penting di Operating System Berbasis Linux

Lokasi File
Tujuan
/usr
Berisi software/aplikasi yang telah diinstal, shared library, static read-only program data, dan file library. Subdirektori penting dari /usr adalah :
-  /usr/bin: User command.
/usr/sbin: System administration command.
-  /usr/local: Local custom software.
/etc
Berisi file-file konfigurasi yang spesifik dari operating system tsb. File konfigurasi biasanya akan mengikuti subdirektorinya. Contoh: /etc/ldap.conf, /etc/httpd/, dsb.
/var
Berisi file-file variable yang dinamis, file-file yang ada didalam direktori ini biasanya senantiasa berubah. Contoh: File Databases, cache direktori, log file, website document, dsb.
/run
Berisi runtime data yang diproses ketika server/PC dalam proses booting. Dalam direktori ini termasuk juga proses ID Files dan Lock File. Biasanya file yang ada dalam direktori ini akan di re-create apabila server/PC di reboot.
/home
Home direktori biasanya berisi file-file regular dimana user yang ada di OS linux menyimpan personal file dan juga file konfigurasi dari aplikasi dari masing-masing user tsb.
/root
Home direktori untuk administrator super-user, root.
/tmp
Direktori yang berisi temporary file, permission dalam direktori ini biasanya juga writeable yang artinya hampir bisa digunakan oleh semua user dalam operating system tsb. Biasanya file yang ada dalam direktori ini dan umurnya lebih dari 10 hari serta tidak ada perubahan akan otomatis di hapus oleh si operating system.
/boot
Berisi file-file yang dibutuhkan oleh operating system ketika proses booting. Hampir semua file yang ada disini sangat penting, bahkan file kernel dari OS pun ada disini. Jadi hati-hati yah memaintain file yang ada dalam direktori ini.
/dev
Direktori ini berisi special device file yang biasanya digunakan OS untuk berkomunikasi dengan hardware. Contoh: /dev/sda yang berkomunikasi dengan hardisk.

Semoga bermanfaat. 

Friday, June 12, 2015

Openstack Menambah Compute Node Menggunakan Packstack CentOS 7

Tulisan ini adalah lanjutan dari tulisan sebelumnya yang membahas langkah-langkah Instalasi OpenStack Menggunakan Packstack di CentOS 7. Pada tulisan kali ini kita akan membahas bagaimana cara menambahkan compute node menggunakan packstack. 

Untuk menambahkan compute node (192.168.99.51), maka berarti kita harus menginstall OpenStack lagi di sebuah server, kira-kira nanti topologinya adalah seperti dibawah ini.



Notes Penting!
Pre-Requirement dan Pre-Instalation di Node B sama percis dengan di Node A ketika awal mendeploy OpenStack, seperti instalasi openvswitch, int-br-ex, turn off network manager service, update package, hostname static, dsb. 


Langkah Pertama, Edit File answers.txt di Node A, lalu ubah parameter dibawah ini
[root@servera ~]# vim /root/answers.txt
##Tambahkan Node Compute Host 192.168.99.51##
CONFIG_COMPUTE_HOSTS=192.168.99.50,192.168.99.51

Update dan Deploy OpenStack Menggunakan File answers.txt yang Telah Diupdate
[root@servera ~]# packstack --answer-file /root/answers.txt

Copy File answers.txt dari Node A ke Node B
[root@servera ~]# scp /root/answers.txt root@192.168.99.51:/root/answers.txt 
answers.txt                                                        100%   30KB  29.7KB/s   00:00

Pada Node B, Deploy OpenStack Menggunakan File answers.txt yang Dicopy Dari Node A
[root@serverb ~]# packstack --answer-file /root/answers.txt

Setelah Selesai, Jangan Lupa Verifikasi Status Service
[root@serverb ~]# openstack-status
== Nova services ==
openstack-nova-api:                     inactive  (disabled on boot)
openstack-nova-compute:                 active
openstack-nova-network:                 inactive  (disabled on boot)
openstack-nova-scheduler:               inactive  (disabled on boot)
== neutron services ==
neutron-server:                         inactive  (disabled on boot)
neutron-dhcp-agent:                     active
neutron-l3-agent:                       active
neutron-metadata-agent:                 active
neutron-lbaas-agent:                    active
neutron-openvswitch-agent:              active
neutron-metering-agent:                 active
== Ceilometer services ==
openstack-ceilometer-api:               inactive  (disabled on boot)
openstack-ceilometer-central:           inactive  (disabled on boot)
openstack-ceilometer-compute:           active
openstack-ceilometer-collector:         inactive  (disabled on boot)
== Support services ==
libvirtd:                               active
openvswitch:                            active
dbus:                                   active
rabbitmq-server:                        failed
Warning novarc not sourced

Verifikasi Compute Hosts Melalui Horizon Web Interfaces
- Login melalui dashboard https://192.168.99.50/dashboard

- Setelah berhasil login, cek hypervisor summare di menu Admin -> System -> Hypervisors 

1) Cek dan Verifikasi tab bagian hypervisors, apabila proses menambah compute node berhasil seharusnya akan ada 2 hypervisor yaitu servera.pod1.example.com dan server2.pod1.example.com.


2) Cek dan Verifikasi tab bagian Compute Host, apabila proses penambahan compute node dari langkah sebelumnya telah berhasil dilakukan, maka seharusnya akan ada 2 Compute Host yaitu servera.pod1.example.com dan server2.pod1.example.com.



Semoga bermanfaat.

Tuesday, June 9, 2015

Instalasi OpenStack CentOS 7

Kali ini kita akan mencoba melakukan instalasi openstack di CentOS 7, buat agan yang belum tahu apa itu openstack dan apa aja sih komponen-komponen dari openstack bisa baca tulisan saya disini.
Sebelum melakukan instalasi alangkah lebih baiknya kita tahu requirement yang dibutuhkan agar proses instalasi berjalan mulus semringwing.

Hardware Requirements
  • Controller Node
    Processor, 64-bit x86 dan support AMD-V atau Intel VT hardware virtualization.
    Memory, Minimum 2GB RAM. (Kalo dari pengalaman 8GB Mulus Semringwing)
    Disk Space, Recommended 100GB.
    Network, Minimum 2 x 1 Gbps NIC, 3 NIC recommended.
  • Compute Node
    Processor, 64-bit x86 dan support AMD-V atau Intel VT hardware virtualization.
    Memory, Minimum 2GB RAM. (Kalo dari pengalaman 8GB Mulus Semringwing)
    Disk Space, Recommended 50GB.
    Network, Minimum 2 x 1 Gbps NIC, 3 NIC recommended.

Software Requirements
  • Sebenarnya untuk mendeploy openstack dibutuhkan sedikitnya 2 machine dengan OS CentOS7. Machine pertama berfungsi sebagai Cloud Controller dan Machine kedua bertindak sebagai Nova Compute Node. Sedangkan dalam dunia persilatan sangat direkomendasikan menggunakan 2 Nova Compute Node dan 1 Cloud Controller.
  • Pastikan setiap machine terhubung ke satu NTP Server (Network Time Protocol) yang sama agar clock-nya tersinkronisasi.


Notes
Karna tutorial ini hanya untuk proses instalasi, jadi node yang akan diinstall nanti akan berjalan sebagai controller node dan juga compute node.

Pre-Instalation
Agar instalasi berjalan mulus ada beberapa hal yang harus diperhatikan dan di cek terlebih dahulu.

  • Disabled Selinux
    [root@serverb ~]# vi /etc/selinux/config
    ##Lalu ubah parameter##
    SELINUX=disabled
  • Cek Hostname, lalu pastikan hostname sudah terconfigure secara static.
    [root@serverb ~]# hostname
    serverb.pod1.example.com
    [root@serverb ~]# hostnamectl set-hostname serverb.pod1.example.com
  • Cek IP Address, pastikan IP Address yang digunakan adalah IP Address Static
    [root@serverb ~]#
    ip addr show
  • Update Package OS Server, lalu reboot
    [root@serverb ~]# yum update -y
    [root@serverb ~]# reboot
  • Instalasi & Konfigurasi Openvswitch
    Instalasi
    Instalasi dan konfigurasi openvswitch penting karna inilah yang akan membentuk neutron atau network yang akan berfungsi sebagai bridge yang menghubungkan instances (virtual machine) keluar/internet.

    Untuk mengecek apakah openvswitch sudah terinstall atau belum gunakan command dibawah ini.
    [root@serverb ~]# ovs-vsctl -V
    Kalau outputnya "bash: ovs-vsctl: command not found...", maka openvswitch belum terinstall. Untuk instalasi openvswitch ikuti tutorial saya sebelumnya disini.

    Apabila openvswitch sudah diinstall ketika ketik command diatas harusnya outputnya seperti dibawah ini.
    [root@serverb ~]# ovs-vsctl -V
    ovs-vsctl (Open vSwitch) 2.3.1
    Compiled Jun  9 2015 12:15:53
    DB Schema 7.6.2


    Konfigurasi
    Kita akan membuat 2 interface yang akan berfungsi sebagai bridge yaitu :
    - eth0, menjadi port dari br-ex bridge karna eth0 mempunyai connectivity external.
    - br-ex, menjadi switch dimana eth0 akan diattach ke switch(br-ex) tersebut.

    Buat interface baru yaitu br-ex di /etc/sysconfig/network-scripts/ifcfg-br-ex dengan informasi dibawah ini.

    DEVICE=br-ex
    DEVICETYPE=ovs
    TYPE=OVSBridge
    BOOTPROTO=static
    IPADDR=192.168.99.50 #IP Address yang kita gunakan##
    NETMASK=255.255.255.0
    GATEWAY=192.168.99.5

    Edit file /etc/sysconfig/network-scripts/ifcfg-eth0 dengan informasi dibawah ini.

    DEVICE=eth0
    ONBOOT=yes
    TYPE=OVSPort
    DEVICETYPE=ovs
    OVS_BRIDGE=br-ex

    Matikan service Network Manager karna apabila digunakan akan menyebabkan error.
    [root@serverb ~]# systemctl stop NetworkManager.service
    [root@serverb ~]#
    systemctl disable NetworkManager.service

    Lalu nyalakan service network dan restart agar konfigurasi openvswitch tadi berjalan.[root@serverb ~]# systemctl start network.service
    [root@serverb ~]# systemctl enable network.service atau
    [root@serverb ~]# chkconfig network on
    [root@serverb ~]# reboot


INSTALASI OPENSTACK MENGGUNAKAN PACKSTACK
Setelah proses pre-installation selesai selanjutnya kita akan melakukan instalasi openstack menggunakan packstack. Packstack adalah package utility yang dikembangkan oleh redhat dan digunakan untuk mendeploy Redhat OpenStack, namun dapat juga digunakan di beberapa distro linux dan di OS CentOS kita dapat juga menggunakan packstack untuk mendeploy openstack.

- Install openstack-packstack dan openstack-dashboard dari repository RDO
[root@serverb ~]# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm
[root@serverb ~]# yum install -y openstack-packstack

- Generate answer-file lalu edit answer-file untuk memilih paket openstack yang akan di install
[root@serverb ~]# packstack --gen-answer-file /root/answers.txt

Lalu edit parameter di dalam file answers.txt dibawah ini.
....
CONFIG_DEFAULT_PASSWORD=arif
CONFIG_SWIFT_INSTALL=n
CONFIG_HEAT_INSTALL=y
CONFIG_NTP_SERVERS=id.pool.ntp.org
CONFIG_KEYSTONE_ADMIN_PW=arif
CONFIG_CINDER_VOLUMES_CREATE=y
CONFIG_LBAAS_INSTALL=y
CONFIG_NEUTRON_METERING_AGENT_INSTALL=y
CONFIG_NEUTRON_FWAAS=y
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vlan
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vlan
CONFIG_NEUTRON_ML2_VLAN_RANGES=physnet1:1:1000
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth1
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-eth1:eth1
CONFIG_HORIZON_SSL=y
CONFIG_HEAT_CFN_INSTALL=y
CONFIG_PROVISION_DEMO=n

Setelah selesai save lalu quit.

- Deploy OpenStack Menggunakan answer-file yg disiapkan dari langkah sebelumnya

[root@serverb ~]# packstack --answer-file /root/answers.txt
......
Proses instalasi harus menunggu sekitar 20-30 menit.
......

- Verifikasi OpenStack Services
[root@serverb ~]# openstack-status

== Nova services ==

openstack-nova-api:                     active

openstack-nova-cert:                    active

openstack-nova-compute:                 active
openstack-nova-network:                 inactive  (disabled on boot)
openstack-nova-scheduler:               active
openstack-nova-conductor:               active
== Glance services ==
openstack-glance-api:                   active
openstack-glance-registry:              active
== Keystone service ==
openstack-keystone:                     inactive  (disabled on boot)
== Horizon service ==
openstack-dashboard:                    301
== neutron services ==
neutron-server:                         active
neutron-dhcp-agent:                     active
neutron-l3-agent:                       active
neutron-metadata-agent:                 active
neutron-lbaas-agent:                    active
neutron-openvswitch-agent:              active
neutron-metering-agent:                 active
== Cinder services ==
openstack-cinder-api:                   active
openstack-cinder-scheduler:             active
openstack-cinder-volume:                active
openstack-cinder-backup:                inactive  (disabled on boot)
== Ceilometer services ==
openstack-ceilometer-api:               active
openstack-ceilometer-central:           active
openstack-ceilometer-compute:           active
openstack-ceilometer-collector:         active
openstack-ceilometer-alarm-notifier:    active
openstack-ceilometer-alarm-evaluator:   active
openstack-ceilometer-notification:      active
== Heat services ==
openstack-heat-api:                     active
openstack-heat-api-cfn:                 active
openstack-heat-api-cloudwatch:          inactive  (disabled on boot)
openstack-heat-engine:                  active
== Support services ==
libvirtd:                               active
openvswitch:                            active
dbus:                                   active
target:                                 active
rabbitmq-server:                        active
memcached:                              active
== Keystone users ==
Warning keystonerc not sourced

Apabila output seperti diatas maka artinya instalasi berhasil dan service berjalan dengan baik.

- Akses Cloud Controller (Horizon) Melalui Web-Browser
Setelah proses instalasi selesai ada informasi bahwa untuk mengakses horizon melalui browser bisa melalui url ini https://192.168.99.50/dashboard



Login ke horizon menggunakan Username: Admin, Password: arif. Apabila berhasil login ke horizon maka tampilannya harusnya seperti dibawah ini.



NOTES 
Kalo lupa credential akses, kita bisa lihat isi file keystonerc_admin untuk melihat credentials access kita. Caranya seperti dibawah ini :
[root@servera ~]# cat keystonerc_admin
export OS_USERNAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=arif
export OS_AUTH_URL=http://192.168.99.50:5000/v2.0/
export OS_REGION_NAME=RegionOne
export PS1='[\u@\h \W(keystone_admin)]\$ '

Semoga bermanfaat yah.