MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara Memasuki Produksi Dengan MongoDB - Sepuluh Tip Teratas

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"
}
  1. 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.

  2. 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 dinyatakan dalam heksadesimal (misalnya 120000 adalah 0x1d4c0):

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:

  1. 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
  2. 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
  3. 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:

  1. Luncurkan file mongod.conf di editor favorit Anda.

  2. Tambahkan baris ini di akhir file konfigurasi.

    security:
          authorization: enabled
  3. Tambahkan baris ini di akhir file konfigurasi.

    service mongod restart
  4. 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

  1. Buka shell Mongo Anda dan alihkan ke database admin:

    use admin
  2. Buat pengguna untuk database admin

    db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
  3. Otentikasi pengguna yang baru dibuat

    db.auth("admin", "admin_password")
  4. Membuat pengguna instance tertentu:

    use database_1
    db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
  5. 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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Shell dan server MongoDB tidak cocok

  2. Hitung median dalam kerangka agregasi MongoDB

  3. Spring Data MongoDB:Proyeksi dan Agregasi

  4. Hitung elemen array yang cocok dengan kondisi

  5. data pegas - Mongodb - Metode findBy untuk objek bersarang