Bagaimana cara membatasi koneksi per host di MongoDB?


8

Saya menjalankan server mongo yang menerima koneksi dari klien lain melalui driver java. Hal yang saya perhatikan adalah setelah beberapa saat beberapa pengguna membuka terlalu banyak port, dan ini mencegah pengguna lain untuk terhubung ke mongo. Mereka hanya membuat 1 mongoClientobjek, meskipun memeriksa hasil IP mereka dalam menonton ratusan port.

Saya menemukan contoh untuk membatasi koneksi per host di driver java, tapi saya tidak ingin klien mengacaukannya. Bagaimana saya bisa membatasi klien dari instance mongod saya?

Contohnya adalah 1 mongod yang berjalan pada server jarak jauh Linux.

Jawaban:


12

Saya telah membuat daftar beberapa alternatif untuk manajemen koneksi di bawah ini, dalam urutan yang paling direkomendasikan.

Tingkatkan koneksi yang diizinkan di server

Batas total koneksi masuk pada server ditentukan oleh batas yang lebih rendah yang diberlakukan oleh sistem operasi atau maxIncomingConnections(alias maxConnsdalam MongoDB 2.4 dan sebelumnya).

Biasanya distribusi Linux membatasi deskriptor file per proses hingga 1024, di mana MongoDB akan menggunakan 80% untuk koneksi masuk (menyisakan sekitar 819 koneksi yang tersedia).

Anda dapat memeriksa koneksi saat ini dan yang tersedia di mongoshell melalui:

db.serverStatus().connections

Untuk sistem produksi, biasanya untuk menyesuaikan ulimitpengaturan di Linux untuk memungkinkan koneksi yang lebih bersamaan. Untuk praktik terbaik lainnya, saya akan merekomendasikan meninjau Catatan Produksi di manual MongoDB.

Berikan API

Jika Anda mengelola server bersama dengan batasan sumber daya, biasanya menyediakan API Anda sendiri dan bukan akses basis data langsung. Pendekatan ini memberi Anda lapisan abstraksi ekstra sehingga Anda dapat mengelola penggunaan sumber daya dan penyebaran server terlepas dari konfigurasi klien. Sebagai contoh, Anda bisa memindahkan server database Anda atau mengkonfigurasi ulang dari standalone ke set replika, dan klien tidak harus menyadari hal ini. Anda juga dapat mengelola batas sumber daya khusus (seperti koneksi per klien) melalui API Anda, berdasarkan kredensial yang digunakan klien untuk terhubung.

Kurangi ukuran kumpulan koneksi di klien

MongoDB (seperti pada 2.6) tidak memiliki opsi untuk membatasi koneksi per klien. Biasanya batas klien akan dikenakan melalui driver (yaitu mengatur ukuran kumpulan koneksi). Misalnya, dalam pengemudi Jawa yang MongoClientstandar ukuran kolam maksimum adalah 100.

Anda telah menyarankan ini bukan opsi yang diinginkan karena Anda tidak ingin klien mengacaukan batas koneksi, tetapi jika Anda akan memaksakan batas sisi server, masih masuk akal jika mereka menetapkan ukuran kumpulan secara tepat. Kalau tidak, aplikasi mereka akan sering mendapatkan pengecualian saat Anda mematikan koneksi berlebih.

Pantau operasi klien

Jika menyesuaikan batas pada klien atau server bukan merupakan pilihan, alternatif untuk dipertimbangkan adalah mengimplementasikan skrip untuk menghitung koneksi klien bersamaan (dengan IP) melalui db.currentOp()dan mematikan koneksi berlebih melalui db.killOp(). Anda harus sangat berhati-hati untuk hanya membunuh permintaan klien. The killOp()perintah adalah perintah superuser yang akan membiarkan Anda membunuh benang internal database juga (yang dapat menyebabkan hasil yang tidak terduga).

CATATAN: Pendekatan ini tidak akan berhasil jika klien Anda terhubung melalui gateway bersama (yaitu di mana IP sumber tidak secara unik mengidentifikasi klien).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.