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

Mengoptimalkan Lingkungan Linux Anda untuk MongoDB

Kinerja MongoDB bergantung pada bagaimana ia menggunakan sumber daya yang mendasarinya. Ini menyimpan data pada disk, serta dalam memori. Ini menggunakan sumber daya CPU untuk melakukan operasi, dan jaringan untuk berkomunikasi dengan kliennya. Harus ada sumber daya yang memadai untuk mendukung keaktifan umumnya. Dalam artikel ini kita akan membahas berbagai kebutuhan sumber daya untuk sistem database MongoDB dan bagaimana kita dapat mengoptimalkannya untuk kinerja maksimum.

Persyaratan untuk MongoDB

Selain menyediakan sumber daya berskala besar seperti RAM dan CPU ke database, menyetel Sistem Operasi juga dapat meningkatkan kinerja sampai batas tertentu. Utilitas signifikan yang diperlukan untuk membangun lingkungan MongoDB meliputi:

  1. Ruang disk cukup
  2. Memori cukup
  3. Koneksi jaringan yang sangat baik.

Sistem operasi yang paling umum untuk MongoDB adalah Linux, jadi kita akan melihat cara mengoptimalkannya untuk database.

Kondisi Boot Ulang.

Ada banyak teknik tuning yang bisa diterapkan di Linux. Namun, karena beberapa perubahan terjadi tanpa me-reboot host Anda, itu selalu merupakan praktik yang baik untuk mem-boot ulang setelah membuat perubahan untuk memastikannya diterapkan. Pada bagian ini, implementasi tuning yang akan kita bahas adalah:

  1. Tumpukan Jaringan
  2. Daemon NTP
  3. Batas Pengguna Linux
  4. Sistem file dan Opsi
  5. Keamanan
  6. Memori Virtual

Tumpukan Jaringan

Seperti perangkat lunak lainnya, koneksi jaringan yang sangat baik menyediakan antarmuka pertukaran yang lebih baik untuk permintaan dan tanggapan dengan server. Namun, MongoDB tidak disukai dengan penyetelan jaringan kernel default Linux. Seperti namanya, ini adalah susunan dari banyak lapisan yang dapat dikategorikan menjadi 3 yang utama:Area Pengguna, Area Kernel, dan Area Perangkat. Area pengguna dan area kernel disebut sebagai host karena tugasnya dilakukan oleh CPU. Area perangkat bertanggung jawab untuk mengirim dan menerima paket melalui antarmuka yang disebut Kartu Antarmuka Jaringan. Untuk kinerja yang lebih baik dengan lingkungan MongoDB, host harus dibatasi pada batas antarmuka jaringan 1Gbps. Dalam hal ini, yang harus kita sesuaikan adalah pengaturan throughput relatif yang meliputi:

  1. net.core.somaxconn (menaikkan nilainya)
  2. net.ipv4.tcp_max_syn_backlog (menaikkan nilainya)
  3. net.ipv4.tcp_fin_timeout (kurangi nilainya)
  4. net.ipv4.tcp_keepalive_intvl (kurangi nilainya)
  5. net.ipv4.tcp_keepalive_time (kurangi nilainya)

Untuk membuat perubahan ini permanen, buat file baru /etc/sysctl.d/mongodb-sysctl.conf jika tidak ada dan tambahkan baris berikut ke dalamnya.

net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096

Kemudian jalankan perintah sebagai pengguna root /sbin/sysctl -p untuk menerapkan perubahan secara permanen.

Daemon NTP

Network Time Protocol (NTP) adalah teknik di mana jam perangkat lunak sistem Linux disinkronkan dengan server waktu internet. MongoDB, sebagai sebuah cluster, bergantung pada konsistensi waktu di seluruh node. Untuk alasan ini, penting bagi NTP untuk dijalankan secara permanen di host MongoDB. Pentingnya konfigurasi NTP adalah untuk memastikan server terus melayani hingga beberapa waktu yang ditentukan setelah pemutusan jaringan. Secara default, NTP diinstal di sisi klien sehingga untuk MongoDB menginstal NTP pada sistem Linux dengan rasa Debian/Ubuntu, jalankan saja perintah:

