Mar 152012
 

Streaming server Icecast bisa di setting untuk pengguna tertentu yang memasukkan username dan password. Backend pengguna ini bisa macam-macam seperti database server atau LDAP. Settingannya ternyata mudah! Berikut adalah setingan Icecast yang memanfaatkan LDAP sebagai backend pengguna.

Pertama-tama kita tentukan URL untuk stream yang perlu autentikasi dan opsi-opsinya. Setingan ini ada di file /etc/icecast.xml

...
<mount>
  <mount-name>/stream</mount-name>
  <authentication type="url">
    <option name="listener_add" value="http://example.com/auth/connect.php" />
  </authentication>
</mount>
...

Yang perlu diperhatikan adalah tipe autentikasi “url” dan opsi dengan nama “listener_add”, yaitu ketika ada pendengar yang mencoba akses akan diautentikasi menggunakan file connect.php di server example.com. Value disini harus bisa diakses dari luar walau file connect.php dan icecast-nya berada dalam satu mesin. Nah, ini isi dari file connect.php:

<?php
$bind_user = $_REQUEST["user"];
$bind_pass = $_REQUEST["pass"];

$ds = ldap_connect("ldap://example.com");
if($ds) {
  $r = ldap_bind($ds, "uid=$bind_user,ou=people,dc=example,dc=com", $bind_pass);
  if($r) {
    header('icecast-auth-user: 1');
    header('icecast-auth-message: OK');
    ldap_close($ds);
    exit;
  } else {
    header('icecast-auth-user: 0');
    header('icecast-auth-message: Wrong username and/or password!');
    ldap_close($ds);
    exit;
  }
} else {
  header('icecast-auth-user: 0');
  header('icecast-auth-message: fail to connect to LDAP server');
  exit;
}
?>

Segitu saja, sederhana sekali bukan? ;-) Yang perlu diperhatikan adalah parameter kedua dari ldap_bind, ini tergantung dari data di ldap server kita, format diatas cocok untuk openldap server dan 389 directory server.

Untuk autentikasi dan sekaligus menghitung lama koneksi contohnya bisa dilihat di contoh yang disertakan pada paket Icecast dan baca dokumentasi dari Icecast.

Tautan:
Icecast, Icecast Documentation, 389 Directory Server, OpenLDAP

Aug 032009
 

DRBD sudah, Heartbeat juga sudah, sekarang tinggal menggabungkan keduanya dan memilih layanan apa saja yang akan tersedia di HA kita. Layanan yang akan kita pasang sebagai HA adalah vitual IP, dimana IP ini yang akan dituju oleh kilen, file server dengan nfs dan samba, web server httpd dengan php-nya serta database server MySQL. Sebelum mengintegrasikan layanan tersebut dengan heartbeat ada baiknya dicobakan dulu tanpa heartbeat dan sudah jalan dengan benar.

Agar semua perubahan data dari layanan tersebut dapat tersinkronisasi dengan baik maka ada beberapa lokasi data layanan diatas akan ditempatkan di folder yang tersinkronisasi oleh drbd, dalam hal ini di folder /drdisk. Untuk file server kita tempatkan di /drdisk/shares. Halaman web kita tempatkan di /drdisk/html dan file untuk php session kita tempatkan di /drdisk/php/session, sementara file upload lewat php tempat penyimpanan sementaranya ada di /drdisk/tmp. MySQL database di folder /drdisk/mysql.

Pada tutorial sebelumnya kita matikan dulu layanan drbd, nah sekarang kita hidupkan di kedua komputer dan kerjakan pembuatan folder diatas pada komputer yang dijadikan primary.

[root@hb1 ~]# drbdadm primary r0
[root@hb1 ~]# mount /dev/drbd1 /drdisk/
[root@hb1 ~]# mkdir -p /drdisk/shares /drdisk/html /drdisk/mysql /drdisk/tmp /drdisk/php/session
[root@hb1 ~]# chmod ugo=rwXt /drdisk/tmp/ /drdisk/shares/
[root@hb1 ~]# chmod 770 /drdisk/php/session/
[root@hb1 ~]# chgrp apache /drdisk/php/session/

