Arsitektur High-Availability dengan Ubuntu Server

Daftar Isi
- 1 Dalam Dunia Nyata: Kasus Server High-Availability
- 2 Memilih Distro dan Menyiapkan Lingkungan
- 3 Arsitektur High-Availability Menggunakan Docker
- 4 Pengaturan Load Balancer dengan Nginx
- 5 Keamanan: Hardening Server dan Mengatasi Serangan Brute Force
- 6 Monitoring dan Troubleshooting: Metrik Kinerja
- 7 Backup dan Restore: Praktik Terbaik
- 8 Kesimpulan
Dalam Dunia Nyata: Kasus Server High-Availability
Kami sedang menghadapi tantangan serius di lingkungan produksi kami. Sebuah aplikasi web yang kami host di beberapa server Ubuntu mengalami lonjakan traffic yang tidak terduga, menyebabkan downtime dan mengganggu layanan pelanggan. Dengan kecepatan bisnis yang semakin cepat, kami ingin memastikan bahwa infrastruktur kami tidak hanya dapat menangani beban saat ini, tetapi juga siap untuk pertumbuhan di masa depan. Di sinilah penjelasan Linux berperan, membantu kami membangun arsitektur yang tahan banting dan dapat diandalkan.
Memilih Distro dan Menyiapkan Lingkungan
Pertama-tama, kami memilih Ubuntu Server karena stabilitas dan kemudahan pengelolaannya. Untuk langkah awal, kita mulai dengan membuat beberapa VM di cloud server menggunakan VirtualBox atau AWS EC2. Mari kita lihat perintah dasar yang diperlukan:
sudo apt update && sudo apt upgrade -yPerintah ini memperbarui daftar paket dan mengupgrade semua paket yang terinstal. Penggunaan -y di akhir perintah memungkinkan kami melewatkan konfirmasi manual agar pembaruan berjalan otomatis, penting dalam operasi skala besar.
Jenis Jenis Web Hosting
Arsitektur High-Availability Menggunakan Docker
Untuk memastikan ketersediaan tinggi, kami memutuskan untuk menggunakan Docker sebagai bagian dari pendekatan containerization kami. Dengan pendekatan ini, kami dapat dengan mudah mengatur beberapa kontainer untuk melayani permintaan pengguna.
version: '3'
services:
web:
image: nginx
ports:
- '80:80'
app:
image: my_php_app
depends_on:
- db
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: exampleFile ini mendefinisikan tiga layanan: web, app, dan db. Dengan depends_on, kami memastikan bahwa kontainer database kami siap sebelum aplikasi web mencoba terhubung. Aspek penting dari Docker adalah kemudahan scaling; jika traffic meningkat, kita cukup menambah jumlah replika dari kontainer web dengan perintah:
docker-compose up --scale web=3Ini akan membuat tiga instansi dari layanan web kami, yang sangat penting untuk memastikan aplikasi kami dapat menampung lonjakan pengguna.
Implementasi dari Docker dalam arsitektur high-availability ini berjalan seiring dengan prinsip-prinsip yang diterapkan dalam Apache Nginx Linux dalam Website Modern, di mana keandalan dan skalabilitas menjadi kunci utama dalam memberikan pengalaman yang optimal bagi pengguna.
Pengaturan Load Balancer dengan Nginx
Sekarang, setelah kami memiliki beberapa kontainer, kami perlu mengatur load balancer untuk mendistribusikan traffic secara merata. Kami menggunakan Nginx sebagai reverse proxy.
http {
upstream app {
server app1:80;
server app2:80;
server app3:80;
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
}Di sini, upstream mendefinisikan grup server yang akan menerima traffic. Konfigurasi proxy_pass mengarahkan semua permintaan ke grup server aplikasi kita. Dengan cara ini, jika satu kontainer aplikasi gagal, Nginx dapat mengalihkan traffic ke kontainer lain yang aktif, membantu menjaga uptime.
Keamanan: Hardening Server dan Mengatasi Serangan Brute Force
Kemudian, kita harus mempertimbangkan aspek keamanan. Menurut OWASP, serangan berbasis brute force adalah salah satu ancaman yang paling umum. Kami menggunakan fail2ban untuk memblokir alamat IP yang mencurigakan.
sudo apt install fail2banSetelah penginstalan selesai, kita perlu membuat salinan file konfigurasi default:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localFile jail.local memungkinkan kita untuk menyesuaikan pengaturan. Mari kita edit file ini dan tambahkan konfigurasi dasar:
[sshd]
enabled = true
maxretry = 3
bantime = 86400Kita menjelaskan beberapa parameter di sini: maxretry menunjukkan jumlah percobaan gagal sebelum IP diblokir, dan bantime menentukan berapa lama (dalam detik) IP tersebut akan diblokir. Dengan konfigurasi ini, setiap kali seorang penyerang melakukan lebih dari tiga percobaan login yang gagal, mereka akan diblokir selama satu hari.
Monitoring dan Troubleshooting: Metrik Kinerja
Setelah arsitektur kami terpasang, monitoring menjadi kunci untuk memastikan performa optimal. Kami menggunakan Prometheus dan Grafana untuk memantau metrik kinerja — memudahkan kami dalam mengidentifikasi bottleneck. Mari kita tambahkan node_exporter untuk mengumpulkan data dari server:
sudo apt install prometheus-node-exporterSetelah terinstal, kami perlu mengonfigurasikan Prometheus untuk menarik metrik dari node_exporter. Kita akan menambahkan server ke dalam file prometheus.yml:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']Metrik kinerja seperti CPU usage, memori, dan disk I/O akan membantu kami dalam troubleshooting. Saat terjadi lonjakan traffic, kami dapat segera mengetahui server mana yang mengalami beban berlebih dan melakukan tindakan cepat dengan menambah kapasitas atau memindahkan traffic.
Backup dan Restore: Praktik Terbaik
Akhirnya, tidak ada yang lebih buruk daripada kehilangan data. Oleh karena itu, kami menetapkan kebijakan backup secara rutin. Kami menggunakan rsync untuk melakukan backup data secara incremental.
rsync -avz /path/to/source /path/to/destinationDalam perintah ini, -a adalah flag untuk archive mode, -v memberikan output verbose, dan -z mengompresi data selama transfer. Untuk restore, cukup balikkan sumber dan tujuan. Pastikan kita melakukan backup secara terjadwal menggunakan cron job.
Kesimpulan
Dengan pendekatan ini, kami telah berhasil membangun arsitektur Linux yang handal untuk aplikasi kami di server Ubuntu. Dari penggunaan Docker untuk containerization, konfigurasi load balancer dengan Nginx, hingga penerapan praktik keamanan dengan fail2ban, semua aspek krusial untuk high-availability sudah diatur. Pastikan untuk terus memantau metrik performa dan rutin melakukan backup untuk menjaga integritas layanan kami di masa depan.