Apa itu High Availability?
Selama ini gw pikir High Availability (HA) semata-mata hanya mempersiapkan cadangan kalau bencana (disaster) muncul. Mempersiapkan cadangan dalam artian data backup. Ternyata pemahaman tersebut tidak sepenuhnya benar. Hal ini baru gw sadari setelah diberikan pekerjaan untuk membuat solusi kalau sampai layanan telekomunikasi yang digunakan tim Customer Service (CS) kena bencana.
Hasil akhir yang diharapkan – ingat selalu untuk berpikir dari hasil akhir yang diharapkan -- adalah: tim CS harus selalu dapat menggunakan layanan telekomunikasi. Mereka tidak peduli dan tidak perlu tahu* kalau ada bencana terjadi. Yang mereka pedulikan adalah mereka datang ke kantor dan melakukan pekerjaan mereka: menghubungi dan dihubungi pelanggan.
Untuk itu harus ada minimal 2 (dua) layanan telekomunikasi yang berfungsi dalam waktu bersamaan. Namun hanya ada 1 (satu) layanan yang aktif digunakan dalam satu waktu*. Katakanlah ada layanan utama dan layanan cadangan.
Ketika bencana terjadi (pasti terjadi, hanya masalah waktu) dan mengakibatkan layanan utama gagal beroperasi, maka saatnya layanan cadangan yang aktif. Istilah yang digunakan untuk mewakili proses ini adalah failover.
Ketika bencana berakhir dan layanan utama kembali normal. Maka layanan utama harus kembali aktif, menggantikan layanan cadangan. Proses mengembalikan penggunaan dari layanan cadangan ke layanan utama disebut fallback.
Hubungan failover dan fallback bisa dilihat pada gambar berikut ini. Gambar ini gw dapat dari dokumentasi “Building Elastix-2.4 High Availability Clusters with DRBD and Heartbeat (using a single NIC)”. Sumber: http://www.theserverexpert.com/elastix_2.4_ha_cluster-updated.pdf
Beberapa pertanyaan yang harus dijawab adalah:
- layanan-layanan apa saja yang vital dan harus selalu tersedia?
- apakah layanan-layanan tersebut dapat dibuat duplikasinya? hal ini harus menjawab pertanyaan lain, yaitu:
- apa saja kebutuhan layanan-layanan tersebut?
- bagaimana membuat duplikasi kebutuhan-kebutuhan tersebut?
- seberapa mudah membuat duplikasi layanan tersebut?
- data apa saja yang harus tersedia?
Sejauh ini baru itu saja yang terpikirkan. Seharusnya ada beberapa lagi, tapi gw belum sampai di sana.
Pertanyaan tadi keluar dari pengalaman ketika berusaha membuat duplikasi layanan telekomunikasi berbasis Asterisk. Asterisk dikelola dengan FreePBX, dan diberi nilai tambah oleh produk bernama Elastix. Elastix merupakan sekumpulan alat bantu yang dikembangkan di atas sistem operasi CentOS.
Asterisk memiliki modul bernama CDR (Call Detail Recording) yang berfungsi untuk menyimpan metadata komunikasi telepon yang dilakukan melalui sistem. Terdapat juga modul lain yang merekam semua pembicaraan. Oleh karena itu, data tadi harus selalu tersedia.
Elastix menggunakan SQLite sebagai penyimpanan data konfigurasi. FreePBX sebagai antarmuka Asterisk sepertinya tidak membutuhkan penyimpanan data apapun, namun memiliki beberapa modul tambahan yang mungkin saja membutuhkan penyimpanan data untuk menyimpan konfigurasi*.
Yang ingin gw sampaikan adalah pentingnya identifikasi detail kebutuhan tiap layanan karena menentukan apa yang harus diduplikasi dan caranya.
Apa yang dimaksud dengan kebutuhan tiap layanan?
Di atas sudah gw jelaskan bahwa modul Asterisk bernama CDR membutuhkan MySQL untuk penyimpanan data. Hal ini memaksa untuk mencari tahu apakah MySQL memiliki fitur untuk melakukan duplikasi layanan. Setelah dicari tahu ternyata MySQL memiliki fitur replikasi. Lalu muncul pertanyaan selanjutnya, MySQL versi berapa yang digunakan? Apakah versi tersebut sudah mendukung skenario replikasi yang kita butuhkan? Intinya adalah pemahaman tools yang digunakan, layanan yang ditawarkan tool tersebut, serta kompleksitasnya.
Kesimpulan
High Availability (HA) sulit dan kompleks sekali. Karena harus dipikirkan secara matang dan dilakukan oleh mereka yang paham dan kenal betul karakteristik penggunaan layanan, karakteristik layanan itu sendiri, karakteristik kebutuhan layanan, dan sebagainya.
Tulisan ini gw buat semata-mata untuk mengeluarkan isi pikiran saja. Mungkin saja berguna buat orang lain.