/drdisk/tmp dan /drdisk/shares permission-nya kita jadi seperti /tmp. /drdisk/php/session ber-permisson 700 dan group owner adalah apache. Setelah itu kita konfigurasi masing-masing layanan agar menggunakan folder yang telah kita sediakan tersebut. File-file konfigurasi ini harus sama di kedua komputer.

Untuk nfs file konfigurasinya adalah file /etc/exports dan isinya cuma satu baris saja:

/drdisk/shares            *(rw,squash_uids=0-99,sync)

Untuk keterangan variabelnya coba saja cari tutorial tentang nfs di internet ;-)

Untuk samba, tambahkan baris berikut pada file /etc/samba/smb.conf:

[shares]
        comment = Shares Stuff
        path = /drdisk/shares
        public = yes
        writable = yes
        printable = no

File-file yang ada di /etc/samba juga perlu diduplikasi di komputer satu lagi.

Untuk apache (httpd) file yang perlu dirubah adalah /etc/httpd/conf/httpd.conf. Cari ‘DocumentRoot’ dan isikan dengan /drdisk/html. Kemudian cari ‘<Directory “/var/www/html”>’ dan ganti menjadi ‘<Directory “/drdisk/html”>’. Untuk konfigurasi php, silahkan rubah file /etc/php.ini pada bagian sbb:

....
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = /drdisk/tmp
....
session.save_path = "/drdisk/php/session"
....

Pada dasarnya itu saja yang dirubah, kalau ternyata masih ada yang perlu dirubah karena terkait dengan modul lain silahkan baca-baca di www.php.net

Untuk MySQL file konfigurasi yang dirubah adalah /etc/my.cnf:

[mysqld]
datadir=/drdisk/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Nah, kalau semua layanan diatas sudah jalan dengan baik tanpa terintegrasi dengan heartbeat, maka kini saatnya mengintegrasikan dengan heartbeat. Layanan-layanan diatas berposisi off pada waktu komputer dinyalakan (termasuk drbd), heartbeat yang akan menyalakannya.

File konfigurasi untuk layanan diatas kita tuliskan (misal) di hb-resources.xml dan hb-constarint.xml. hb-resources.xml untuk mengatur setingan layanan dan hb-constaint.xml untuk mengatur batasan/urutan layanan dinyalakan. Continue reading »

Jul 302009
 

Nah ini aplikasi yang menjadi tulang punggung HA, Heartbeat dari Linux HA. Silahkan baca-baca link tersebut untuk mengetahui lebih jauh apa itu heartbeat.

Untuk mengaktifkan heartbeat ini ternyata cukup mudah. Rubah file /etc/ha.d/ha.cf, bikin aja kalau belum ada, dengan isi sebagai berikut:

use_logd on
udpport 694
keepalive 1 # 1 second
deadtime 10
initdead 80
bcast eth0
node hb1 hb2
crm yes
auto_failback yes

isi dari node disesuaikan dengan nama-nama komputernya. Setelah itu membuat file /etc/ha.d/authkeys untuk autentikasinya dengan menggunakan script ini:

cat <<-!AUTH >/etc/ha.d/authkeys
# Automatically generated authkeys file
auth 1
1 sha1 `dd if=/dev/urandom count=4 2>/dev/null | openssl dgst -sha1` !AUTH

Karena file /etc/ha.d/authkeys sensitif, maka rubah permission-nya menjadi 600 (-rw------). Yak segitu saja, heartbeat siap dijalankan. Di fedora based tinggal jalankan ‘service heartbeat start‘ dan jangan lupa service heartbeat di on-kan waktu komputer dihidupkan.