$ sudo apt-get install ntp

Anda dapat mengunjungi ntp.conf untuk melihat konfigurasi daemon NTP untuk OS yang berbeda.

Batas Pengguna Linux

Terkadang kesalahan sisi pengguna dapat berdampak pada seluruh server dan sistem host. Untuk menghindari ini, sistem Linux dirancang untuk melakukan beberapa batasan sumber daya sistem terkait proses yang dijalankan pada basis per pengguna. Ini terbukti, tidak tepat untuk menyebarkan MongoDB pada konfigurasi sistem default seperti itu karena akan membutuhkan lebih banyak sumber daya daripada ketentuan default. Selain itu, MongoDB sering menjadi proses utama untuk memanfaatkan perangkat keras yang mendasarinya, oleh karena itu, akan lebih baik untuk mengoptimalkan sistem Linux untuk penggunaan khusus tersebut. Basis data kemudian dapat sepenuhnya mengeksploitasi sumber daya yang tersedia.

Namun, tidak nyaman untuk menonaktifkan batasan batasan ini atau mengaturnya ke status tidak terbatas. Misalnya, jika Anda mengalami kekurangan penyimpanan CPU atau RAM, kesalahan kecil dapat meningkat menjadi masalah besar dan mengakibatkan fitur lain gagal - misalnya, SSH yang sangat penting dalam memecahkan masalah awal.

Untuk mencapai estimasi yang lebih baik, Anda harus memahami persyaratan kendala di tingkat basis data. Misalnya, memperkirakan jumlah pengguna yang akan membuat permintaan ke database dan waktu pemrosesan. Anda dapat merujuk ke Key things to Monitor for MongoDB. Batas yang paling disukai untuk proses pengguna maksimal dan file terbuka adalah 64000. Untuk menyetel nilai ini, buat file baru jika tidak ada sebagai /etc/security/limits.d dan tambahkan baris ini

mongod       soft        nofile       64000
mongod       hard        nofile       64000
mongod       soft        nproc        64000
mongod       hard        nproc        64000

Agar Anda dapat menerapkan perubahan ini, mulai ulang mongod Anda karena perubahan hanya berlaku untuk shell baru.

Sistem dan Opsi File

MongoDB menggunakan 3 jenis sistem file yaitu, ext3, ext4, dan XFS untuk data database pada disk. Untuk mesin penyimpanan WiredTiger yang digunakan untuk MongoDB versi lebih besar dari 3, XFS paling baik digunakan daripada ext4 yang dianggap menciptakan beberapa masalah stabilitas sementara ext3 juga dihindari karena kinerja pra-alokasi yang buruk. MongoDB tidak menggunakan teknik sistem file default untuk melakukan pembaruan metadata waktu akses seperti sistem lain. Oleh karena itu, Anda dapat menonaktifkan pembaruan waktu akses untuk menghemat sejumlah kecil aktivitas IO disk yang digunakan oleh pembaruan ini.

Ini dapat dilakukan dengan menambahkan flag noatime ke bidang opsi sistem file di file etc/fstab untuk disk yang menyajikan data MongoDB.

$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0

Perubahan ini hanya dapat dilakukan ketika Anda mem-boot ulang atau memulai ulang MongoDB Anda.

Keamanan

