Beberapa bulan terakhir saya memutuskan untuk menggunakan layanan cloud server dari DigitalOcean untuk mengakomodir semua service, baik website maupun system management yang saya gunakan di kantor.
Butuh beberapa hari untuk proses migrasi data dari layanan sebelumnya (shared hosting) dan berjalan cukup baik, sampai saat ini kami sudah menggunakan 3 server (droplet) untuk menampung semua kebutuhan. Untuk menghemat operational cost 1 server saya bisa host maksimal 60-an website, meskipun itu sangat tidak dianjurkan. Karena tidak semua website memiliki traffic yang cukup tinggi, jadi saya kira tidak ada masalah menampung sejumlah website tersebut dalam 1 server secara bersamaan.
Pada awalnya tidak ada masalah, namun beberapa minggu kemudian mulai sering down. Kebanyakan terjadi akibat MySQL service nya mati.
Untuk Control Panel nya saya menggunakan Webuzo, karena lengkap dan cukup mudah untuk konfigurasinya. Setelah dicek ternyata memang benar MySQL service nya yang mati.
Penasaran kira-kira yang bikin service nya mati sendiri saya coba cek log nya, untuk webuzo log mysqld nya terletak di /var/log/mysqld.log
140416 11:37:24 mysqld_safe Number of processes running now: 0 140416 11:37:24 mysqld_safe mysqld restarted 140416 11:37:24 [Note] Plugin 'FEDERATED' is disabled. 140416 11:37:24 InnoDB: The InnoDB memory heap is disabled 140416 11:37:24 InnoDB: Mutexes and rw_locks use GCC atomic builtins 140416 11:37:24 InnoDB: Compressed tables use zlib 1.2.3 140416 11:37:24 InnoDB: Using Linux native AIO 140416 11:37:24 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 140416 11:37:24 InnoDB: Completed initialization of buffer pool 140416 11:37:24 InnoDB: Fatal error: cannot allocate memory for the buffer pool 140416 11:37:24 [ERROR] Plugin 'InnoDB' init function returned error. 140416 11:37:24 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 140416 11:37:24 [ERROR] Unknown/unsupported storage engine: InnoDB 140416 11:37:24 [ERROR] Aborting
Setelah diperhatikan baris Fatal error: cannot allocate memory for the buffer pool
baru sadar kalau ternyata memory (RAM) nya sudah penuh, dalam kondisi ini ada beberapa opsi yang bisa digunakan untuk mengatasi permasalahan tersebut.
Upgrade Plan
Yaah, action paling mudahnya yaitu tinggal upgrage plan untuk droplet bersangkutan, pilih upgrade untuk memory (RAM) nya saja. Penjelasan lebih detil nya mengenai harga dan spesifikasi plan lain dari DigitalOcean silakan kesini (recommended).
Tambah Ukuran SWAP
Jika opsi diatas dirasa cukup berat (cost), dengan menambahkan ukuran SWAP di OS (Linux) yang sudah terinstal juga bisa mengurangi tingkat crash mysql service. Tutorial lengkapnya silakan kesini.
Gunakan Monit
Monit adalah program yang berfungsi untuk memantau setiap service (yang didaftarkan) dengan kemampuan melakukan aksi jika terjadi sesuatu dengan service yang bersangkutan. Misalnya untuk service mysql, kita bisa menentukan pengaturan di monit jika suatu waktu service mysql mati maka monit dapat melakukan restart terhadap service mysql secara otomatis. Untuk langkah install dan konfigurasi monit silakan kesini.