Tapi dengan konfigurasi seperti itu saja heartbeat tidak banyak berguna, harus ada service-service yang ditangani heartbeat yang menjadikannya fungsional sebagai HA, misal visual IP, digabung dengan drbd untuk sinkronisasi data, httpd, nfs, samba dan lain-lain. Nah yang begini akan dibahas pada [Seri HA 3] Sentuhan Terakhir

Jul 292009
 

Apa itu DRBD? Dan apa pula hubungannya dengan HA? Coba jalan-jalan ke sini dulu.

Pada dasarnya DRBD adalah software untuk sinkronisasi data tetapi pada level block device, yaitu level dibawah filesystem. Jadi membuat filesystem-pun akan disinkronkan. Sinkronisasi pada level block device ini diperlukan (tetapi tidak harus) agar HA bisa lebih mulus pergantian komputernya.

OK, langsung ke hardware dan konfigurasinya yang diperlukan untuk drbd. Pertama-tama tentu partisi yang akan disinkronkan, berikut hasil perintah ‘fdisk -l’ dari kedua komputer:

[root@hb1 ~]# fdisk -l
....
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        1305    10482381   83  Linux
/dev/hda2            1306        1436     1052257+  82  Linux swap / Solaris
/dev/hda3            1437        2564     9060660   83  Linux
[root@hb2 ~]# fdisk -l
....
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        1305    10482381   83  Linux
/dev/hda2            1306        1370      522112+  82  Linux swap / Solaris
/dev/hda3            1371        2498     9060660   83  Linux

Perhatikan, walau besar kedua hardisk berbeda, besar partisi (hda3) yang akan dipakai harus sama persis (1127 blok).

Selanjutnya saya menggunakan 2 kartu jaringan di masing-masing komputer. Berikut hasil ‘ifconfig’ dari kedua komputer:

