Setelah pengembangan aplikasi yang berhasil dan sebelum mendedikasikan diri Anda untuk produksi MongoDB, pertimbangkan panduan cepat ini untuk memastikan aliran yang lancar dan efisien serta untuk mencapai kinerja yang optimal.
1) Opsi Penerapan
Pemilihan Perangkat Keras yang Tepat
Untuk kinerja yang optimal, lebih baik menggunakan SSD daripada HDD. Penting untuk berhati-hati apakah penyimpanan Anda lokal atau jauh dan mengambil tindakan yang sesuai. Lebih baik menggunakan RAID untuk perlindungan cacat perangkat keras dan skema pemulihan, tetapi jangan sepenuhnya mengandalkannya, karena tidak menawarkan perlindungan apa pun terhadap kegagalan yang merugikan. Untuk eksekusi pada disk, RAID-10 sangat cocok dalam hal kinerja dan ketersediaan yang sering kali kurang di level RAID lainnya. Perangkat keras yang tepat adalah blok pembangun aplikasi Anda untuk kinerja yang dioptimalkan dan untuk menghindari bencana besar apa pun.
Hosting Awan
Berbagai vendor cloud tersedia yang menawarkan host database MongoDB yang sudah diinstal sebelumnya. Pemilihan pilihan terbaik adalah langkah awal bagi aplikasi Anda untuk tumbuh dan membuat kesan pertama pada target pasar. MongoDB Atlas adalah salah satu pilihan yang memungkinkan yang menawarkan solusi lengkap untuk antarmuka cloud dengan fitur-fitur seperti penerapan node Anda dan snapshot data Anda yang disimpan di Amazon S3. ClusterControl adalah opsi lain yang tersedia untuk penerapan dan penskalaan yang mudah. Yang menawarkan berbagai fitur seperti penambahan dan penghapusan node yang mudah, instans pengubahan ukuran, dan kloning kluster produksi Anda. Anda dapat mencoba ClusterControl di sini tanpa dikenakan biaya. Opsi lain yang tersedia adalah RackSpace ObjectRocket dan MongoStitch.
2) RAM
Item yang sering diakses di-cache di RAM, sehingga MongoDB dapat memberikan waktu respons yang optimal. RAM biasanya tergantung pada jumlah data yang akan Anda simpan, jumlah koleksi, dan indeks. Pastikan Anda memiliki cukup RAM untuk mengakomodasi indeks Anda jika tidak maka akan secara drastis mempengaruhi kinerja aplikasi Anda pada produksi. Lebih banyak RAM berarti lebih sedikit kesalahan halaman dan waktu respons yang lebih baik.
3) Pengindeksan
Untuk aplikasi yang menyertakan permintaan tulis kronis, pengindeksan memainkan peran penting. Menurut dokumen MongoDB:
“Jika operasi tulis mengubah bidang yang diindeks, MongoDB memperbarui semua indeks yang memiliki bidang yang dimodifikasi sebagai kunci”
Jadi, berhati-hatilah saat memilih indeks karena dapat memengaruhi kinerja DB Anda.
Contoh Pengindeksan:Contoh entri di database restoran
{
"address": {
"building": "701",
"street": "Harley street",
"zipcode": "71000"
},
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Bombay Bakery",
"restaurant_id": "187521"
}
-
Membuat Indeks pada Satu Bidang
> db.restaurants.createIndex( { "cuisine": 1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Dalam contoh di atas, indeks urutan naik dibuat di bidang masakan.
-
Membuat Indeks di Beberapa Bidang
> db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Di sini indeks majemuk dibuat pada bidang masakan dan kode pos. Nomor -ve mendefinisikan urutan menurun.
4) Bersiaplah untuk Sharding
MongoDB mempartisi data ke mesin yang berbeda menggunakan mekanisme yang dikenal sebagai sharding. Tidak disarankan untuk menambahkan sharding di awal kecuali Anda mengharapkan kumpulan data yang besar dan kuat. Ingatlah untuk menjaga kinerja aplikasi Anda sejalan, Anda memerlukan kunci sharding yang baik, sesuai dengan pola data Anda karena secara langsung memengaruhi waktu respons Anda. Menyeimbangkan data di seluruh pecahan dilakukan secara otomatis. Namun, lebih baik bersiap dan memiliki rencana yang tepat. Jadi Anda dapat mengkonsolidasikan kapan pun permintaan aplikasi Anda.
5) Praktik Terbaik untuk Konfigurasi OS
- Sistem File XFS
- Ini adalah sistem file journal 64-bit yang sangat skalabel dan berkinerja tinggi. Mengubah kinerja I/O dengan mengizinkan operasi I/O yang lebih sedikit dan lebih besar.
- Tetapkan batas deskriptor file.
- Nonaktifkan halaman besar transparan dan Nonuniform Access Memory (NUMA).
- Ubah waktu TCP keepalive default menjadi 300 detik (untuk Linux) dan 120 detik (untuk Azure).
Coba perintah ini untuk mengubah waktu keepalive default;
Untuk Linux
sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>
Untuk Windows
Ketik perintah ini di Command Prompt sebagai Administrator, di mana
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>
6) Memastikan Ketersediaan Tinggi menggunakan Replikasi
Melanjutkan produksi tanpa replikasi dapat menyebabkan aplikasi Anda tiba-tiba gagal. Replikasi menangani masalah jika sebuah node gagal. Kelola operasi baca, tulis untuk instans MongoDB sekunder Anda sesuai dengan kebutuhan aplikasi Anda.
Ingatlah hal-hal ini saat Mereplikasi:
- Untuk ketersediaan tinggi, terapkan kumpulan replika Anda ke minimal tiga pusat data.
- Pastikan bahwa instans MongoDB memiliki 0 atau 1 suara.
- Pastikan konektivitas jaringan dua arah penuh antara semua instans MongoDB.
Contoh membuat set replika dengan 4 instance MongoDB lokal:
-
Membuat 4 instance MongoDB lokal
Pertama, buat direktori data
mkdir -p /data/m0 mkdir -p /data/m1 mkdir -p /data/m2 mkdir -p /data/m3
-
Mulai 4 instance lokal
mongod --replSet cluster1 --port 27017 --dbpath /data/m0 mongod --replSet cluster2 --port 27018 --dbpath /data/m1 mongod --replSet cluster1 --port 27019 --dbpath /data/m2 mongod --replSet cluster1 --port 27020 --dbpath /data/m3
-
Tambahkan instance ke cluster dan mulai
mongo myhost:34014 myConfig = {_id: ‘cluster1’, members: [ {_id: 0, host: ‘myhost1:27017’}, {_id: 1, host: ‘myhost2:27018’}, {_id: 2, host: ‘myhost3:27019’}, {_id: 3, host: ‘myhost4:27020’}] } rs.initiate(myConfig);
Tindakan Keamanan
7) Mesin Aman
Port terbuka pada mesin yang menghosting MongoDB rentan terhadap berbagai serangan berbahaya. Lebih dari 30 ribu database MongoDB telah disusupi dalam serangan ransomware karena kelambatan dalam konfigurasi keamanan yang tepat. Saat melakukan produksi, tutup port publik server MongoDB Anda. Namun, Anda harus tetap membuka satu port untuk tujuan SSh.
Mengaktifkan Otentikasi pada instans MongoDB:
-
Luncurkan file mongod.conf di editor favorit Anda.
-
Tambahkan baris ini di akhir file konfigurasi.
security: authorization: enabled
-
Tambahkan baris ini di akhir file konfigurasi.
service mongod restart
-
Konfirmasi status
service mongod status
Menahan akses eksternal
Buka file mongod.conf lagi untuk mengatur IP terbatas mengakses server Anda.
bind_ip=127.0.0.1
Dengan menambahkan baris ini, berarti Anda hanya dapat mengakses server Anda melalui 127.0.0. (yang merupakan localhost). Anda juga dapat menambahkan beberapa IP dalam opsi pengikatan.
bind_ip=127.0.0.1,168.21.200.200
Artinya Anda dapat mengakses dari localhost dan jaringan pribadi Anda.
8) Perlindungan Kata Sandi
Untuk menambahkan lapisan keamanan ekstra ke mesin Anda, aktifkan kontrol akses dan terapkan otentikasi. Terlepas dari kenyataan bahwa Anda telah menahan server MongoDB untuk menerima koneksi dari dunia luar, masih ada kemungkinan skrip berbahaya untuk masuk ke server Anda. Jadi, jangan ragu untuk menetapkan nama pengguna/kata sandi untuk database Anda dan memberikan izin yang diperlukan. Kontrol akses yang diaktifkan akan memungkinkan pengguna hanya melakukan tindakan yang ditentukan oleh peran mereka.
Berikut adalah langkah-langkah untuk membuat pengguna dan menetapkan akses database dengan peran tertentu.
Pertama-tama kita akan membuat pengguna (dalam hal ini adalah admin) untuk mengelola semua pengguna dan database dan kemudian kita akan membuat pemilik database tertentu yang hanya memiliki hak baca dan tulis pada satu instance database MongoDB.
Buat pengguna admin untuk mengelola pengguna lain untuk instance database
-
Buka shell Mongo Anda dan alihkan ke database admin:
use admin
-
Buat pengguna untuk database admin
db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
-
Otentikasi pengguna yang baru dibuat
db.auth("admin", "admin_password")
-
Membuat pengguna instance tertentu:
use database_1 db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
-
Sekarang verifikasi, apakah pengguna telah berhasil dibuat atau belum.
db.auth("user_1", "your_password") show collections
Itu dia! Anda telah berhasil mengamankan instans database Anda dengan autentikasi yang tepat. Anda dapat menambahkan pengguna sebanyak yang Anda inginkan dengan mengikuti prosedur yang sama.
9) Enkripsi dan Perlindungan Data
Jika Anda menggunakan Wiredtiger sebagai mesin penyimpanan maka Anda dapat menggunakan enkripsi saat konfigurasi istirahat untuk mengenkripsi data Anda. Jika tidak, maka enkripsi harus dilakukan pada host menggunakan sistem file, perangkat, atau enkripsi fisik.
10) Pantau Penerapan Anda
Setelah Anda menyelesaikan penyebaran MongoDB ke dalam produksi, maka Anda harus melacak aktivitas kinerja untuk mencegah kemungkinan masalah sedini mungkin. Ada berbagai strategi yang dapat Anda adaptasi untuk memantau kinerja data Anda di lingkungan produksi.
-
MongoDB menyertakan utilitas, yang mengembalikan statistik tentang kinerja dan aktivitas instans. Utilitas digunakan untuk menunjukkan masalah dan menganalisis operasi normal.
-
Gunakan mongostat untuk memahami pengaturan jenis operasi dan perencanaan kapasitas.
-
Untuk melacak laporan dan aktivitas baca-tulis, disarankan menggunakan mongotop.
mongotop 15
Perintah ini akan mengembalikan output setelah setiap 15 detik.
ns total read write 2018-04-22T15:32:01-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
ns total read write 2018-04-22T15:32:16-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
MongoDB Monitoring Service (MMS) adalah opsi lain yang tersedia yang memantau klaster MongoDB Anda dan memudahkan Anda untuk melihat aktivitas penyebaran produksi.
Dan tentu saja ada ClusterControl oleh Somenines, sistem otomatisasi dan manajemen untuk database open source. ClusterControl memungkinkan penyebaran cluster yang mudah dengan pengaturan keamanan otomatis dan mempermudah pemecahan masalah database Anda dengan menyediakan otomatisasi manajemen yang mudah digunakan yang mencakup perbaikan dan pemulihan node yang rusak, peningkatan otomatis, dan banyak lagi. Anda dapat memulai dengan Edisi Komunitas (gratis selamanya), yang dengannya Anda dapat menyebarkan dan memantau MongoDB serta membuat penasihat khusus untuk menyesuaikan upaya pemantauan Anda dengan aspek-aspek yang khusus untuk pengaturan Anda. Unduh gratis di sini.