Di antara beberapa fitur keamanan yang dimiliki sistem Linux, pada tingkat kernel adalah Linux yang Ditingkatkan Keamanan. Ini adalah implementasi dari Kontrol Akses Wajib yang halus. Ini memberikan jembatan ke kebijakan keamanan untuk menentukan apakah suatu operasi harus dilanjutkan. Sayangnya, banyak pengguna Linux mengatur modul kontrol akses ini hanya untuk memperingatkan atau mereka menonaktifkannya sama sekali. Hal ini sering disebabkan oleh beberapa kemunduran terkait seperti izin tak terduga ditolak kesalahan. Modul ini, sebanyak banyak orang mengabaikannya, memainkan peran utama dalam mengurangi serangan lokal ke server. Dengan mengaktifkan fitur ini dan mode koresponden disetel ke positif, ini akan memberikan latar belakang yang aman untuk MongoDB Anda. Oleh karena itu, Anda harus mengaktifkan mode SELinux dan juga menerapkan mode Enforcing terutama pada awal instalasi Anda. Untuk mengubah mode SELinux ke Enforcing:jalankan perintah

$ sudo setenforce Enforcing

Anda dapat memeriksa mode SELinux yang sedang berjalan dengan menjalankan

$ sudo getenforce
Beberapa Sembilan Menjadi DBA MongoDB - Membawa MongoDB ke ProduksiPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan MongoDBUnduh secara Gratis

Memori Virtual

Rasio kotor

MongoDB menggunakan teknologi cache untuk meningkatkan pengambilan data dengan cepat. Dalam hal ini, halaman kotor dibuat dan beberapa memori akan diperlukan untuk menyimpannya. Rasio kotor karenanya menjadi persentase dari total memori sistem yang dapat menampung halaman kotor. Dalam kebanyakan kasus, nilai default adalah antara (25 - 35)%. Jika nilai ini terlampaui, maka halaman akan dikomit ke disk dan memiliki efek membuat jeda yang sulit. Untuk menghindari hal ini, Anda dapat mengatur kernel untuk selalu menyiram data melalui rasio lain yang disebut sebagai dirty_background_ratio yang nilainya berkisar antara (10% - 15%) hingga disk di latar belakang tanpa harus membuat hard pause.

Tujuannya di sini adalah untuk memastikan kinerja kueri yang berkualitas. Oleh karena itu Anda dapat mengurangi rasio latar belakang jika sistem database Anda akan membutuhkan memori yang besar. Jika jeda keras diizinkan, Anda mungkin akan memiliki duplikat data atau beberapa data mungkin gagal direkam selama waktu itu. Anda juga dapat mengurangi ukuran cache untuk menghindari data sering ditulis ke disk dalam batch kecil yang dapat meningkatkan throughput disk. Untuk memeriksa nilai yang sedang berjalan, Anda dapat menjalankan perintah ini:

$ sysctl -a | egrep “vm.dirty.*_ratio”

dan Anda akan disajikan dengan sesuatu seperti ini.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Swappiness

Ini adalah nilai yang berkisar dari 1 hingga 100 di mana perilaku manajer Memori Virtual dapat dipengaruhi. Menyetelnya ke 100 menyiratkan untuk menukar paksa ke disk dan menyetelnya ke 0 mengarahkan kernel untuk bertukar hanya untuk menghindari masalah kehabisan memori. Rentang default untuk Linux adalah 50 - 60 di antaranya tidak sesuai untuk sistem database. Dalam pengujian saya sendiri, pengaturan nilai antara 0 hingga 10 adalah optimal. Anda selalu dapat mengatur nilai ini di /etc/sysctl.conf

vm.swappiness = 5

Anda kemudian dapat memeriksa nilai ini dengan menjalankan perintah

$ sysctl vm.swappiness

Agar Anda dapat menerapkan perubahan ini, jalankan perintah /sbin/sysctl -p atau Anda dapat mem-boot ulang sistem Anda.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. menyimpan gambar ke mongodb

  2. mongodb $dalam batas

  3. MongooseError - Operasi buffering `users.findOne()` habis setelah 10000ms

  4. MongoDB:Hitung waktu diam antara setiap perubahan nilai status

  5. 3 Cara Mengembalikan Nilai Berbeda di MongoDB