[root@hb1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
          ....

eth1      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:10.0.0.11  Bcast:10.0.0.255  Mask:255.255.255.0
          ....
[root@hb2 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:192.168.0.12  Bcast:192.168.0.255  Mask:255.255.255.0
          ....

eth1      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:10.0.0.12  Bcast:10.0.0.255  Mask:255.255.255.0
          ....

eth0 akan terhubung ke jaringan lokal dan eth1 akan saling terhubung dengan kabel kros, dengan kata lain kedua komputer punya jalur pribadi lewat eth1. Kenapa hal ini perlu dilakukan? Tipe sinkronisasi yang dipilih memerlukan bandwidth yang cukup besar, agar tidak mengganggu jaringan lokal maka perlu dipisahkan lewat jalur pribadi ini. Untuk men-tes apakah jalur ini telah berfungsi lakukan ping ke IP dari eth1 komputer lainnya. Continue reading »

Feb 232009
 

Apa hubungannya HA (High Availability) dengan kloning sistem? He.. he.. he.., saya ingin memasang HA ini di mesin virtual dulu, semacam simulasi dulu lah, baru nanti pasang di mesin sebenarnya. Ada beberapa catatan untuk mengkloning sistem di mesin virtual ini, dan ada yang berlaku juga apabila kita ingin menginstal sistem operasi dengan cara menyalin partisi. Mesin virtual yang digunakan adalah VirtualBox keluaran SUN. Ingin mencoba juga dengan qemu, tapi itu nanti dulu lah.

Kita mulai dengan membuat mesin virtual di VirtualBox dan menginstall sistem operasi, yang saya gunakan disini adalah Fedora 10. Setelah lengkap software-software yang terinstall, kita kloning hardisk virtualnya untuk dipakai di mesin virtual kedua. VirtualBox sebenarnya menyediakan alat untuk mengkloning hardisk virtual, perintahnya:

[hansen@hansen ~]$ VBoxManage clonehd HB1.vdi HB2.vdi

Tapi sayangnya hasil kloning dengan cara seperti itu menghasilkan hardisk virtual yang korup dan belum bisa dipakai (tiket 2813) dan berdasarkan tiket diatas bug tersebut sudah diperbaiki untuk rilis selanjutnya. Tetapi untungnya ada solusi yang dituliskan di komentar bug diatas. Kopi saja virtual hardisk yang sudah terinstall lengkap dan rubah uuid dari virtual hardisk hasil kopian dengan perintah:

[hansen@hansen ~]$ VBoxManage internalcommands sethduuid HB2.vdi

Mengapa semua perintah diatas diperlukan? Karena hardisk virtual mempunyai uuid unik untuk tiap filenya dan VirtualBox tidak bisa memakai hardisk virtual yang mempunyai uuid sama. Setelah beres, hardisk virtual kedua siap dipasang untuk mesin virtual kedua. Nyalakan mesin virtual kedua dan ternyata ada beberapa pernak-pernik kecil yang masih perlu dibenahi didalam sistemnya. Pembenahan ini bisa dilakukan juga untuk penginstallan sistem operasi dengan cara menyalin partisi hardisk.

Yang penting untuk dirubah: host key dari ssh server. Sistem hasil kloning akan mempunyai host key ssh server sama persis dengan master-nya. Hal ini harus dirubah demi keamanan dan host key ssh server tidak boleh sama untuk setiap mesin. Caranya ternyata gampang, di generate ulang. Fedora (atau ssh server) akan membuat host key saat pertama kali dijalankan. Nah dimana file-file host key tersebut? File-file tersebut berada di /etc/ssh/

[hansen@hansen ~]$ ll /etc/ssh/
total 160
-rw------- 1 root root 125811 2008-10-17 15:44 moduli
-rw-r--r-- 1 root root   1964 2008-10-17 15:44 ssh_config
-rw------- 1 root root   3711 2008-10-17 15:44 sshd_config
-rw------- 1 root root    668 2008-08-21 14:52 ssh_host_dsa_key
-rw-r--r-- 1 root root    590 2008-08-21 14:52 ssh_host_dsa_key.pub
-rw------- 1 root root    963 2008-08-21 14:52 ssh_host_key
-rw-r--r-- 1 root root    627 2008-08-21 14:52 ssh_host_key.pub
-rw------- 1 root root   1675 2008-08-21 14:52 ssh_host_rsa_key
-rw-r--r-- 1 root root    382 2008-08-21 14:52 ssh_host_rsa_key.pub

File-file yang di generate adalah ssh_host* Jadi hapus saja file-file tersebut agar nanti waktu ssh server dijalankan akan men-generate lagi. Sebelum menghapus matikan dulu service sshd dengan perintah ‘service sshd stop’, setelah itu hapus file ssh_host* tersebut dan jalankan lagi service sshdnya. Viola, akan ada file ssh_host* yang baru dan berbeda dengan ssh_host* dari master.

Yang tidak terlalu penting tapi menggelitik saja: kartu jaringan mesin virtual kedua penomorannya tidak dimulai dari 0 (eth0). Kenapa begitu? Fedora (udev tepatnya) ternyata merekan penomoran kartu jaringan yang dikaitkan dengan MAC address suatu kartu jaringa. Jadi praktis nomor 0 adalah milik kartu jaringan pertama dari master (no seterusnya juga kalau di master ada lebih dari satu kartu jaringan). Kapan dan dimana rekamannya? Saat pertama kali boot dan tertulis di file 70-persisten-net.rules di folder /etc/udev/rules.d Coba kita lihat isi file tersebut:

[hansen@hansen ~]$ cat /etc/udev/rules.d/70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# Silicon Integrated Systems [SiS] SiS900 PCI Fast Ethernet (rule written by anaconda)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:19:21:6e:72:43", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Dua baris terakhir adalah rekaman tersebut, jadi hapus saja kedua baris terakhir dan boot ulang (ugh.. kenapa harus boot ulang? Mungkin resart service-nya udev bisa juga, belum coba)

Nah dua mesin virtual sudah siap untuk di-setup sebagai HA! Lanjut ke seri 1.

%d bloggers like this: