Cara Memisahkan Apache Web Server dan MariaDB Database Server
Memisahkan Apache dan MariaDB pada mesin server yang berbeda bertujuan agar pemakaian sumber daya (RAM, CPU, I/O) terpisah, tidak saling membebani. Pemisahan server ini dapat dilakukan dengan mengkonfigurasi MariaDB agar dapat diakses secara remote.
Tutorial ini menggunakan Ubuntu Server 16.04
10.0.8.38 = Apache Web Server
10.0.8.119 = MariaDB Database Server
Konfigurasi MariaDB Server
Edit file config MariaDB
1 | sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf |
Ganti bind-address dari 127.0.0.1 menjadi IP Server MariaDB
1 | bind-address = 10.0.8.119 |
Restart service MariaDB
1 | sudo systemctl restart mysql |
Membuat user agar MariaDB dapat diakses dari IP 10.0.8.38.
1 2 3 4 | mysql -u root -p CREATE USER 'webapps'@'10.0.8.38' IDENTIFIED BY 'webapps'; GRANT ALL PRIVILEGES ON *.* TO 'webapps'@'10.0.8.38'; FLUSH PRIVILEGES; |
Pengujian Akses
Pengujian via MariaDB Client (Console)
Setelah melakukan konfigurasi pada MariaDB, selanjutnya melakukan pengujian mengakses MariaDB server dari mesin Apache server dengan menggunakan aplikasi mariadb-client.
Install mariadb-client
1 | apt install mariadb-client |
Login ke MariaDB Server
1 | mysql -u webapps -h 10.0.8.119 -p |
Cek status MariaDB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | MariaDB [(none)]> \s -------------- mysql Ver 15.1 Distrib 10.0.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 Connection id: 33 Current database: Current user: webapps@apache.lxd SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.0.29-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04 Protocol version: 10 Connection: 10.0.8.119 via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 TCP port: 3306 Uptime: 52 sec Threads: 2 Questions: 94 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 78 Queries per second avg: 1.807 -------------- |
Bandingkan status MariaDB jika diakses langsung dari mesin servernya. Pada status Connection terlihat koneksi yang digunakan untuk mengakses MariaDB.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | MariaDB [(none)]> \s -------------- mysql Ver 15.1 Distrib 10.0.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 Connection id: 32 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.0.29-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 17 sec Threads: 1 Questions: 91 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 78 Queries per second avg: 5.352 -------------- |
Pengujian via PHP
Pengujian dilakukan dengan membuat file koneksi database PHP.
Membuat file koneksi
1 | nano /var/www/html/database.php |
Isinya
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $hostname = "10.0.8.119"; $username = "webapps"; $password = "webapps"; $database = "mysql"; $con = new mysqli($hostname, $username, $password, $database); if(!$con){ echo "Database Error ".mysqli_error(); exit; } else { echo "Sukses terhubung ke database"; } mysqli_close($con); ?> |
Akses http://IP_WEB_SERVER/database.php, jika berhasil tampil pesan Sukses terhubung ke database.
phpMyAdmin
Secara default phpMyAdmin hanya untuk mengakses database MariaDB/MySQL yang berada pada server yang sama dengan web server. Agar dapat mengakses database MariaDB/MySQL secara remote yang berada pada server yang lain kita harus menambahkan konfigurasi database server.
Edit file config phpMyAdmin
1 2 3 | cd /etc/phpmyadmin cp config.sample.inc.php config.inc.php nano config.inc.php |
Tambahkan config MariaDB server pada baris paling bawah.
1 2 3 4 5 6 7 8 9 | $i++; $cfg['Servers'][$i]['verbose'] = 'Server 10.0.8.119'; $cfg['Servers'][$i]['host'] = '10.0.8.119'; $cfg['Servers'][$i]['port'] = '3306'; $cfg['Servers'][$i]['socket'] = ''; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['AllowNoPassword'] = false; |
Akses http://IP_WEB_SERVER/phpmyadmin.
Ada tambahan pilihan Server Choice.
Login menggunakan user dan password yang sudah dibuat sebelumnya.
Lihat info Database server, no IP 10.0.8.119.
selamat mencoba 🙂
terimakasih penjelasannya pak..
bagaimana ya menentukan servernya, apakah disama ratakan atau bagaimana idealnya
misal 1gb ram untuk web apps, 2gb ram untuk database server
atau sebaliknya… karena ketiga database dibagung dengan web server saya melihat sepertinya mysql boros resource
lalu untuk pemisahan, apakah performa akan tetap atau turun ya pak? soalx paket melewati switch atau router terlebih dahulu (misal dalam bentuk virtual)
lalu topology yang cocok seperti apa ya pak misal ditambah load balancing di sisi web appsnya dan databasex terpisah. apkah seperti ini :
1. server1 -> ( LB?/cluster?) ->(dbserver1, dbserver2) -> (apakah begini bisa? atau diantara server ke dbserver perlu cluster)
2. LB -> (server1,server2) -> database digabung di webserver
3. LB -> (server1,server2) -> ( LB?/cluster?) -> (dbserver1)
4. LB -> (server1,server2) -> ( LB?/cluster?) -> (dbserver1,dbserver2)
manfaat install secara terpisah itu apa ea? ada kekurangan gak?
server terpisah, berarti pemakaian resources (CPU, RAM, Disk) server bisa secara penuh dipakai oleh web server atau database.