Ada Baiknya Me-reboot Server Sesekali

3 Jun 2012

Jam PasirSeperti yang kita ketahui bersama, secara periodik filesystem akan mengalami defragmentasi akibat perubahan isi filesystem akibat penggunaan secara terus menerus. Dalam beberapa kasus performa sistem dapat menurun akibat akses yang tak putus. Sistem database atau proxy misalnya. Meskipun jika administrator sistem anda seorang yang jenius dan berhasil untuk melakukan tweaking yang nyaris sempurna (memangnya ada?), tetap saja sebuah sistem yang mumpuni akan kalah dengan waktu. Ya, waktu memang salah satu ciptaan Tuhan yang masih misterius hingga saat ini. Pengaruhnya ke segala hal, baik yang hidup, mati, dan yang tak terjelaskan sekalipun. Barangkali di sinilah beda kita dengan Tuhan yang paling nyata (buat yang masih percaya sama Tuhan).

Jurnal Filesystem

Balik ke judul. Kadangkala mematikan dan menghidupkan kembali mesin-mesin layanan adalah sebuah kebutuhan. Meskipun pada artikel dalam tautan di atas menunjukkan kehebatan filesystem linux yang amat sangat tahan terhadap defragmentasi, tetapi ingat sebuah sistem operasi bukan hanya soal filesystem. Soal data yang dikandung oleh filesystem itu lebih penting daripada sistem operasinya. Beberapa filesystem seperti ext4 (linux) dan ufs (freebsd) menerapkan sistem jurnal untuk merekam transaksi data. Pada sistem yang memiliki tingkat perubahan data sangat tinggi seperti proxy dan database, proses pembaruan jurnal akan dilakukan secara berkala dengan banyak penundaan. Penundaan ini bersifat atomik atau sangat cepat sehingga bisa dianggap tidak ada penundaan jika kita hitung dengan persepsi waktu kita. Tetapi harus diingat bahwa jurnal itu sendiri adalah sebuah data yang akan disimpan ke dalam filesystem (partisi) dan diperbarui seperti layaknya data-data kita. Jadi sebenarnya jurnal filesystem juga akan mengalami degradasi seiring dengan bengkaknya ukuran jurnal serta banyaknya penundaan pembaruan akibat tingginya akses.

Cara terbaik untuk menetapkan perubahan jurnal secara permanen adalah dengan melakukan pemutusan tautan filesystem (partisi) atau unmount. Karena pada saat unmount dijalankan, sistem operasi akan menghentikan proses perubahan data yang artinya akan menghentikan pemasukan data jurnal yang baru sekaligus menetapkan kondisi jurnal pada titik tertentu. Artinya jurnal akan direkam secara permann ke dalam lokasi penyimpanan jurnal dalam filesystem (partisi) dengan isi jurnal yang paling sesuai dengan kondisi data terakhir dalam filesystem. Saat proses booting setelah reboot dijalankan, jurnal yang sudah kompak ini akan digunakan oleh sistem pengecekan filesystem untuk menentukan apakah data di dalam filesystem kondisinya baik atau tidak. Jurnal filesystem yang kompak juga akan membantu proses pemulihan data jika terjadi kerusakan pada filesystem. Jadi tidak ada salahnya kan untuk me-reboot secara berkala mesin-mesin anda?

Penjadualan Reboot via Cron

Pada dasarnya sebuah sistem layanan jaringan (server) didesain agar dapat tetap berfungsi optimal tanpa putus atau jeda. Nah soal tanpa jeda ini sebenarnya juga relatif. Apakah tanpa jeda itu artinya dari mulai dibeli sampai mesinnya hancur tidak pernah dimatikan? Atau sebenarnya tanpa jeda itu bisa diartikan seperti ini, layanan tersedia dan tidak mengalami jeda/gangguan saat dibutuhkan oleh pengguna pada jam-jam sibuk atau hari kerja? Saya memilih yang kedua, karena kondisi yang pertama hampir tidak mungkin dilakukan. Bahkan dalam sistem awan atau klaster besar, secara berkala sebagian mesin akan dimatikan untuk perawatan. Tetapi karena sistem tersebut memiliki banyak server yang tersinkronisasi, pengguna tidak akan merasakan apapun jika salah satu mesin dimatikan. Masalah akan muncul jika anda hanya punya satu mesin. Untuk itu anda harus dapat menentukan kapan anda harus me-reboot mesin anda.

Biasanya sistem operasi sudah menyediakan sebuah mekanisme penjadualan otomatis. Di linux/unix mekanisme ini ada bermacam-macam. Masing-masing punya kelebihan dan kekurangan, tetapi saya tidak akan membahasnya di sini. Silakan cari sendiri perbandingan masing-masing program penjadualan di internet. Pada tulisan ini saya akan membagikan cara penjadualan reboot menggunakan cron (crontab). Dalam kasus saya server-server layanan akan diakses pada jam kantor yang jika dirata-rata melalui hasil rekaman cacti dan awstats, saya simpulkan jam sibuk adalah sekitar jam tujuh pagi hingga jam tujuh malam dari hari senin hingga jum'at. Artinya saya bisa me-reboot server-server saya di luar jam sibuk tersebut. Menurut saya me-reboot server setiap hari juga bukan pilihan yang baik meskipun tidak juga buruk. Saya lebih memilih untuk me-reboot server satu atau dua kali dalam satu bulan. Sehingga konfigurasi crontab saya akan menjadi seperti ini:

# menit jam minggu bulan hari perintah
0   6   1,5   *   mon   /bin/sh /sbin/reboot

Jadi saya me-reboot secara berkala server saya pada jam 6:00 pagi, setiap hari senin (mon/monday) pada minggu pertama (minggu 1 atau 5 pada bulan depan dari bulan ini)  tiap bulannya. Dengan konfigurasi ini server-server akan fresh dan siap digunakan pada hari senin sebelum jam kerja dimulai.

Tentunya anda akan memiliki pandangan berbeda dengan saya. Toh yang tahu pasti kondisi mesin dan lingkungan kerja anda ya anda sendiri. Jangan lupa untuk selalu mencocokkan jam komputer anda dengan jam yang cocok untuk daerah anda.

Selamat mencoba.