Cara Menginstal MongoDB di Ubuntu


Pendahuluan

MongoDB adalah salah satu basis data NoSQL sumber terbuka yang paling populer, banyak digunakan untuk aplikasi yang memerlukan struktur data fleksibel, skalabilitas tinggi, dan kinerja cepat. Ini menyimpan data dalam format berorientasi dokumen menggunakan objek mirip JSON, yang membuatnya ideal untuk beban kerja web, seluler, dan analitik modern. Pengembang memilih MongoDB karena skema dinamisnya, sharding otomatis, dan fitur replikasi bawaan yang mendukung baik skala horizontal maupun ketersediaan tinggi. Ketika digabungkan dengan stabilitas dan keamanan Ubuntu, MongoDB menyediakan fondasi yang kuat untuk menjalankan aplikasi berbasis basis data yang andal dan efisien.

Dalam artikel ini, kami menjelaskan cara menginstal, mengonfigurasi, dan memelihara MongoDB 8.2 di Ubuntu 24.04 LTS. Kami membahas setiap langkah penting, mulai dari menyiapkan server dan mengaktifkan fitur keamanan hingga mengoptimalkan kinerja, menyiapkan replikasi dan cadangan, serta memecahkan masalah umum. Pada akhir artikel, Anda akan memiliki penerapan MongoDB siap produksi yang aman, terpantau, dan dioptimalkan untuk penggunaan jangka panjang. Apakah Anda menyiapkan MongoDB untuk pengembangan, pengujian, atau lingkungan produksi penuh, panduan ini memberikan instruksi rinci dan praktik operasional terbaik yang dibutuhkan untuk menjalankannya secara efektif.

Poin Penting:

  • Gunakan repositori resmi MongoDB untuk menginstal versi stabil terbaru daripada mengandalkan repositori default Ubuntu, yang berisi paket-paket yang sudah usang.
  • Kelola MongoDB sebagai layanan systemd menggunakan perintah standar seperti systemctl start mongod dan systemctl enable mongod untuk mengontrol dan memantau proses database.
  • Pahami dan konfigurasikan /etc/mongod.conf dengan cermat, karena file ini menentukan pengaturan penting untuk penyimpanan, pencatatan, jaringan, keamanan, dan replikasi.
  • Amankan penyebaran MongoDB Anda dengan mengaktifkan autentikasi, membatasi akses jaringan, mengonfigurasi firewall, dan mengaktifkan enkripsi TLS untuk data yang sedang ditransmisikan.
  • Ikuti praktik pemeliharaan rutin, termasuk pencadangan secara berkala, pemantauan sistem, dan rotasi log, untuk menjaga keandalan database dan mencegah kehilangan data.
  • Skalakan MongoDB dengan tepat menggunakan replica set untuk ketersediaan tinggi atau sharding untuk menangani dataset besar dan beban kerja terdistribusi.
  • Pilih antara penyebaran yang di-host sendiri dan yang dikelola berdasarkan kebutuhan Anda: MongoDB yang di-host sendiri menawarkan kontrol penuh, sedangkan layanan yang dikelola seperti MongoDB Atlas mempermudah penskalaan dan pemeliharaan.
  • Gunakan alat diagnostik dan log MongoDB untuk pemecahan masalah, seperti mongostat, mongotop, dan log sistem, untuk mengidentifikasi dan menyelesaikan masalah kinerja, koneksi, atau otentikasi secara efisien.

Prasyarat

Untuk mengikuti tutorial ini, Anda akan membutuhkan:

  • Sebuah server yang menjalankan Ubuntu 24.04 LTS. Server ini harus memiliki pengguna non-root dengan hak administratif dan UFW (Uncomplicated Firewall) terpasang dan dikonfigurasi. Lihat Panduan Pengaturan Server Awal kami dengan Ubuntu untuk menyiapkannya.

Menginstal MongoDB dari Repositori Resmi

Ubuntu 24.04 menyertakan versi MongoDB di repositori paket defaultnya, tetapi biasanya sudah usang. Untuk sistem produksi, Anda sebaiknya selalu menginstal MongoDB langsung dari repositori resmi MongoDB. Ini memastikan Anda mendapatkan versi stabil terbaru (8.2 pada saat penulisan) beserta pembaruan keamanan dan pemeliharaan secara tepat waktu.

Mari tambahkan repositori MongoDB ke sumber APT sistem Anda, impor kunci GPG yang digunakan untuk memverifikasi paket, dan kemudian instal basis data tersebut.

1. Impor Kunci GPG MongoDB

APT menggunakan kunci GPG untuk memverifikasi keaslian paket. Tanpa ini, sistem Anda tidak akan mempercayai repositori MongoDB.

Jalankan perintah berikut untuk mengimpor kunci publik untuk MongoDB 8.0:

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor

Berikut ini yang dilakukan ini:

  • curl -fsSL dengan diam-diam mengambil kunci GPG dari server resmi MongoDB.
  • --dearmor mengubah kunci dari format ASCII-armored menjadi format keyring biner yang kompatibel dengan APT.
  • Keluaran disimpan di /usr/share/keyrings/mongodb-server-8.0.gpg, lokasi standar untuk kunci terpercaya.

Jika perintah selesai tanpa kesalahan, kunci telah berhasil ditambahkan.

2. Tambahkan Repositori MongoDB

Selanjutnya, buat file daftar repositori baru yang mengarah ke sumber paket resmi MongoDB untuk Ubuntu 24.04 ("Noble").

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.2.list

Setiap bagian dari perintah ini memiliki tujuan yang jelas:

  • deb memberi tahu APT bahwa ini adalah repositori paket biner (berbeda dengan deb-src untuk kode sumber).
  • arch=amd64,arm64 membatasinya pada arsitektur Intel/AMD dan ARM 64-bit yang didukung oleh MongoDB.
  • signed-by=... memastikan APT menggunakan kunci MongoDB tertentu (yang ditambahkan di atas) untuk memverifikasi unduhan.
  • https://repo.mongodb.org/apt/ubuntu adalah URL dasar dari repositori APT resmi MongoDB.
  • noble/mongodb-org/8.2 menentukan kedua kode nama rilis Ubuntu (noble=Ubuntu 24.04) dan versi MongoDB (8.2).
  • multiverse adalah bagian komponen Ubuntu untuk perangkat lunak pihak ketiga.

3. Perbarui Indeks Paket Anda

Setelah menambahkan repositori baru, Anda harus menyegarkan daftar paket lokal sistem Anda agar APT mengenali sumber baru tersebut:

sudo apt update

APT akan mengunduh daftar paket terbaru dan memverifikasinya menggunakan kunci GPG. Jika Anda melihat MongoDB tercantum di antara repositori, konfigurasi Anda sudah benar.

4. Instal MongoDB

Sekarang pasang MongoDB dan alat-alat terkaitnya:

sudo apt install -y mongodb-org

Flag -y secara otomatis mengonfirmasi permintaan instalasi.

Ini akan menginstal satu set paket terkait, termasuk:

  • mongodb-org-server: Daemon server MongoDB (mongod), bertanggung jawab atas penyimpanan dan operasi database.
  • mongodb-org-mongos: Router sharding yang digunakan dalam penempatan terdistribusi.
  • mongodb-org-shell: Klien baris perintah interaktif (mongosh) yang digunakan untuk terhubung ke MongoDB.
  • mongodb-org-tools: Utilitas untuk backup dan pemulihan (mongodump, mongorestore, bsondump, dll.).

Setelah diinstal, berkas biner ditempatkan di /usr/bin/, dan berkas konfigurasi berada di /etc/mongod.conf.

5. Verifikasi Instalasi

Anda dapat memverifikasi bahwa MongoDB 8.2 telah berhasil diinstal dengan memeriksa versinya:

mongod --version

Anda sebaiknya melihat output yang mirip dengan:

db version v8.2.3
Build Info: {
    "version": "8.2.3",
    "gitVersion": "36f41c9c30a2f13f834d033ba03c3463c891fb01",
    "openSSLVersion": "OpenSSL 3.0.13 30 Jan 2024",
    "modules": [],
    "allocator": "tcmalloc-google",
    "environment": {
        "distmod": "ubuntu2404",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

Jika Anda melihat ini, MongoDB telah terpasang dengan benar dan siap untuk dijalankan sebagai layanan.

Memulai dan Mengelola Layanan MongoDB

Saat Anda menginstal MongoDB di Ubuntu, paket tersebut secara otomatis menyertakan unit layanan systemd bernama mongod.service. Integrasi ini memungkinkan MongoDB untuk memulai, menghentikan, dan memulai ulang dengan bersih menggunakan perintah manajemen layanan standar Ubuntu, sama seperti Nginx, PostgreSQL, atau daemon utama lainnya.

Mulai Layanan MongoDB

Secara default, MongoDB tidak akan mulai secara otomatis setelah instalasi. Untuk menjalankannya secara manual, gunakan perintah berikut:

sudo systemctl start mongod

Jika perintah dijalankan tanpa kesalahan, layanan seharusnya sekarang aktif. Anda dapat memastikannya dengan:

sudo systemctl status mongod

Contoh output:

● mongod.service - MongoDB Database Server
     Loaded: loaded (/usr/lib/systemd/system/mongod.service; disabled; preset: enabled)
     Active: active (running) since Tue 2026-01-06 07:08:28 UTC; 5s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 12462 (mongod)
     Memory: 195.4M (peak: 277.1M)
        CPU: 739ms
     CGroup: /system.slice/mongod.service
             └─12462 /usr/bin/mongod --config /etc/mongod.conf

Baris “Active: active (running)” menegaskan bahwa basis data sedang aktif dan berfungsi.

Jika Anda malah melihat “gagal” atau “tidak aktif”, lanjutkan ke bagian Memeriksa Log MongoDB untuk melakukan pemecahan masalah.

Aktifkan MongoDB untuk Memulai saat Boot

Sebagian besar sistem produksi memerlukan basis data untuk mulai secara otomatis setelah reboot. Untuk memungkinkan MongoDB dijalankan saat boot, jalankan:

sudo systemctl enable mongod

Ini membuat tautan simbolik di /etc/systemd/system/multi-user.target.wants/, yang memberi tahu systemd untuk memulai layanan secara otomatis setiap kali sistem memasuki mode multi-user (mode operasi standar untuk server).

Anda dapat mengonfirmasi perubahan dengan:

systemctl is-enabled mongod

Keluaran yang diharapkan:

enabled

Jika Anda ingin menonaktifkan startup otomatis (untuk pemeliharaan atau pengujian), gunakan:

sudo systemctl disable mongod

Verifikasi Operasi MongoDB

Setelah MongoDB berjalan, sebaiknya pastikan bahwa itu merespons dengan baik.

Jalankan perintah berikut untuk menghubungkan ke database dan memeriksa status koneksinya:

mongosh --eval "db.runCommand({ connectionStatus: 1 })"

Perintah ini:

  • Membuka sesi shell sementara (mongosh adalah shell MongoDB baru, menggantikan klien mongo yang lama).
  • Menjalankan perintah connectionStatus secara langsung pada instance lokal.
  • Menampilkan hasil koneksi tanpa mengharuskan Anda tetap berada di shell.

Contoh keluaran:

{
  authInfo: { authenticatedUsers: [], authenticatedUserRoles: [] },
  uuid: UUID('be686f2a-9cb3-41c1-aad2-8849367de4e5'),
  ok: 1
}

Nilai "ok": 1 menegaskan bahwa server berfungsi dengan benar dan menerima koneksi di port 27017.

Kelola Siklus Hidup Layanan MongoDB

Setelah Anda memverifikasi bahwa MongoDB sedang berjalan, akan sangat membantu untuk mengetahui cara mengelolanya dengan aman dalam operasi sehari-hari.

Berikut adalah perintah kunci:

PerintahDeskripsi
sudo systemctl stop mongod
Dengan anggun menghentikan layanan MongoDB.
sudo systemctl start mongod
Memulai layanan jika sedang berhenti.
sudo systemctl restart mongod
Memulai ulang layanan (berguna setelah perubahan konfigurasi).
sudo systemctl reload mongod
Memuat ulang konfigurasi tanpa melakukan restart penuh (skenario terbatas).
sudo systemctl disable mongod
Mencegah layanan dari memulai secara otomatis saat boot.
sudo systemctl status mongod
Menampilkan status saat ini dan log terbaru.

Merestart layanan (restart) sangat penting setelah mengedit /etc/mongod.conf. Ini memastikan perubahan konfigurasi Anda diterapkan.

Memeriksa Log MongoDB

Jika MongoDB gagal untuk dijalankan atau berperilaku tidak seperti biasanya, langkah pemecahan masalah pertama Anda seharusnya adalah memeriksa log.

Log MongoDB terletak di:

/var/log/mongodb/mongod.log

Anda dapat melihat 20 baris terakhir dengan:

sudo tail -n 20 /var/log/mongodb/mongod.log

Pesan log yang umum meliputi:

  • "Menunggu koneksi di port 27017": MongoDB berhasil dijalankan dan siap digunakan.
  • "Direktori data /var/lib/mongodb tidak ditemukan": Periksa bahwa jalur data ada dan memiliki izin yang benar.
  • "Alamat sudah digunakan": Proses lain sudah menggunakan port 27017.
  • "Izin ditolak": Pastikan pengguna MongoDB (mongodb) memiliki direktori data dan lognya.

Anda juga dapat menggunakan journalctl untuk melihat log spesifik layanan yang dikelola oleh systemd:

sudo journalctl -u mongod --since "5 minutes ago"

Menguji MongoDB saat Startup Sistem

Adalah praktik yang baik untuk memverifikasi bahwa MongoDB otomatis berjalan setelah reboot, terutama sebelum menerapkan aplikasi.

Untuk memulai ulang, jalankan:

sudo reboot

Setelah server Anda dimulai ulang, masuk kembali dan periksa layanan:

sudo systemctl status mongod

Jika muncul “aktif (berjalan)”, konfigurasi Anda sudah benar dan bersifat permanen.

Memahami Pengaturan Konfigurasi MongoDB

Saat Anda menginstal MongoDB, perilakunya dikendalikan oleh satu file konfigurasi yang terletak di /etc/mongod.conf.

File ini menentukan bagaimana MongoDB dijalankan: mulai dari tempat menyimpan data, cara mencatat aktivitas, alamat IP mana yang didengarkan, hingga mekanisme keamanan apa saja yang aktif. Memahami file ini sangat penting, terutama jika Anda berencana menjalankan MongoDB dalam produksi. Pengaturan dalam file ini setara dengan opsi baris perintah yang sesuai, tetapi menggunakan file konfigurasi membuat manajemen server lebih sederhana, terutama untuk penyebaran yang lebih besar atau otomatis.

Ikhtisar File Konfigurasi

File konfigurasi MongoDB menggunakan sintaks YAML, yang sensitif terhadap indentasi. Itu berarti Anda harus menggunakan spasi (bukan tab) saat mengeditnya, bahkan satu spasi yang salah tempat bisa merusak konfigurasi.

Anda dapat melihat isi file saat ini dengan:

sudo cat /etc/mongod.conf

File default terlihat seperti ini:

# mongod.conf

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

net:
  port: 27017
  bindIp: 127.0.0.1

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

Mari kita uraikan ini bagian demi bagian.

Bagian storage

Bagian ini menjelaskan di mana MongoDB menyimpan datanya dan bagaimana ia mengelola jurnal (yang memastikan ketahanan data).

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  • dbPath: Ini adalah direktori tempat MongoDB menyimpan database, koleksi, dan indeksnya. Secara default, direktori ini mengarah ke /var/lib/mongodb. Jika Anda mengubah jalur ini, pastikan direktori tersebut ada dan dimiliki oleh pengguna mongodb:

    sudo mkdir -p /data/mongodb
    
    sudo chown -R mongodb:mongodb /data/mongodb
  • journal.enabled: Ketika diatur ke true, MongoDB mempertahankan file jurnal yang membantu pemulihan dari kerusakan atau penghentian tak terduga. Journaling menulis perubahan ke log terpisah sebelum menyimpannya ke file data, mencegah kerusakan. Selalu aktifkan ini untuk sistem produksi.

Tip: Dengan WiredTiger, memisahkan jurnal ke disk lain umumnya tidak meningkatkan kinerja. Optimasi ini relevan untuk mesin penyimpanan yang lebih lama tetapi tidak lagi disarankan.

Bagian systemLog

Ini mengatur bagaimana dan di mana MongoDB menulis lognya.

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
  • destination: Menentukan tempat log ditulis. Nilai default file menulis log ke file; Anda dapat mengubahnya menjadi syslog jika Anda ingin log MongoDB terintegrasi dengan log sistem Anda.
  • logAppend: Ketika true, MongoDB menambahkan entri log baru ke file yang sudah ada daripada menimpanya saat restart.
  • path: Jalur absolut dari file log.

Anda dapat melihat log secara langsung dengan:

sudo tail -f /var/log/mongodb/mongod.log

Jika log Anda menjadi terlalu besar, pertimbangkan untuk mengaktifkan rotasi log dengan alat seperti logrotate atau mengonfigurasi log sistem Anda agar berotasi secara otomatis.

Bagian net

Bagian ini menjelaskan bagaimana MongoDB mendengarkan koneksi jaringan yang masuk.

net:
  port: 27017
  bindIp: 127.0.0.1
  • port: Port default MongoDB adalah 27017. Anda dapat mengubahnya jika menjalankan beberapa layanan database di host yang sama.
  • bindIp: Ini mengontrol antarmuka jaringan mana yang didengarkan oleh MongoDB.

Secara default, itu dibatasi ke 127.0.0.1 (alamat loopback lokal), yang berarti hanya koneksi lokal yang diterima. Ini adalah pengaturan keamanan penting yang mencegah akses jarak jauh sampai Anda secara eksplisit mengizinkannya.

Jika Anda berencana untuk terhubung dari mesin lain (misalnya, server web atau aplikasi jarak jauh), Anda dapat mengubahnya menjadi:

bindIp: 127.0.0.1,192.168.1.100

Atau, untuk mendengarkan di semua antarmuka (gunakan dengan hati-hati di produksi):

bindIp: 0.0.0.0

Catatan Keamanan: Jika Anda mengaktifkan akses jarak jauh, selalu aktifkan otentikasi dan aturan firewall untuk membatasi IP mana yang dapat terhubung.

Bagian keamanan

MongoDB terpasang dengan autentikasi dinonaktifkan secara default. Siapa pun yang bisa terhubung ke database dapat membaca atau memodifikasi data. Ini baik untuk pengujian, tetapi menjadi ancaman keamanan untuk sistem yang sebenarnya. Untuk mengaktifkan autentikasi berbasis pengguna, tambahkan bagian berikut:

security:
  authorization: enabled

Setelah ini diaktifkan, MongoDB akan meminta pengguna untuk melakukan autentikasi dengan nama pengguna dan kata sandi sebelum melakukan operasi.

Anda akan mengonfigurasi autentikasi secara rinci di bagian Securing MongoDB.

Pengaturan opsional lain dalam bagian ini meliputi:

  • keyFile: Digunakan untuk set replika agar bisa mengautentikasi antar node klaster.
  • javascriptEnabled: Mengaktifkan atau menonaktifkan eksekusi JavaScript sisi server (disarankan untuk tetap dinonaktifkan kecuali diperlukan).

Bagian processManagement

Bagian ini mengatur bagaimana MongoDB menangani manajemen proses dan informasi runtime.

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

Ini sebagian besar bersifat informasional; ini memastikan bahwa MongoDB memiliki akses ke data zona waktu untuk konversi stempel waktu. Dalam penempatan lanjutan, Anda juga dapat mengaktifkan forking di sini (untuk operasi latar belakang) jika MongoDB dijalankan secara manual tanpa systemd.

Bagian replication dan sharding (Opsional)

Anda tidak akan melihat bagian-bagian ini pada instalasi baru, tetapi bagian-bagian ini digunakan dalam pengaturan multi-node atau terdistribusi.

Contoh untuk mengaktifkan set replika:

replication:
  replSetName: "rs0"

Ini memberitahu MongoDB untuk memulai sebagai bagian dari set replika yang bernama rs0. Anda kemudian akan menginisialisasi dan menambahkan anggota dari dalam shell MongoDB.

Untuk sharding:

sharding:
  clusterRole: "shardsvr"

Ini menentukan peran node dalam klaster yang dipartisi.

Bagian setParameter

Bagian opsional ini memungkinkan Anda untuk mengubah parameter runtime yang menyempurnakan perilaku MongoDB.

Contoh :

setParameter:
  enableLocalhostAuthBypass: false

Mengatur ini ke false memastikan bahwa bahkan koneksi localhost memerlukan autentikasi. Parameter lain dapat mengontrol waktu tunggu kueri, perilaku kursor, atau pencatatan diagnostik.

Membuat dan Menerapkan Perubahan

Setiap kali Anda memodifikasi /etc/mongod.conf, Anda perlu me-restart MongoDB agar perubahan tersebut berlaku:

sudo systemctl restart mongod

Kemudian verifikasi bahwa layanan sedang berjalan:

sudo systemctl status mongod

Jika MongoDB gagal untuk memulai ulang, periksa kesalahan sintaks (kesalahan indentasi YAML cukup umum) atau tinjau log:

sudo tail -n 20 /var/log/mongodb/mongod.log

Contoh: Konfigurasi Aman dan Siap Produksi

Berikut adalah contoh mongod.conf yang bersih dan berorientasi produksi untuk Ubuntu 24.04:

# mongod.conf — Example production configuration

storage:
  dbPath: /data/mongodb
  journal:
    enabled: true
  engine: wiredTiger

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.10.10

security:
  authorization: enabled
  javascriptEnabled: false

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

replication:
  replSetName: "rs0"

setParameter:
  enableLocalhostAuthBypass: false

Konfigurasi ini:

  • Mengaktifkan otentikasi
  • Menggunakan WiredTiger (mesin penyimpanan default)
  • Hanya terikat pada antarmuka tepercaya tertentu
  • Mempersiapkan instance untuk inisialisasi set replika
  • Mencatat semua operasi ke file log khusus

Mengamankan MongoDB

Fleksibilitas MongoDB membuatnya kuat, tetapi juga berarti bahwa pengaturan yang tidak aman dapat dengan mudah menyebabkan kebocoran data. Pada masa awal MongoDB, banyak server dibiarkan terbuka ke internet tanpa otentikasi, memungkinkan penyerang untuk melihat, mengubah, atau bahkan menghapus basis data hanya dengan menghubungkan ke port 27017.

Hari ini, MongoDB dikirimkan dengan pengaturan default yang lebih aman, tetapi tetap menjadi tanggung jawab Anda untuk menegakkan otentikasi, pembatasan jaringan, dan enkripsi.

Mengaktifkan Otentikasi

Secara default, MongoDB dimulai dengan autentikasi nonaktif. Artinya siapa pun yang dapat terhubung ke database dapat menjalankan perintah administratif, menghapus koleksi, atau memodifikasi data tanpa batasan. Untuk mencegah hal ini, MongoDB menggunakan sistem Kontrol Akses Berbasis Peran (RBAC) yang harus Anda aktifkan secara eksplisit.

  1. Buka file konfigurasi MongoDB:

    sudo nano /etc/mongod.conf
  2. Temukan bagian security, atau buat satu jika belum ada:

    security:
      authorization: enabled
  3. Simpan dan keluar (Ctrl+O, lalu Ctrl+X).

  4. Mulai ulang MongoDB agar perubahan berlaku:

    sudo systemctl restart mongod

MongoDB menyediakan sementara bypass autentikasi localhost pada deployment baru sehingga pengguna administratif pertama dapat dibuat. Bypass ini akan dinonaktifkan secara otomatis setelah pengguna admin ada atau jika pengaturan keamanan tertentu (seperti keyFile atau clusterAuthMode) diaktifkan.

Itu berarti Anda dapat dengan aman membuat pengguna admin pertama Anda sebelum penerapan penuh dimulai.

Membuat Pengguna Administratif Pertama

Pengguna admin adalah fondasi dari sistem autentikasi MongoDB. Pengguna ini memiliki izin untuk membuat pengguna lain, menentukan peran, dan memberikan akses ke basis data tertentu.

Untuk membuat akun ini:

  1. Mulai shell MongoDB lokal:

    mongosh
  2. Beralih ke database admin, yang menyimpan kredensial pengguna dan definisi peran:

    use admin
  3. Buat pengguna dengan perintah berikut:

    db.createUser({
      user: "admin",
      pwd: "StrongPasswordHere",
      roles: [
        { role: "userAdminAnyDatabase", db: "admin" },
        "readWriteAnyDatabase"
      ]
    })

    Mari kita uraikan ini:

    • userAdminAnyDatabase memungkinkan pengguna ini untuk membuat, mengubah, dan menghapus pengguna di semua basis data.
    • readWriteAnyDatabase memberikan izin baca dan tulis secara global. (Anda dapat menghilangkan ini untuk pengguna admin-only yang lebih ketat jika diinginkan.)

    Perintah ini menulis dokumen baru ke koleksi system.users MongoDB di dalam database admin. Anda dapat memverifikasinya dengan mendaftar pengguna setelahnya:

    show users
  4. Keluar dari shell:

    exit
  5. Sambungkan kembali sebagai pengguna admin untuk memastikan bahwa autentikasi sekarang diterapkan:

    mongosh -u admin -p --authenticationDatabase admin

Setelah terautentikasi, Anda dapat menjalankan perintah administratif seperti:

show dbs

Jika MongoDB meminta kata sandi dan memberikan akses hanya setelah autentikasi, RBAC berfungsi dengan benar.

Praktik terbaik: Selalu gunakan kata sandi panjang yang dihasilkan secara acak atau integrasikan MongoDB dengan sistem manajemen rahasia seperti HashiCorp Vault.

Membuat Pengguna Berbasis Peran untuk Aplikasi

Dalam produksi, aplikasi Anda sebaiknya tidak pernah menggunakan akun admin. Sebagai gantinya, buatlah pengguna khusus untuk setiap aplikasi, masing-masing hanya dengan izin yang diperlukan.

Sebagai contoh, untuk membuat pengguna untuk aplikasi web yang mengelola data di database tertentu:

use myappdb
db.createUser({
  user: "appuser",
  pwd: "AppPassword123",
  roles: [ { role: "readWrite", db: "myappdb" } ]
})
  • readWrite memungkinkan aplikasi untuk melakukan semua operasi CRUD standar (menyisipkan, menanyakan, memperbarui, menghapus) hanya pada basis data ini.
  • Itu tidak dapat membuat pengguna lain, memodifikasi koleksi sistem, atau mengakses database lain.

Anda dapat menampilkan semua pengguna untuk sebuah database dengan:

show users

Tip: Selalu pisahkan pengguna berdasarkan aplikasi atau lingkungan (misalnya, appuser_prod dan appuser_staging) agar kredensial dapat diganti secara terpisah.

Membatasi Akses Jaringan

Bahkan dengan autentikasi diaktifkan, sangat berbahaya untuk mengekspos MongoDB ke internet terbuka. Pemindai otomatis secara rutin mencari port yang terbuka (terutama 27017, port default MongoDB), dan mencoba serangan brute-force atau mengeksploitasi instance yang salah konfigurasi.

Secara default, MongoDB hanya mendengarkan pada 127.0.0.1, yaitu antarmuka lokal. Jika aplikasi dan server MongoDB Anda berada di host yang sama, Anda tidak perlu mengubah apapun. Namun, jika aplikasi Anda terhubung dari jarak jauh, Anda perlu secara eksplisit memasukkan alamat IP tertentu ke daftar putih.

  1. Edit file konfigurasi:

    sudo nano /etc/mongod.conf
  2. Temukan bagian net dan perbarui:

    net:
      port: 27017
      bindIp: 127.0.0.1,192.168.10.50

    Ganti 192.168.10.50 dengan alamat IP server aplikasi tepercaya Anda. Ini memastikan MongoDB hanya menerima koneksi dari localhost dan host jarak jauh tertentu tersebut.

  3. Restart layanan untuk menerapkan perubahan:

    sudo systemctl restart mongod
  4. Konfirmasi tautan aktif:

    sudo ss -tulpn | grep mongod

Anda seharusnya melihat MongoDB mendengarkan pada 127.0.0.1:27017 dan IP yang Anda tentukan.

Catatan: Hindari menggunakan bindIp: 0.0.0.0 pada penyebaran bare-metal atau VM kecuali aturan firewall tingkat jaringan yang ketat sudah diterapkan. Dalam lingkungan yang dikontainerkan atau diatur dengan orkestrasi, 0.0.0.0 biasanya diperlukan, namun tetap harus dilindungi oleh kebijakan firewall atau jaringan.

Mengonfigurasi Firewall Ubuntu (UFW)

Meskipun MongoDB hanya mendengarkan pada antarmuka tertentu, praktik terbaik adalah memperkuat keamanan jaringan pada level sistem operasi.

UFW Ubuntu menyediakan cara yang mudah untuk mengontrol koneksi masuk dan keluar.

  1. Periksa apakah UFW terinstal dan aktif:

    sudo ufw status

    Jika ditampilkan sebagai tidak aktif, nyalakan:

    sudo ufw enable
  2. Izinkan koneksi MongoDB hanya dari IP tepercaya. Misalnya, jika IP server aplikasi Anda adalah 192.168.10.50:

    sudo ufw allow from 192.168.10.50 to any port 27017
  3. Periksa bahwa aturan telah ditambahkan:

    sudo ufw status numbered

    Anda seharusnya melihat entri yang mengizinkan port 27017 dari sumber yang ditentukan.

  4. Opsional, tolak semua lalu lintas lain ke MongoDB secara eksplisit:

    sudo ufw deny 27017/tcp

Kombinasi ini, bindIp dalam konfigurasi MongoDB dan aturan UFW selektif, memastikan bahwa hanya sistem yang dikenal yang bisa mengakses database Anda, bahkan jika proses lain mencoba untuk mengeksposnya.

Catatan: Untuk penerapan di cloud (seperti Linux-Console.net), konfigurasikan grup keamanan jaringan atau aturan firewall VPC sebagai lapisan perlindungan tambahan.

Mengaktifkan Enkripsi TLS/SSL

Sejauh ini, Anda telah memastikan bahwa hanya pengguna dan IP yang terpercaya yang dapat mengakses MongoDB. Langkah berikutnya adalah mengamankan data dalam perjalanan.

Ketika seorang klien terhubung ke MongoDB, semua data (termasuk kredensial autentikasi dan kueri) dikirim sebagai teks biasa secara default. TLS mengenkripsi data ini, mencegah penyadapan atau manipulasi.

Buat atau Dapatkan Sertifikat

Dalam produksi, gunakan sertifikat dari Otoritas Sertifikat (CA) yang tepercaya. Untuk pengujian atau penyebaran internal, Anda dapat membuat sertifikat yang ditandatangani sendiri:

sudo mkdir -p /etc/ssl/mongodb

sudo openssl req -newkey rsa:4096 -new -x509 -days 365 -nodes -out /etc/ssl/mongodb/mongodb.crt -keyout /etc/ssl/mongodb/mongodb.key -subj "/CN=$(hostname)"

Ini menciptakan:

  • mongodb.crt: sertifikat publik
  • mongodb.key: kunci privat

Gabungkan mereka menjadi satu file PEM (diperlukan oleh MongoDB):

sudo cat /etc/ssl/mongodb/mongodb.key /etc/ssl/mongodb/mongodb.crt | sudo tee /etc/ssl/mongodb/mongodb.pem

sudo chmod 600 /etc/ssl/mongodb/mongodb.pem

sudo chown mongodb:mongodb /etc/ssl/mongodb/mongodb.pem

Izin ini memastikan hanya pengguna mongodb yang dapat mengakses berkas kunci.

Perbarui Berkas Konfigurasi

Edit /etc/mongod.conf dan temukan bagian net. Tambahkan blok tls baru di bawahnya:

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.10.50
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb/mongodb.pem
  • mode: requireTLS berarti MongoDB akan menolak semua koneksi yang tidak terenkripsi.
  • certificateKeyFile menentukan jalur file PEM gabungan.

Restart MongoDB untuk menerapkan perubahan:

sudo systemctl restart mongod

Sambungkan Menggunakan TLS

Saat terhubung dengan mongosh, Anda sekarang harus menentukan opsi --tls:

mongosh --tls --host 192.168.10.50 -u admin -p --authenticationDatabase admin

Jika koneksi berhasil dan prompt muncul, konfigurasi TLS Anda berfungsi dengan benar.

Anda dapat memverifikasi enkripsi dengan memeriksa koneksi menggunakan OpenSSL:

openssl s_client -connect 192.168.10.50:27017

Keluaran harus menampilkan rantai sertifikat dan detail enkripsi, misalnya:

SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384

Ini mengonfirmasi bahwa server MongoDB Anda sekarang mengenkripsi lalu lintas secara menyeluruh.

Tips Pro: Saat mengaktifkan TLS dalam set replika, konfigurasikan baik keyFile maupun clusterAuthMode (biasanya diatur ke x509 atau keyFile) agar node dapat saling mengautentikasi dengan aman.

Memverifikasi Postur Keamanan Anda

Setelah semuanya dikonfigurasi, sebaiknya periksa kembali pengaturan Anda.

  1. Periksa bahwa MongoDB hanya terhubung ke IP yang diizinkan:

    sudo ss -tulpn | grep mongod

    Anda seharusnya hanya melihat koneksi yang terbatas pada 127.0.0.1 dan IP terpercaya Anda.

  2. Pastikan otentikasi ditegakkan. Cobalah menghubungkan tanpa kredensial:

    mongosh

    Anda seharusnya menerima kesalahan autentikasi.

  3. Verifikasi bahwa TLS diperlukan. Coba sambungkan tanpa --tls:

    mongosh --host 192.168.10.50 -u admin -p --authenticationDatabase admin

    Jika koneksi gagal dengan pesan tentang persyaratan TLS, enkripsi Anda diterapkan dengan benar.

  4. Tinjau parameter keamanan internal MongoDB:

    mongosh -u admin -p --authenticationDatabase admin --eval "db.runCommand({ getParameter: 1, tlsMode: 1 })"

    Jika tlsMode mengembalikan "requireTLS", enkripsi dipastikan aktif.

Dengan autentikasi, kontrol akses, pembatasan jaringan, dan TLS yang semuanya telah dikonfigurasi, instansi MongoDB Anda sekarang lebih aman terhadap vektor serangan yang paling umum.

Praktik Terbaik Operasional

Setelah MongoDB diinstal dan diamankan, prioritas utama berikutnya adalah memeliharanya secara efektif. Bahkan database yang dikonfigurasi dengan hati-hati pun bisa menjadi tidak andal tanpa pemeliharaan rutin. Operasi rutin seperti pencadangan, pemantauan, dan pembaruan sistem memastikan MongoDB tetap berkinerja baik, stabil, dan dapat dipulihkan seiring waktu.

Mencadangkan Data MongoDB

Strategi cadangan yang direncanakan dengan baik sangat penting untuk setiap basis data produksi. Cadangan memungkinkan Anda untuk pulih dengan cepat dari kegagalan perangkat keras, bug perangkat lunak, atau penghapusan yang tidak sengaja. MongoDB mendukung cadangan logis dan fisik, masing-masing sesuai untuk berbagai skenario.

Backup Logis Menggunakan mongodump

Cadangan logis menangkap isi database dalam format BSON menggunakan utilitas mongodump. Pendekatan ini portabel, mudah dibaca manusia, dan mudah diotomatisasi.

Untuk membuat cadangan penuh dari semua database, jalankan:

mongodump --out /backups/mongodb/$(date +%F)

Perintah ini membuat direktori dengan nama tanggal saat ini di bawah /backups/mongodb/ dan menyimpan semua dump BSON di dalamnya.

Jika autentikasi diaktifkan, gunakan string koneksi URI yang menyertakan kredensial:

mongodump --uri="mongodb://admin:YourPassword@localhost:27017/admin" --out /backups/mongodb/$(date +%F)

Anda juga dapat mencadangkan basis data tertentu:

mongodump --db=myappdb --out /backups/mongodb/$(date +%F)

Untuk memulihkan dari cadangan logis, gunakan mongorestore:

mongorestore /backups/mongodb/2026-01-05/

Atau pulihkan satu database:

mongorestore --db=myappdb /backups/mongodb/2026-01-05/myappdb

Cadangan logis bersifat fleksibel dan mudah dibuat skripnya, tetapi bisa memakan waktu lebih lama untuk dataset yang sangat besar.

Rekomendasi: Jadwalkan backup logis harian menggunakan cron job atau timer systemd, dan selalu verifikasi proses pemulihan di server staging sebelum mengandalkan backup di lingkungan produksi.

Cadangan Fisik (Snapshot Sistem Berkas)

Backup fisik mengambil file database langsung dari volume penyimpanan. Metode ini lebih cepat dan lebih efisien dalam penggunaan ruang untuk database besar, tetapi memerlukan snapshot yang konsisten untuk menghindari kerusakan.

Jika Anda menggunakan journaling (yang diaktifkan secara default), Anda dapat mengambil snapshot volume saat MongoDB sedang berjalan. WiredTiger mendukung snapshot yang konsisten saat terjadi crash saat MongoDB berjalan, selama journaling diaktifkan. Untuk snapshot yang sepenuhnya konsisten dengan aplikasi, disarankan untuk menghentikan MongoDB tetapi tidak wajib:

sudo systemctl stop mongod

Ambil snapshot menggunakan penyedia cloud atau sistem penyimpanan Anda dan restart layanan:

sudo systemctl start mongod

Simpan salinan snapshot di lokasi luar kantor atau di wilayah terpisah bila memungkinkan. Ini melindungi dari gangguan pusat data atau penghapusan lokal yang tidak disengaja.

Memantau Kesehatan MongoDB

Pemantauan sangat penting untuk mencegah masalah sebelum memengaruhi pengguna. MongoDB menyediakan alat baris perintah bawaan serta dukungan untuk sistem pemantauan eksternal.

Menggunakan Alat Bawaan

Alat mongostat menampilkan metrik basis data secara langsung seperti operasi per detik, penggunaan memori, dan koneksi aktif. Jalankan seperti berikut:

mongostat --uri "mongodb://admin@localhost:27017/?authSource=admin"

Ini menghasilkan tabel waktu nyata yang menunjukkan insert, query, update, dan delete. Setiap kolom mewakili indikator kinerja utama, seperti rasio halaman memori yang kotor atau jumlah koneksi aktif.

Utilitas mongotop fokus pada berapa lama MongoDB menghabiskan waktu untuk membaca dan menulis per koleksi. Untuk menjalankannya setiap dua detik, gunakan:

mongotop 2

Ini berguna untuk mengidentifikasi koleksi yang mengalami I/O yang tinggi.

Menggunakan Alat Pemantauan Eksternal

Untuk visibilitas dan peringatan yang terus-menerus, Anda dapat mengintegrasikan MongoDB dengan sistem eksternal seperti:

  • Pemantauan MongoDB Atlas, bahkan untuk cluster yang dihosting sendiri.
  • Prometheus dan Grafana, menggunakan MongoDB Exporter untuk dashboard deret waktu.
  • Percona Monitoring and Management (PMM), sebuah paket pemantauan open-source lengkap.
  • Alat sistem umum seperti Netdata, Zabbix, atau Datadog.

Metrik penting yang perlu dipantau meliputi:

  • Penggunaan memori dan tingkat keberhasilan cache
  • Latensi dan throughput I/O disk
  • Jumlah koneksi dan panjang antrean
  • Latensi operasi (waktu menyisipkan, memperbarui, mengquery)
  • Keterlambatan replika (jika menjalankan set replika)

Rekomendasi: Konfigurasikan peringatan untuk ambang kritis seperti pemakaian disk yang tinggi, lonjakan koneksi, atau keterlambatan replikasi yang melebihi lima detik.

Mengelola Ruang Disk dan Pertumbuhan Penyimpanan

Database MongoDB berkembang secara dinamis seiring pertumbuhan dokumen dan indeks. Jika penggunaan disk dibiarkan tanpa pengawasan, database bisa kehabisan ruang, menyebabkan terkunci atau crash.

Memeriksa Penggunaan Disk

Periksa penggunaan sistem berkas saat ini dengan:

df -h /var/lib/mongodb

Ini menampilkan ruang yang tersedia dan yang digunakan untuk direktori data MongoDB.

Anda juga dapat memeriksa penggunaan memori dan cache melalui MongoDB itu sendiri:

mongosh --eval "db.serverStatus().wiredTiger.cache"

Nilai bytes currently in the cache menunjukkan berapa banyak RAM yang digunakan oleh mesin penyimpanan WiredTiger.

Mengatur Peringatan Penggunaan Disk

Untuk tetap proaktif, atur peringatan atau pemeriksaan pemantauan yang memberi tahu Anda ketika penggunaan disk melebihi 85%. Misalnya, sebuah skrip sederhana dapat dijadwalkan untuk dijalankan secara berkala:

df -h | awk '$5 > 85 {print $0}'

Anda dapat mengintegrasikan ini ke dalam timer systemd atau alat pemantauan untuk otomatisasi.

Mengelola Data dan Log Lama

Koleksi dan file log yang besar atau tidak terpakai dapat memakan ruang yang signifikan seiring waktu. Untuk mengelola log, atur rotasi di /etc/logrotate.d/mongodb (seperti yang ditunjukkan nanti di bagian ini) atau bersihkan secara manual:

sudo journalctl --vacuum-time=7d

sudo rm -f /var/log/mongodb/*.gz

Untuk data aplikasi, pertimbangkan menggunakan indeks TTL (time-to-live) untuk koleksi yang menyimpan data sementara atau data yang sensitif terhadap waktu:

db.sessionLogs.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 604800 })

Ini secara otomatis menghapus dokumen yang berusia lebih dari tujuh hari.

Melakukan Peningkatan yang Aman

Meningkatkan versi MongoDB memerlukan perencanaan yang matang, terutama saat berpindah antara versi utama. Proses berikut ini meminimalkan waktu henti dan memastikan kompatibilitas.

Periksa Versi Saat Ini

Konfirmasi versi yang terpasang:

mongod --version

Cadangkan Sebelum Meningkatkan

Selalu buat cadangan penuh sebelum melakukan peningkatan:

mongodump --out /backups/mongodb/pre-upgrade-$(date +%F)

Perbarui Repositori Paket dan Tingkatkan

Jika sebelumnya Anda menahan paket MongoDB untuk mencegah pembaruan otomatis, lepaskan penahanannya:

echo "mongodb-org install" | sudo dpkg --set-selections

Kemudian perbarui daftar paket Anda dan tingkatkan MongoDB:

sudo apt update

sudo apt install -y mongodb-org

MongoDB menjaga file konfigurasi dan data Anda selama pembaruan, tetapi cadangan menjamin Anda bisa mengembalikannya jika terjadi sesuatu yang salah.

Validasi Pembaruan

Setelah pembaruan:

  1. Periksa status layanan:

    sudo systemctl status mongod
  2. Periksa log terbaru untuk peringatan atau catatan migrasi:

    sudo tail -n 30 /var/log/mongodb/mongod.log
  3. Konfirmasi versi baru:

    mongosh --eval "db.version()"

Rekomendasi: Untuk peningkatan versi mayor (misalnya, dari 7.x ke 8.x), selalu baca catatan rilis resmi MongoDB.

Beberapa perilaku kueri atau struktur penyimpanan internal mungkin berubah.

Mengotomatiskan Pemeliharaan Rutin

Pemeliharaan manual bekerja untuk lingkungan kecil, tetapi otomatisasi memastikan konsistensi. Anda dapat menjadwalkan cadangan berulang, rotasi log, atau pemeriksaan pemantauan menggunakan cron atau systemd timers.

Jadwalkan Cadangan Otomatis

Edit crontab root:

sudo crontab -e

Tambahkan baris berikut untuk mencadangkan instance MongoDB Anda setiap malam pukul 2 pagi:

0 2 * * * mongodump --out /backups/mongodb/$(date +\%F)

Ini membuat folder cadangan dengan tanggal setiap hari.

Konfigurasikan Rotasi Log

Untuk mencegah file log menghabiskan ruang disk, buat file konfigurasi rotasi log:

sudo nano /etc/logrotate.d/mongodb

Tambahkan konten berikut:

/var/log/mongodb/mongod.log {
    weekly
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 640 mongodb adm
    postrotate
        systemctl reload mongod > /dev/null 2>&1 || true
    endscript
}

Konfigurasi ini menyimpan log selama lima minggu, mengompres file yang lebih lama, dan memuat ulang MongoDB setelah rotasi.

Mempertahankan Waktu Sistem yang Akurat

Fitur jurnal dan replikasi MongoDB bergantung pada cap waktu yang akurat. Jika jam sistem meleset, keterlambatan replikasi atau kerusakan jurnal dapat terjadi setelah terjadi crash.

Ubuntu 24.04 menggunakan systemd-timesyncd secara default, tetapi Anda juga dapat menggunakan chrony untuk sinkronisasi waktu yang lebih akurat:

sudo apt install chrony -y

sudo systemctl enable --now chrony

Anda dapat memverifikasi sinkronisasi dengan:

timedatectl status

Jika NTP synchronized ditampilkan sebagai yes, jam sistem Anda sudah sinkron.

Memeriksa Kesehatan MongoDB Secara Real Time

MongoDB menyediakan perintah serverStatus untuk diagnostik runtime yang komprehensif. Anda dapat menanyakannya langsung dari shell:

mongosh --eval "db.serverStatus()"

Ini mengembalikan objek JSON yang rinci yang berisi metrik seperti:

  • Konsumsi memori
  • Penggunaan cache
  • Jumlah koneksi
  • Throughput operasi
  • Status replikasi

Anda dapat mengekstrak bidang tertentu untuk pemeriksaan yang ditargetkan. Misalnya, untuk melihat statistik koneksi:

mongosh --eval "db.serverStatus().connections"

Ini memungkinkan wawasan cepat tentang apakah sistem mengalami kejenuhan koneksi atau keterbatasan sumber daya.

Mempersiapkan Ketersediaan Tinggi

Penerapan MongoDB dengan satu node bekerja dengan baik untuk pengembangan atau aplikasi dengan tingkat kritis rendah. Untuk lingkungan produksi, Anda harus menerapkan replica sets. Replica sets menyediakan redundansi dan failover otomatis, memastikan ketersediaan bahkan jika satu node gagal.

Dalam pengaturan khas:

  • Satu node bertindak sebagai utama, menangani semua penulisan dan sebagian besar pembacaan.
  • Satu atau lebih node sekunder mereplikasi data secara real time.
  • Jika node utama mati, salah satu node sekunder secara otomatis akan menjadi node utama yang baru.

Replica set juga mempermudah tugas pemeliharaan seperti pencadangan dan penskalaan. Anda dapat memindahkan pencadangan atau kueri analitik ke node sekunder tanpa memengaruhi kinerja utama.

Instansi MongoDB Anda sekarang sepenuhnya beroperasi dan terkelola dengan baik.

Skalabilitas dan Optimisasi Kinerja

MongoDB dirancang untuk skalabilitas horizontal, artinya Anda dapat meningkatkan kapasitas dan kinerja dengan menambahkan lebih banyak server daripada hanya mengandalkan satu mesin yang lebih kuat. Saat dataset Anda berkembang atau aplikasi Anda mulai menangani lebih banyak kueri secara bersamaan, penskalaan memastikan bahwa MongoDB terus berfungsi dengan andal dan efisien.

Ada dua cara utama untuk meningkatkan skala MongoDB:

  1. Set replika, yang meningkatkan keandalan dan performa baca melalui redundansi.
  2. Sharding, yang mendistribusikan data di beberapa server untuk menangani dataset yang lebih besar dan beban penulisan.

Memahami Replica Set

Sebuah replica set adalah sekumpulan server MongoDB yang menjaga salinan identik dari data Anda. Replica set menyediakan ketersediaan tinggi dan melindungi terhadap kegagalan perangkat keras atau jaringan. Jika node utama gagal, salah satu node sekunder secara otomatis mengambil alih, memastikan waktu henti yang minimal.

Sebuah replica set standar terdiri dari:

  • Satu node utama yang menangani semua operasi penulisan.
  • Dua atau lebih node sekunder yang menyalin data dari node utama.
  • Node arbiter opsional yang ikut serta dalam pemilihan tetapi tidak menyimpan data.

Untuk sistem produksi, MongoDB menyarankan minimal tiga anggota dalam satu set replika.

Mengonfigurasi Set Replika

Untuk membuat replika set, Anda memerlukan setidaknya dua atau tiga server (fisik atau virtual). Setiap node harus memiliki MongoDB yang terpasang dan dikonfigurasi.

  1. Pada setiap node, buka file konfigurasi /etc/mongod.conf dan tambahkan bagian replika:

    replication:
      replSetName: "rs0"
  2. Mulai ulang MongoDB di setiap server:

    sudo systemctl restart mongod
  3. Pada node utama, sambungkan ke MongoDB dan inisialisasi set replika:

    mongosh

    Lalu jalankan:

    rs.initiate({
      _id: "rs0",
      members: [
        { _id: 0, host: "mongodb1.example.com:27017" },
        { _id: 1, host: "mongodb2.example.com:27017" },
        { _id: 2, host: "mongodb3.example.com:27017" }
      ]
    })
  4. Periksa status:

    rs.status()

    Keluaran harus menunjukkan satu utama dan dua sekunder dengan status mereka diberi label sebagai "PRIMER" dan "SEKUNDER."

Manfaat Set Replika

Set replika menawarkan beberapa keuntungan penting:

  • Ketersediaan tinggi: Pemindahan otomatis memastikan operasi tetap berjalan jika node utama mati.
  • Redundansi data: Setiap node menyimpan salinan penuh dari data.
  • Skalabilitas pembacaan: Node sekunder dapat menangani operasi pembacaan, mengurangi beban pada node utama.
  • Fleksibilitas pemeliharaan: Anda dapat melakukan cadangan atau pembaruan sistem pada node sekunder tanpa memengaruhi ketersediaan.

Praktik terbaik: Gunakan distribusi merata dari node replika di berbagai zona fisik atau wilayah ketersediaan untuk mencegah kehilangan data selama pemadaman.

Memahami Sharding

Sharding adalah strategi MongoDB untuk skala horizontal. Ketika sebuah dataset menjadi terlalu besar untuk disimpan atau diproses secara efisien oleh satu server saja, MongoDB dapat membaginya menjadi potongan-potongan lebih kecil yang didistribusikan ke beberapa server yang disebut shard.

Setiap partisi menyimpan sebagian data, dan klaster secara kolektif berfungsi sebagai satu basis data logis.

Komponen dari Klaster Sharded

Sebuah cluster sharded MongoDB khas mencakup:

  • Shards: Node yang menyimpan data, sering ditempatkan sebagai set replika untuk keandalan.
  • Server konfigurasi: Menyimpan metadata dan konfigurasi klaster, termasuk distribusi chunk.
  • Router Mongos: Mengarahkan kueri klien ke shard yang tepat berdasarkan kunci sharding.

Memilih Kunci Shard

Kunci shard menentukan bagaimana MongoDB mendistribusikan data di seluruh shard. Pemilihan kunci shard yang buruk dapat menyebabkan distribusi data yang tidak merata (dikenal sebagai data skew) atau hotspot.

Kunci shard yang baik biasanya memiliki:

  • Kardinalitas tinggi (banyak nilai unik).
  • Bahkan pola akses data.
  • Pola kueri yang dapat diprediksi yang mencakup kunci shard di sebagian besar kueri.

Contoh mengaktifkan sharding untuk sebuah database:

sh.enableSharding("salesdb")
sh.shardCollection("salesdb.orders", { "customer_id": 1 })

Perintah ini mengaktifkan sharding pada database salesdb dan membagi koleksi orders menggunakan field customer_id.

Kapan Menggunakan Sharding

Anda sebaiknya mempertimbangkan sharding ketika:

  • Basis data mendekati atau melebihi batas kapasitas penyimpanan dari satu server.
  • Throughput penulisan secara konsisten memaksimalkan CPU atau I/O disk.
  • Set kerja tidak lagi muat di RAM, menyebabkan sering terjadinya pertukaran halaman.
  • Anda mengantisipasi pertumbuhan eksponensial dalam dataset Anda.

Sharding menambah kompleksitas arsitektur, jadi sebaiknya diperkenalkan hanya ketika diperlukan.

Catatan: Setelah sebuah koleksi di-shard, MongoDB tidak mendukung penghapusan shard. Rencanakan kunci shard Anda dengan hati-hati sebelum mengaktifkan sharding.

Menyetel WiredTiger untuk Kinerja

MongoDB menggunakan mesin penyimpanan WiredTiger secara default. Ini dioptimalkan untuk perangkat keras modern dan menggunakan kompresi, caching, serta I/O multi-thread. Memahami bagaimana WiredTiger mengelola memori dan I/O disk membantu meningkatkan kinerja.

Penggunaan Memori

WiredTiger biasanya menggunakan sekitar 50% dari RAM yang tersedia untuk cachenya, dengan MongoDB menyesuaikan nilai ini secara dinamis berdasarkan memori sistem.

Anda dapat menyesuaikannya di file konfigurasi:

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8

Ini berguna jika sistem Anda menjalankan layanan lain yang membutuhkan memori tinggi selain MongoDB. Untuk server MongoDB khusus, membiarkan pengaturan cache default biasanya yang terbaik.

Anda dapat melihat penggunaan cache saat ini dengan menjalankan:

mongosh --eval "db.serverStatus().wiredTiger.cache"

Kompresi

WiredTiger mendukung kompresi data dan indeks untuk mengurangi penggunaan disk. Secara default, ia menggunakan kompresi Snappy, yang menyeimbangkan kinerja dan efisiensi ruang. Anda dapat beralih ke zlib (untuk kompresi yang lebih baik) atau zstd (untuk pengaturan baru) jika Anda mengutamakan penghematan disk dibandingkan kecepatan.

Contoh konfigurasi:

storage:
  wiredTiger:
    collectionConfig:
      blockCompressor: zstd

Jurnal dan Ketahanan

Journaling memastikan bahwa operasi penulisan bersifat tahan lama, bahkan dalam kasus kehilangan daya. Anda bisa menyesuaikan parameter commitIntervalMs untuk mengontrol seberapa sering penulisan jurnal terjadi:

storage:
  journal:
    commitIntervalMs: 100

Interval yang lebih rendah meningkatkan daya tahan tetapi mungkin sedikit mengurangi kinerja penulisan.

Rekomendasi: Untuk sebagian besar beban kerja produksi, pertahankan pengaturan jurnal default, karena keseimbangan WiredTiger antara kinerja dan daya tahan telah diuji dengan baik.

Pemicu Pemantauan dan Skala

Penting untuk mengenali kapan harus meningkatkan skala penyebaran MongoDB Anda. Memantau metrik seperti beban CPU, penggunaan memori, dan waktu tunggu I/O akan membantu menentukan kapan saatnya menambah kapasitas.

Pemicu Umum untuk Perluasan

  • Pemanfaatan CPU secara konsisten di atas 80%.
  • Latensi I/O disk melebihi ambang yang dapat diterima (misalnya, lebih dari 10 ms).
  • Pemanfaatan RAM mendekati maksimum untuk jangka waktu yang lama.
  • Pertumbuhan cepat dalam ukuran set kerja.
  • Peningkatan keterlambatan replikasi antar node.

Ketika indikator-indikator ini muncul, pertimbangkan untuk menambahkan lebih banyak sekunder (untuk pembacaan) atau shard (untuk beban yang banyak menulis).

Skalasi Vertikal vs. Horizontal

Skalasi vertikal melibatkan penambahan lebih banyak sumber daya (CPU, RAM, disk lebih cepat) ke server yang sudah ada. Ini lebih mudah dikelola tetapi terbatas oleh kapasitas perangkat keras.

Skalabilitas horizontal melibatkan penambahan server baru untuk mendistribusikan beban kerja. Ini adalah kekuatan MongoDB, karena dapat skala hampir secara linier ketika dirancang dengan benar.

Migrasi ke MongoDB yang Dikelola

Seiring pertumbuhan sistem Anda, mengelola klaster yang di-hosting sendiri bisa menjadi kompleks. Pada tahap ini, bermigrasi ke layanan MongoDB yang dikelola, seperti MongoDB Atlas, dapat secara signifikan mengurangi beban operasional.

Platform yang dikelola menangani pencadangan otomatis, patching, pemantauan, penskalaan, dan enkripsi. Namun, mereka mungkin menimbulkan biaya tambahan dan sedikit lebih sedikit fleksibilitas dibandingkan dengan pengaturan yang dikelola sendiri.

<$> Rekomendasi: Tetap menggunakan hosting sendiri sampai tim Anda menghadapi tantangan operasional yang konsisten seperti hambatan kinerja, kompleksitas manajemen klaster, atau persyaratan kepatuhan yang ditangani lebih efisien oleh platform yang dikelola. <$>

Perbandingan: MongoDB Self-Hosted vs Managed

MongoDB dapat diterapkan dengan dua cara utama:

  1. Self-hosted, di mana Anda menginstal, mengonfigurasi, dan memelihara basis data sendiri (seperti yang dijelaskan dalam panduan ini).
  2. Ter Kelola, di mana penyedia pihak ketiga meng-host dan mengoperasikan MongoDB untuk Anda sebagai layanan.

Setiap pendekatan memiliki keuntungan dan kompromi yang berbeda. Pilihan yang tepat bergantung pada keahlian teknis Anda, karakteristik beban kerja, kebutuhan kepatuhan, dan prioritas operasional.

Mari kita bahas kedua opsi ini secara mendalam.

MongoDB yang Dikelola Sendiri

Ketika Anda meng-host MongoDB sendiri, Anda menginstalnya langsung di infrastruktur Anda sendiri, baik itu server fisik, mesin virtual, atau instance cloud seperti Droplet Linux-Console.net. Anda mengontrol setiap aspek lingkungan, mulai dari instalasi hingga pembaruan dan pemantauan.

Keuntungan dari Menyediakan Sendiri Hosting

  1. Kendali Penuh dan Fleksibilitas: Anda memiliki otoritas penuh atas pengaturan konfigurasi, sistem file, jaringan, dan penyetelan kinerja. Anda dapat memodifikasi file mongod.conf, memilih jalur penyimpanan, dan menerapkan kebijakan keamanan atau cadangan khusus yang sesuai dengan standar organisasi Anda.
  2. Efisiensi Biaya untuk Penempatan Kecil: Untuk beban kerja kecil atau menengah, hosting sendiri bisa lebih murah daripada menggunakan layanan yang dikelola. Anda hanya membayar untuk sumber daya komputasi dan penyimpanan yang mendasarinya, bukan untuk lapisan manajemen tambahan.
  3. Kebijakan Keamanan Khusus: Anda dapat mengintegrasikan MongoDB dengan VPN internal, firewall, atau jaringan pribadi, memastikan kepatuhan penuh terhadap persyaratan keamanan lokal atau spesifik industri. Beberapa organisasi mengharuskan penerapan di lokasi sendiri karena pembatasan residensi data atau regulasi, yang menjadikan self-hosting satu-satunya opsi yang memungkinkan.
  4. Optimisasi Kinerja: Karena Anda mengendalikan perangkat keras, Anda dapat menyetel parameter sistem seperti penjadwal I/O, ukuran cache, dan algoritma kompresi. Anda juga dapat menempatkan MongoDB berdekatan dengan layanan terkait untuk meminimalkan latensi jaringan.

Tantangan dalam Menyediakan Layanan Sendiri

  • Overhead Operasional: Anda bertanggung jawab untuk mengelola semuanya; mulai dari memasang pembaruan dan patch hingga menangani gangguan dan penyetelan kinerja. Ini membutuhkan staf khusus dengan keahlian dalam administrasi database dan manajemen sistem Linux.
  • Kompleksitas Skalabilitas: Menskalakan klaster MongoDB yang di-hosting sendiri berarti menyediakan server baru, menyeimbangkan kembali data, memperbarui konfigurasi, dan memelihara replikasi atau topologi sharding secara manual. Tugas-tugas ini bisa rentan terhadap kesalahan jika tidak dilakukan otomatisasi.
  • Cadangan dan Pemulihan Bencana: Anda harus merancang, menguji, dan memelihara proses cadangan, pemulihan, dan penyimpanan di lokasi lain sendiri. Meskipun alat MongoDB (mongodump, mongorestore, dan snapshot volume) memungkinkan hal ini, hal ini membutuhkan perencanaan operasional yang disiplin.
  • Monitoring dan Peringatan: MongoDB yang di-host sendiri mengharuskan Anda untuk mengatur sistem monitoring dan peringatan menggunakan alat seperti Prometheus, Grafana, atau Percona PMM. Tanpa visibilitas yang terus-menerus, kegagalan atau hambatan kinerja mungkin tidak terdeteksi sampai menyebabkan downtime.

Singkatnya, MongoDB yang dihosting sendiri memberikan fleksibilitas, kemandirian, dan biaya lebih rendah dalam skala kecil, tetapi membutuhkan upaya pemeliharaan yang signifikan secara berkelanjutan.

Layanan MongoDB Terkelola

Layanan MongoDB yang dikelola menempatkan basis data atas nama Anda, menangani semua infrastruktur, pembaruan, penskalaan, dan patch keamanan secara otomatis. Layanan ini menghilangkan sebagian besar beban administrasi sambil menawarkan ketersediaan tinggi dan skalabilitas global.

Keuntungan MongoDB Terkelola

  1. Upaya Operasional Minimal: Penyedia layanan menangani penyediaan basis data, pencadangan, peningkatan, dan failover secara otomatis. Anda dapat men-deploy cluster baru hanya dengan beberapa klik atau panggilan API, sehingga mengurangi beban administratif secara signifikan.
  2. Skala Otomatis: Layanan terkelola dapat menyesuaikan sumber daya komputasi dan penyimpanan secara dinamis seiring pertumbuhan dataset Anda. Misalnya, MongoDB Atlas mendukung sharding otomatis dan skala vertikal tanpa waktu henti.
  3. Monitoring dan Peringatan Bawaan: Platform yang dikelola menyertakan dasbor untuk penggunaan CPU, kinerja disk, statistik koneksi, dan latensi kueri. Anda dapat mengatur ambang peringatan untuk metrik kritis tanpa membutuhkan alat pemantauan terpisah.
  4. Ketersediaan Tinggi secara Default: Sebagian besar layanan terkelola menerapkan klaster dengan tiga atau lebih node set replika di berbagai zona ketersediaan. Ini memastikan failover otomatis dan waktu aktif yang tinggi dengan konfigurasi minimal.
  5. Keamanan dan Kepatuhan: Platform MongoDB yang dikelola menawarkan enkripsi bawaan, akses berbasis peran, isolasi jaringan (VPC peering), dan integrasi dengan penyedia identitas. Platform ini juga bersertifikat untuk standar seperti SOC 2, GDPR, HIPAA, dan ISO 27001, yang mempermudah audit kepatuhan.
  6. Distribusi Global: MongoDB Atlas dan layanan serupa mendukung klaster multi-wilayah. Data dapat direplikasi secara geografis dekat dengan pengguna Anda, meningkatkan latensi untuk aplikasi yang didistribusikan.

Keterbatasan Layanan Terkelola

  1. Biaya Lebih Tinggi pada Skala Besar: Layanan terkelola membebankan biaya tambahan untuk otomatisasi dan kenyamanan. Saat volume data dan lalu lintas meningkat, biaya bulanan bisa melebihi biaya menjalankan instance yang dihosting sendiri, terutama untuk dataset besar yang disimpan di SSD.
  2. Kustomisasi Terbatas: Lingkungan yang dikelola membatasi akses ke opsi konfigurasi tingkat rendah. Anda tidak dapat memodifikasi pengaturan tingkat sistem berkas, penyesuaian cache, atau parameter OS yang mendasarinya.
  3. Ketergantungan pada Vendor: Setiap penyedia memiliki API dan konfigurasi penyebaran yang unik, sehingga sulit untuk berpindah antar layanan di kemudian hari.
  4. Ketergantungan Jaringan: Database yang dikelola bergantung pada konektivitas jaringan eksternal. Jika aplikasi Anda dijalankan di lingkungan lokal, menghubungkan secara aman ke layanan yang dikelola mungkin menimbulkan latensi atau ketergantungan pada terowongan VPN.

Secara keseluruhan, layanan MongoDB yang dikelola secara signifikan mengurangi beban administrasi dan meningkatkan keandalan, tetapi dengan biaya fleksibilitas yang lebih rendah dan pengeluaran berulang yang lebih tinggi.

Tabel Perbandingan Fitur

FiturMongoDB yang Dijalankan SendiriMongoDB Terkelola (misalnya, Atlas)
Upaya PengaturanInstalasi dan konfigurasi manualPenyediaan dengan satu klik atau otomatis
Kontrol atas KonfigurasiKontrol penuh atas pengaturan sistem dan penyimpananTerbatas; penyedia mengelola bagian internal
Optimasi KinerjaDapat disesuaikan (tingkat perangkat keras dan sistem operasi)Telah dioptimalkan sebelumnya oleh penyedia
SkalabilitasManual; tambahkan shard atau replika secara manualSkalasi vertikal dan horizontal otomatis
Ketersediaan TinggiHarus mengonfigurasi replica setDiaktifkan secara default
CadanganPanduan menggunakan mongodump atau snapshotOtomatis dengan opsi retensi
PemantauanAlat eksternal (Prometheus, PMM, Grafana)Dasbor dan pemberitahuan terintegrasi
Keamanan & KepatuhanSepenuhnya dapat disesuaikan; tanggung jawab penggunaEnkripsi terkelola, RBAC, sertifikasi
Biaya OperasionalTinggi; membutuhkan DBA yang terampilRendah; ditangani oleh penyedia
Biaya (Jangka Panjang)Lebih rendah untuk pengaturan kecilLebih tinggi, terutama dalam skala besar
Kasus Penggunaan IdealTim kecil, pengembangan, lingkungan yang diaturAplikasi skala besar, terdistribusi, atau cloud-native

Memilih Model Penerapan yang Tepat

Keputusan antara MongoDB yang di-host sendiri dan yang dikelola terutama bergantung pada prioritas, sumber daya, dan keterbatasan organisasi Anda. Pertimbangkan skenario berikut:

  • Pilih MongoDB yang Dihosting Sendiri jika:

    • Anda memerlukan kendali penuh atas infrastruktur dan data.
    • Beban kerja Anda sedang dan dapat diprediksi.
    • Anda memiliki keahlian internal dalam administrasi Linux dan MongoDB.
    • Peraturan kepatuhan atau lokasi data mengharuskan penyimpanan di lokasi.
  • Pilih MongoDB yang Dikelola jika:

    • Anda lebih memilih fokus pada pengembangan aplikasi daripada infrastruktur.
    • Anda memerlukan penskalaan otomatis dan ketersediaan tinggi dengan pengaturan minimal.
    • Tim Anda kekurangan administrator basis data yang berdedikasi.
    • Anda memerlukan klaster yang tersebar secara global atau sertifikasi kepatuhan (SOC 2, HIPAA, GDPR).

Rekomendasi praktis: Banyak organisasi mengadopsi pendekatan hibrida: mereka menggunakan MongoDB yang di-host sendiri untuk pengujian, tahap penyiapan, atau beban kerja regional, dan MongoDB yang dikelola (Atlas) untuk sistem produksi yang membutuhkan waktu aktif tinggi dan skalabilitas.

Pemecahan Masalah dan Pemeliharaan

Bahkan dengan konfigurasi dan pemantauan yang paling hati-hati, masalah dapat muncul dalam penyebaran MongoDB. Masalah ini dapat meliputi kinerja yang lambat, gagal saat memulai, keterlambatan replikasi, atau kehabisan ruang disk. Kunci untuk menjaga lingkungan MongoDB yang stabil adalah memiliki pendekatan yang terstruktur untuk mendiagnosis masalah dan menerapkan rutinitas perawatan pencegahan.

Memeriksa Status Layanan MongoDB

Langkah pertama saat memecahkan masalah MongoDB adalah memeriksa apakah layanan database berjalan dengan benar.

Anda dapat memeriksa status saat ini dengan perintah berikut:

sudo systemctl status mongod

Jika MongoDB sedang berjalan, Anda seharusnya melihat output yang mencakup:

Active: active (running)

Main PID: 3564 (mongod)

Jika layanan tidak aktif, gagal, atau mati, mulai ulang:

sudo systemctl restart mongod

Setelah me-restart, periksa statusnya lagi. Jika langsung gagal, lanjutkan dengan memeriksa file log untuk kesalahan tertentu.

Meninjau Log MongoDB

Log adalah sumber informasi diagnostik yang paling langsung. MongoDB mencatat semua kejadian utama, peringatan, dan kesalahan dalam file log utamanya yang terletak di:

/var/log/mongodb/mongod.log

Untuk melihat entri terbaru, jalankan:

sudo tail -n 30 /var/log/mongodb/mongod.log

Jika MongoDB gagal untuk memulai, Anda biasanya akan melihat salah satu dari kesalahan berikut:

  • Izin ditolak: Kepemilikan atau izin pada /var/lib/mongodb atau /var/log/mongodb salah. Periksa izin dan perbaiki:

    sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
  • Direktori data tidak ditemukan: Pastikan /var/lib/mongodb ada dan sesuai dengan jalur yang ditentukan di /etc/mongod.conf.

  • Alamat sudah digunakan: Proses lain sedang menggunakan port 27017. Identifikasi dengan:

    sudo lsof -i :27017

    dan hentikan atau konfigurasikan ulang layanan yang bertentangan.

  • File data rusak: Ini dapat terjadi jika MongoDB dimatikan secara tiba-tiba. Dalam kasus seperti itu, jurnal seharusnya memulihkan data secara otomatis saat restart. Jika gagal, Anda mungkin perlu memulihkan dari cadangan.

Tip: Untuk inspeksi log secara terus-menerus saat debugging, gunakan:

sudo tail -f /var/log/mongodb/mongod.log

Mendiagnosis Masalah Koneksi

Masalah koneksi adalah masalah lain yang sering terjadi. Ketika klien tidak dapat mengakses MongoDB, biasanya disebabkan oleh masalah jaringan, autentikasi, atau konfigurasi.

Verifikasi Bahwa MongoDB Mendengarkan pada Antarmuka yang Benar

Jalankan :

sudo ss -tulpn | grep mongod

Output seharusnya menampilkan MongoDB terikat pada 127.0.0.1 (untuk koneksi lokal) dan IP eksternal yang dikonfigurasi. Jika MongoDB tidak mendengarkan pada IP yang diharapkan, periksa bidang bindIp di /etc/mongod.conf:

net:
  bindIp: 127.0.0.1,192.168.10.50

Restart MongoDB setelah mengedit:

sudo systemctl restart mongod

Periksa Aturan Firewall

Jika koneksi jarak jauh gagal, pastikan firewall Anda mengizinkan lalu lintas di port 27017:

sudo ufw status

Jika tidak, izinkan koneksi dari IP tertentu:

sudo ufw allow from 192.168.10.50 to any port 27017

Uji Konektivitas dengan Telnet atau Ping

Dari sistem klien, uji apakah port dapat dijangkau:

telnet mongodb-server-ip 27017

atau

nc -vz mongodb-server-ip 27017

Jika koneksi berhasil, kemungkinan masalah terkait dengan otentikasi atau hak istimewa pengguna.

Pemecahan Masalah Kegagalan Autentikasi

Masalah autentikasi sering terjadi setelah mengaktifkan kontrol akses atau mengubah kredensial pengguna.

Konfirmasi Bahwa Otentikasi Diaktifkan

Hubungkan secara lokal dan verifikasi:

mongosh --eval "db.runCommand({ getParameter: 1, authenticationMechanisms: 1 })"

Jika output mencakup "SCRAM-SHA-256", autentikasi aktif.

Verifikasi Kredensial Masuk

Coba sambungkan menggunakan akun admin:

mongosh -u admin -p --authenticationDatabase admin

Jika ini gagal, sambungkan secara lokal tanpa autentikasi (hanya mungkin dari localhost ketika belum ada pengguna) dan buat ulang akun admin:

use admin

db.createUser({
  user: "admin",
  pwd: "NewStrongPassword",
  roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
})

Periksa Konteks Database

Setiap pengguna MongoDB didefinisikan dalam database tertentu. Jika Anda melakukan autentikasi terhadap database yang salah, autentikasi akan gagal. Misalnya, jika pengguna dibuat di database admin, Anda harus melakukan autentikasi terhadapnya secara eksplisit:

mongosh -u admin -p --authenticationDatabase admin

Menyelesaikan Masalah Kinerja

Penurunan kinerja dapat disebabkan oleh penggunaan memori yang tinggi, I/O disk yang lambat, kueri yang tidak dioptimalkan, atau koneksi bersamaan yang berlebihan. MongoDB menyertakan beberapa alat diagnostik untuk mengidentifikasi masalah-masalah ini.

Periksa Pemanfaatan Sumber Daya

Gunakan perintah Linux untuk memeriksa metrik tingkat sistem:

top

vmstat 2

iostat -x 2

Periksa penggunaan CPU yang tinggi oleh mongod atau latensi disk yang melebihi 10 milidetik.

Pantau Operasi Database

Jalankan :

mongostat 2

Ini menampilkan metrik waktu nyata, termasuk insert, query, update, dan delete per detik.

Jika beberapa operasi terlihat lambat, gunakan profiler MongoDB untuk mengidentifikasi kueri yang berjalan lama.

Aktifkan Profiling Query

Anda dapat mengaktifkan profiler sementara untuk mencatat kueri yang lambat:

use myappdb

db.setProfilingLevel(1, { slowms: 100 })

Ini mencatat setiap kueri yang memakan waktu lebih dari 100 milidetik.

Tinjau hasilnya:

db.system.profile.find().sort({ ts: -1 }).limit(5).pretty()

Rekomendasi: Biarkan profiling dinonaktifkan di lingkungan produksi saat tidak sedang melakukan pemecahan masalah untuk menghindari beban kinerja.

Analisis Efisiensi Indeks

Kueri yang tidak efisien sering kali disebabkan oleh indeks yang hilang. Untuk melihat apakah MongoDB menggunakan indeks dengan benar, tambahkan explain() di depan kueri Anda:

db.orders.find({ customer_id: 12345 }).explain("executionStats")

Jika executionStages.stage menunjukkan "COLLSCAN", MongoDB sedang melakukan pemindaian seluruh koleksi. Anda dapat membuat indeks untuk meningkatkan kinerja:

db.orders.createIndex({ customer_id: 1 })

Memperbaiki Basis Data yang Rusak

Kerusakan data jarang terjadi, tetapi bisa terjadi akibat kehilangan daya atau kesalahan pada disk. Jika MongoDB menolak untuk memulai dan log menunjukkan kerusakan pada file WiredTiger, ikuti langkah-langkah berikut:

  1. Hentikan MongoDB:

    sudo systemctl stop mongod
  2. Cadangkan direktori data saat ini:

    sudo cp -r /var/lib/mongodb /var/lib/mongodb-corrupt-backup
  3. Coba lakukan operasi perbaikan:

    sudo -u mongodb mongod --repair --config /etc/mongod.conf
  4. Restart MongoDB:

    sudo systemctl start mongod

Jika perbaikan gagal, pulihkan data dari cadangan terbaru Anda.

Tugas Pemeliharaan Rutin

Pemeliharaan preventif sangat mengurangi kemungkinan terjadinya kerusakan yang tak terduga.

Putar Log Secara Teratur

Pastikan kebijakan rotasi log Anda aktif. MongoDB mendukung rotasi log internal (logRotate command) dan rotasi eksternal melalui logrotate saat logAppend diaktifkan. Anda dapat memicu rotasi secara manual jika log tumbuh dengan cepat:

sudo logrotate -f /etc/logrotate.d/mongodb

Koleksi Ringkas

Koleksi dapat menjadi terfragmentasi setelah banyak penyisipan dan penghapusan. compact dapat mengembalikan ruang, tetapi merupakan operasi yang memblokir dan sebaiknya jarang digunakan di lingkungan produksi. WiredTiger secara otomatis menangani sebagian besar fragmentasi, sehingga kompak biasanya tidak diperlukan.

Perlu dicatat bahwa operasi ini mengunci database, jadi lakukan saat periode lalu lintas rendah.

Validasi Koleksi

Lakukan pemeriksaan integritas data secara berkala:

db.runCommand({ validate: "collection_name" })

Ini memverifikasi bahwa indeks dan dokumen konsisten.

Pantau Penggunaan Disk dan Memori

Gunakan peringatan otomatis untuk memberi tahu ketika penggunaan disk melebihi 85% atau pemanfaatan memori menjadi kritis. Alat pemantauan seperti Prometheus, Percona PMM, atau MongoDB Atlas Monitor dapat melacak metrik ini dari waktu ke waktu.

Menerapkan Pembaruan Sistem dengan Aman

Saat memperbarui MongoDB atau sistem Ubuntu yang mendasarinya, selalu ikuti proses yang terstruktur:

  1. Cadangkan data Anda terlebih dahulu.

  2. Hentikan layanan MongoDB sebelum melakukan pembaruan kernel atau pustaka:

    sudo systemctl stop mongod
  3. Terapkan pembaruan:

    sudo apt update && sudo apt upgrade -y
  4. Mulai ulang layanan dan pastikan berjalan dengan benar:

    sudo systemctl start mongod
    
    sudo systemctl status mongod

Catatan: Jangan pernah menghentikan MongoDB saat menulis data atau saat jurnal aktif, karena ini dapat menyebabkan kerusakan data.

Alat untuk Pemeliharaan Proaktif

Beberapa alat mempermudah pemeliharaan dan pemeriksaan kesehatan yang berkelanjutan:

  • MongoDB Compass: GUI untuk menjelajahi data dan metrik kinerja secara visual.
  • Atlas CLI: Untuk mengelola klaster, pengguna, dan cadangan di MongoDB Atlas.
  • Skrip Mongosh: Skrip kustom dapat mengotomatiskan pemeriksaan kesehatan atau menghasilkan laporan harian tentang jumlah koneksi dan penggunaan disk.
  • Ansible Playbooks: Mengotomatisasi instalasi, validasi konfigurasi, dan penjadwalan cadangan.

Pengujian Pemulihan Bencana

Langkah terakhir dalam perencanaan pemeliharaan adalah mengujicoba prosedur pemulihan. Cadangan hanya berguna jika dapat dipulihkan dengan benar.

Setidaknya sekali setiap kuartal:

  1. Pulihkan cadangan terbaru Anda ke server pengujian.
  2. Periksa apakah indeks, pengguna, dan izin dimuat dengan benar.
  3. Ukur waktu pemulihan untuk memastikan bahwa itu memenuhi sasaran waktu pemulihan Anda (RTO).
  4. Dokumentasikan prosesnya agar setiap administrator dapat melaksanakannya dalam keadaan darurat.

Daftar Periksa Pemeliharaan Jangka Panjang

TugasFrekuensiTujuan
Verifikasi cadanganHarianKonfirmasi bahwa cadangan telah lengkap dan dapat dipulihkan
Periksa replikasi dan logHarianMendeteksi keterlambatan atau masalah sinkronisasi node
Pantau penggunaan disk dan memoriHarianCegah kehabisan kapasitas
Tinjau log kueri lambatMingguanIdentifikasi hambatan kinerja
Terapkan pembaruan OS dan MongoDBBulananJaga perangkat lunak tetap aman dan terbaru
Uji prosedur pemulihanTriwulananMemvalidasi kesiapan pemulihan bencana
Tinjau akses penggunaTriwulananPertahankan keamanan dengan hak akses minimum

Dengan mengikuti praktik pemecahan masalah dan pemeliharaan ini, Anda dapat menjaga penyebaran MongoDB yang sehat di Ubuntu agar tetap berkinerja baik, aman, dan tangguh seiring waktu. Pemantauan dan pemeliharaan yang konsisten jauh lebih murah dibandingkan harus pulih dari gangguan atau kehilangan data.

Pertanyaan yang Sering Diajukan

1. Mengapa MongoDB tidak tersedia di repositori default Ubuntu?

MongoDB dihapus dari repositori default Ubuntu setelah versi 18.04 karena perubahan lisensi. Lisensi Publik Server Side MongoDB (SSPL) tidak diakui sebagai open-source oleh proyek Debian dan Ubuntu. Akibatnya, Canonical tidak lagi mendistribusikan MongoDB dalam repositori resminya, dan pengguna harus menginstalnya dari repositori APT MongoDB sendiri.

2. Bagaimana cara menghapus MongoDB secara lengkap?

Untuk menghapus MongoDB dan menghapus semua file terkait, jalankan perintah berikut:

sudo systemctl stop mongod

sudo apt purge -y mongodb-org*

sudo rm -rf /var/lib/mongodb

sudo rm -rf /var/log/mongodb

sudo rm -f /etc/apt/sources.list.d/mongodb-org-*.list

sudo apt autoremove -y

Ini menghentikan layanan MongoDB, menghapus semua paket terkait, menghapus direktori data dan log, serta membersihkan entri repositori.

3. Bagaimana cara memeriksa apakah MongoDB sedang berjalan?

Anda dapat memeriksa status layanan MongoDB menggunakan:

sudo systemctl status mongod

Jika MongoDB sedang berjalan, Anda akan melihat baris yang menyatakan “Active: active (running)”. Alternatifnya, Anda dapat memastikan konektivitas dengan menjalankan:

mongosh --eval "db.runCommand({ connectionStatus: 1 })"

Jika perintah mengembalikan "ok": 1, MongoDB aktif dan menerima koneksi.

4. Apakah MongoDB bisa dijalankan di VPS kecil?

Ya, MongoDB dapat dijalankan pada VPS kecil, tetapi dengan beberapa keterbatasan. Untuk beban kerja pengembangan atau pengujian dasar, server dengan 2 inti CPU, 2 GB RAM, dan penyimpanan SSD 10–20 GB sudah cukup.

Namun, untuk penggunaan produksi, MongoDB bekerja paling baik pada sistem dengan setidaknya 4 inti CPU, 8 GB RAM, dan penyimpanan SSD atau NVMe berkecepatan tinggi. Lingkungan dengan memori rendah mungkin perlu menyesuaikan ukuran cache WiredTiger untuk mencegah pertukaran yang berlebihan.

5. Mengapa MongoDB gagal untuk memulai setelah menjalankan operasi perbaikan?

MongoDB mungkin gagal untuk memulai setelah perbaikan jika proses perbaikan dijalankan sebagai root, yang mengubah kepemilikan file data di /var/lib/mongodb menjadi root:root. Karena layanan mongod dijalankan sebagai pengguna mongodb, layanan ini tidak akan memiliki izin untuk membaca atau menulis file-file tersebut. Untuk memperbaikinya, pastikan Anda menjalankan perintah perbaikan sebagai pengguna mongodb atau kembalikan kepemilikan yang benar setelahnya:

sudo chown -R mongodb:mongodb /var/lib/mongodb

6. Bagaimana saya bisa mengetahui apakah MongoDB mendengarkan pada antarmuka jaringan yang benar?

Anda dapat memverifikasi pendengar aktif MongoDB menggunakan:

sudo ss -tulpn | grep mongod

Ini menunjukkan alamat IP dan port yang digunakan oleh MongoDB. Jika Anda tidak melihat IP yang diharapkan (misalnya, IP server aplikasi Anda), periksa nilai bindIp di /etc/mongod.conf dan restart layanan tersebut.

7. Haruskah saya mengubah ukuran cache WiredTiger default di MongoDB?

Dalam kebanyakan kasus, tidak. WiredTiger secara otomatis menggunakan sekitar 50% RAM sistem dan menyesuaikan penggunaan cache secara dinamis berdasarkan memori yang tersedia. Hanya sesuaikan pengaturan cacheSizeGB jika MongoDB berbagi server dengan aplikasi lain yang membutuhkan banyak memori. Server MongoDB khusus biasanya sebaiknya mempertahankan perilaku default.

8. Mengapa log MongoDB saya menjadi sangat besar?

MongoDB terus-menerus menulis data operasional ke file log-nya di /var/log/mongodb/mongod.log. Tanpa rotasi log, file ini bisa menjadi sangat besar. Pastikan Anda mengonfigurasi rotasi log menggunakan logrotate, seperti yang dijelaskan di bagian pemeliharaan panduan, sehingga log lama dikompresi atau dihapus secara otomatis.

9. Kapan saya harus mempertimbangkan untuk menambahkan lebih banyak node ke set replika saya?

Anda sebaiknya memperluas set replika Anda ketika Anda melihat peningkatan lalu lintas baca yang berkelanjutan, sering terjadi pemilihan node, keterlambatan replikasi, atau ketika Anda memerlukan ketersediaan yang lebih tinggi di berbagai zona atau wilayah. Menambahkan sekunder membantu mendistribusikan beban baca dan meningkatkan toleransi kesalahan, terutama untuk lingkungan produksi.

10. Bagaimana saya bisa memastikan bahwa TLS diaktifkan dengan benar di server MongoDB saya?

Setelah mengonfigurasi TLS di /etc/mongod.conf, sambungkan menggunakan:

mongosh --tls --host <server-ip> -u admin -p --authenticationDatabase admin

Jika koneksi berhasil, jalankan:

openssl s_client -connect <server-ip>:27017

Handshake TLS yang valid dan rincian seperti Protocol: TLSv1.3 menegaskan bahwa enkripsi aktif.

Kesimpulan

Menjalankan MongoDB secara efektif tidak hanya tentang instalasi dan pengaturan; ini tentang menjaga keseimbangan antara kinerja, keamanan, dan keandalan dari waktu ke waktu. Sekarang Anda memiliki sistem MongoDB yang sepenuhnya mampu mendukung beban kerja produksi, skala sesuai permintaan, dan pulih dari kegagalan tak terduga.

Dengan menerapkan prinsip dan praktik terbaik yang dijelaskan dalam panduan ini, mulai dari pemantauan harian hingga perencanaan kapasitas jangka panjang, Anda dapat mengoperasikan MongoDB dengan percaya diri di lingkungan mana pun. Apakah Anda terus mengelolanya sendiri atau bermigrasi ke layanan terkelola seperti MongoDB Atlas, pemahaman Anda tentang cara kerja internal MongoDB memastikan Anda selalu tetap mengontrol data Anda.

Untuk mempelajari lebih lanjut tentang basis data, lihat tutorial berikut:

  • Apa Saja Jenis-Jenis Database? Dijelaskan dengan Kasus Penggunaan dan Arsitektur
  • SQLite vs MySQL vs PostgreSQL: Perbandingan Sistem Manajemen Basis Data Relasional
  • Cara Menginstal Node.js di Ubuntu
  • Cara Memulai dengan MERN Stack

Terima kasih telah belajar bersama Komunitas Linux-Console.net.