全部产品
Search
文档中心

ApsaraDB for MongoDB:Koneksi dan Jaringan

更新时间:Jan 07, 2026

Topik ini membantu Anda mengatasi masalah koneksi umum pada instans ApsaraDB for MongoDB. Kami menyarankan untuk memeriksa bagian Error umum terlebih dahulu guna mendapatkan solusi cepat. Jika error Anda tidak tercantum, ikuti langkah-langkah Troubleshooting berikut untuk diagnosis sistematis.

Langkah-langkah troubleshooting

Langkah 1: Periksa konektivitas jaringan

Metode Pemecahan Masalah

Gunakan perintah berikut untuk menguji konektivitas jaringan.

  • ping <domain name>, misalnya, ping dds-xxxx.mongodb.rds.aliyuncs.com

    image

    Gambar tersebut menunjukkan koneksi jaringan yang berhasil antara client dan instans MongoDB.

  • telnet <domain name> <port number>, misalnya, telnet dds-xxxx.mongodb.rds.aliyuncs.com 3717

    测试端口Gambar tersebut menunjukkan bahwa nama domain telah di-resolve dan komunikasi melalui port 3717 dimungkinkan.

Daftar periksa

Jika pengujian jaringan gagal, gunakan daftar periksa berikut untuk mengidentifikasi dan menyelesaikan masalah.

Periksa status instans: Pastikan instans berada dalam status Running.

Periksa pengaturan whitelist: Pastikan alamat IP client telah ditambahkan ke whitelist.

  • Cara memeriksa:

    Sementara tambahkan 0.0.0.0/0 ke whitelist database. Jika koneksi berhasil, masalahnya adalah konfigurasi alamat IP yang salah.

    Penting

    Penggunaan 0.0.0.0/0 menciptakan risiko keamanan serius karena mengekspos instans Anda ke seluruh Internet. Gunakan hanya untuk tujuan diagnosis dan segera ganti dengan alamat IP client yang benar setelah pengujian.

  • Solusi:

    Tambahkan alamat IP klien yang benar ke daftar putih instans. Untuk mengetahui alamat IP publik klien Anda, lihat FAQ.

Periksa lingkungan jaringan dan titik akhir instans: Pastikan Anda menggunakan titik akhir yang sesuai dengan jenis jaringan Anda.

ApsaraDB for MongoDB mendukung koneksi jaringan pribadi dan publik. Lingkungan jaringan yang berbeda memerlukan titik akhir yang berbeda.

Anda dapat menemukan titik akhir tersebut di Konsol ApsaraDB for MongoDB pada halaman Database Connection.

Langkah 2: Otorisasi dan verifikasi identitas

Periksa kredensial akun: Pastikan password benar dan karakter khusus telah di-escape dengan benar.

  • Konfirmasikan bahwa nama akun dan kata sandi yang diberikan sudah benar.

  • Ubah password. Untuk informasi lebih lanjut tentang cara mengubah password, lihat Reset password.

    Jika Anda mengubah password setelah terhubung ke instans ApsaraDB for MongoDB menggunakan DMS, buka Konsol DMS, klik kanan instans target, lalu pilih Edit untuk login kembali.

  • Karakter khusus. Saat menghubungkan ke instans ApsaraDB for MongoDB menggunakan Mongo Shell atau kode program, Anda harus meng-escape karakter khusus jika password dalam string koneksi mengandungnya. Karakter tersebut termasuk !@#$%^&*()_+=. Untuk informasi lebih lanjut, lihat Bagaimana cara mengatasi kegagalan koneksi akibat karakter khusus pada akun atau password dalam string koneksi?.

Periksa database otentikasi: Pastikan akun diautentikasi terhadap database yang benar.

Periksa titik akhir instans: Untuk operasi write pada instans set replika, pastikan Anda menggunakan titik akhir URI ConnectionString.

  • Gejala: Instans tiba-tiba tidak dapat diakses tanpa perubahan pada titik akhir.

  • Penyebab: Hanya node primary yang dapat melakukan operasi write. Jika aplikasi Anda sebelumnya terhubung melalui alamat node primary, setelah failover set replika, node yang terhubung sebenarnya mungkin menjadi node secondary, sehingga operasi write gagal.

  • Solusi:

    • Disarankan agar aplikasi di lingkungan produksi terhubung ke database menggunakan alamat URI ConnectionString. Jika terjadi kegagalan node, operasi baca dan tulis aplikasi tidak akan terpengaruh oleh failover primary-secondary. Untuk detail alamat koneksi, lihat:

    • Alihkan peran node secara manual. Alihkan node yang sesuai dengan titik akhir single-node yang digunakan layanan Anda menjadi node primary.

    Rancang mekanisme rekoneksi dan penanganan exception untuk aplikasi Anda. Ini memastikan aplikasi dapat terhubung ulang secara otomatis setelah disconnection sementara dan tetap stabil.

Langkah 3: Periksa masalah lainnya

Periksa apakah performa instans memenuhi kebutuhan bisnis Anda.

Periksa pengaturan tool pihak ketiga.

Jika tool pihak ketiga, seperti Navicat atau Compass, tidak dapat terhubung ke instans ApsaraDB for MongoDB, koneksi mungkin gagal karena pengaturan instans atau tool yang salah. Troubleshoot masalah sebagai berikut:

  1. Gunakan Mongo Shell untuk menguji koneksi.

    Kami menyarankan Anda menggunakan tool Mongo Shell untuk terhubung ke instans menggunakan titik akhir URI ConnectionString berdaya tinggi untuk pengujian.

  2. Troubleshoot masalah berdasarkan hasil pengujian.

    • Koneksi berhasil: Instans dapat diakses. Masalah kemungkinan disebabkan oleh pengaturan tool pihak ketiga yang salah. Periksa pengaturan tool pihak ketiga tersebut.

    • Koneksi gagal: Pengaturan instans mungkin salah. Rujuk topik ini untuk troubleshooting (jaringan, otorisasi, verifikasi identitas).

Kesalahan Umum

Pesan Kesalahan

Penyebab dan Solusi

network error while attempting to run command 'isMaster' on host 'dds-xxxx.mongodb.rds.aliyuncs.com:3717' :exception: connect failed

  • Timed out after 3000ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. exception=(com.mongodb.MongoSocketReadException: Prematurely reached end of stream)

  • Socket recv() errno:54 Connection reset by peer x.x.x.x:27017

Instans mungkin telah mencapai batas maksimum koneksi dan tidak dapat membuat koneksi baru.

Solusi:

  1. Periksa apakah batas koneksi instans telah tercapai. Untuk informasi lebih lanjut, lihat Bagaimana cara menanyakan jumlah koneksi?.

  2. Optimalkan penggunaan koneksi. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika jumlah koneksi ke instans saya mencapai batas atas?.

MongoDB.Driver.MongoWaitQueueFullException: The wait queue for acquiring a connection to server xxx is full.

Antrian tunggu driver MongoDB penuh. Hal ini dapat terjadi jika ukuran kolam koneksi terlalu kecil atau terdapat permintaan konkurensi tinggi, sehingga tidak tersedia koneksi.

Solusi:

  1. Pertama, periksa konfigurasi kolam koneksi di aplikasi Anda, seperti menetapkan ukuran kolam yang sesuai. Untuk informasi lebih lanjut, lihat Bagaimana cara membatasi jumlah koneksi client?.

  2. Jika masalah tetap berlanjut setelah Anda menyesuaikan konfigurasi program, periksa apakah instans MongoDB telah mencapai batas koneksi. Untuk informasi lebih lanjut, lihat:

    1. Bagaimana cara menanyakan jumlah koneksi?

    2. Apa yang harus saya lakukan jika jumlah koneksi ke instance saya mencapai batas atas?

(TooManyLogicalSessions) Unable to add session into the cache because the number of active sessions is too high.

Koneksi konkuren berlebihan dapat menghabiskan sesi yang tersedia.

Solusi:

  1. Troubleshoot kegagalan koneksi akibat koneksi habis.

    1. Bagaimana cara menanyakan jumlah koneksi?

    2. Apa yang harus saya lakukan jika jumlah koneksi ke instance saya mencapai batas atas?

  2. Jika jumlah koneksi normal, periksa apakah metrik performa lain dari instans mencukupi untuk kebutuhan bisnis Anda.

    1. Gunakan fitur pemantauan node untuk memeriksa penggunaan resource umum, seperti penggunaan CPU dan memori. Hal ini membantu Anda menentukan apakah tipe instans memenuhi kebutuhan bisnis Anda.

    2. Jika Tipe instans terlalu kecil untuk beban kerja yang tinggi, ubah konfigurasi instans selama jam non-puncak.

  • getaddrinfo failed.

  • No suitable servers found (`serverSelectionTryOnce` set).

Periksa apakah titik akhir instans benar. Untuk informasi lebih lanjut tentang titik akhir, lihat:

  • Failed to connect to 10.*.*.8:3717 after 5000 milliseconds, giving up.Error: couldn't connect to server 10.*.*.8:3717 (10.*.*.8), connection attempt failed

  • pymongo.errors.ServerSelectionTimeoutError: dds-xxxx.mongodb.rds.aliyuncs.com:3717: [Errno 113] No route to host,dds-xxxx.mongodb.rds.aliyuncs.com:3717

  • InvalidInstanceId.NotFound: The instance not in current vpc.

Error ini terjadi ketika instans ECS gagal terhubung ke instans ApsaraDB for MongoDB melalui jaringan pribadi.

Solusi:

  1. Periksa pengaturan whitelist. Pastikan alamat IP pribadi instans ECS telah ditambahkan ke whitelist instans ApsaraDB for MongoDB.

  2. Pastikan instans ECS dan instans MongoDB dapat berkomunikasi satu sama lain.

    Jika instans ECS dan instans MongoDB berada dalam VPC yang sama, keduanya dapat terhubung langsung melalui jaringan pribadi. Untuk menghubungkan instans lintas-VPC, lakukan salah satu tindakan berikut.

org.springframework.data.mongodb.UncategorizedMongoDbException: Timeout while receiving message; nested exception is com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message

  • "errmsg": "not master", "code": 10107, "codeName": "NotMaster"

  • "errmsg": "not master", "code": 10107, "codeName": "NotWritablePrimary"

  • Time out after 30000ms while waiting for a server that matches writableServerSelector.

  • Command failed with error 10107 (NotWritablePrimary): 'not primary' on server xxx.

  • Explain's child command cannot run on this node. Are you explaining a write command on a secondary?

  • not master and slaveOk=false.

  • MongoNotPrimaryException: Command failed with error 10107 (NotMaster): 'not master' on server xxx.

  • reason: TopologyDescription { type: 'ReplicaSetNoPrimary',...}

Error ini terjadi ketika operasi write dilakukan pada node yang bukan node primary.

Penyebab: Operasi write hanya dapat dilakukan pada node primary. Jika layanan Anda sebelumnya terhubung menggunakan titik akhir node primary, node yang terhubung menjadi node secondary setelah switchover primary-secondary. Akibatnya, operasi write gagal.

Solusi:

  • Di lingkungan produksi, hubungkan aplikasi Anda ke database menggunakan titik akhir URI ConnectionString. Jika terjadi kegagalan node, switchover primary-secondary tidak akan memengaruhi operasi baca dan tulis aplikasi Anda. Untuk informasi lebih lanjut tentang titik akhir, lihat:

  • Alihkan peran node secara manual. Alihkan node yang sesuai dengan titik akhir single-node yang digunakan layanan Anda menjadi node primary.

Rancang mekanisme rekoneksi dan penanganan exception untuk aplikasi Anda. Ini memastikan aplikasi dapat terhubung ulang secara otomatis setelah disconnection sementara dan tetap stabil.

[Unauthorized] cloud instance error, disk locked, plz check and upgrade your disk quota,

Instans terkunci karena ruang disk habis.

Solusi: Atasi penguncian instans atau kegagalan write akibat disk space habis.

(AuthenticationFailed) Authentication failed.

  • !xxx@dds-xxx.mongodb.rds.aliyuncs.com: event not found

Password akun database mengandung karakter khusus seperti !@#$%^&*()_+=.

Solusi: Bagaimana cara mengatasi kegagalan koneksi akibat karakter khusus pada akun atau password dalam string koneksi?.

error getting cluster ID: (CommandNotFound) replSetGetConfig is forbidden by cloud provider for security reason

ApsaraDB for MongoDB tidak mendukung perintah replSetGetConfig. Untuk informasi lebih lanjut, lihat Perintah yang didukung dan tidak didukung di ApsaraDB for MongoDB.

Tanya Jawab Umum

Bagaimana cara menanyakan jumlah koneksi?

Jumlah maksimum koneksi bervariasi berdasarkan Tipe instans instans ApsaraDB for MongoDB Anda.

Catatan

Jumlah maksimum koneksi berlaku untuk setiap node dalam instans. Misalnya, jika Anda membeli instans set replika tiga node dengan 1 core dan 2 GB memori, jumlah maksimum koneksi untuk node primary dan secondary masing-masing adalah 500. Node hidden tidak menyediakan layanan.

Konsol

  1. Buka halaman Instans Set Replika MongoDB atau halaman Instans Kluster Sharded MongoDB. Di bilah navigasi atas, pilih wilayah. Lalu, klik ID instans target.

  2. Di panel navigasi sebelah kiri, klik Monitoring Data.

  3. Di halaman Monitoring Data, lihat informasi Connections untuk instans tersebut.

    Jika instans tersebut merupakan instans kluster sharded, Anda harus memilih node Mongos yang sedang digunakan layanan Anda di pojok kiri atas halaman.

Perintah

  1. Hubungkan ke Instans menggunakan Mongo Shell.

  2. Lihat jumlah koneksi.

    Jalankan perintah db.serverStatus().connections.

    mgset-123456:PRIMARY> db.serverStatus().connections
    {
            "current" : 1,
            "available" : 999,
            "internal_current" : 10,
            "internal_available" : 990,
            "totalCreated" : 632
    }             

    Deskripsi parameter:

    • current: Jumlah koneksi yang telah dibuat.

    • available: Jumlah koneksi yang tersedia.

  3. Tanyakan sumber koneksi saat ini.

    1. Beralih ke database admin.

      use admin
    2. Jalankan perintah db.runCommand({currentOp: 1, $all: true}).

      mgset-123456:PRIMARY> db.runCommand({currentOp: 1, $all:[{"active" : true}]})                    

    Dengan menganalisis output perintah, Anda dapat menanyakan alamat IP sumber setiap koneksi untuk menentukan jumlah koneksi dari setiap client. Untuk informasi lebih lanjut, lihat dokumentasi resmi.

Bagaimana cara membatasi jumlah koneksi client?

Saat Anda terhubung ke database menggunakan URI Connection String, Anda dapat mengatur jumlah koneksi dalam kolam koneksi dengan menambahkan &maxPoolSize=<integer> di akhir URI. Contoh berikut menunjukkan cara menggunakan Mongo Shell untuk terhubung ke database. Dalam contoh ini, jumlah koneksi diatur ke 10, akun database adalah test, dan database otentikasi adalah admin:

mongo "mongodb://test:****@dds-bp19f409d7512****-pub.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****-pub.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&maxPoolSize=10"
Catatan

Untuk informasi tentang cara membatasi jumlah koneksi dalam kolam koneksi untuk client dalam bahasa pemrograman berbeda, lihat dokumentasi API MongoDB.

Apa yang harus saya lakukan jika jumlah koneksi ke instance saya mencapai batas atas?

Anda dapat memulai ulang instans, komponen, atau node untuk sementara melepaskan semua koneksi.

Penting

Saat Anda merestart instans, nodenya direstart secara berurutan. Setiap node mengalami disconnection sementara sekitar 30 detik. Jika instans berisi banyak koleksi (lebih dari 10.000), disconnection dapat berlangsung lebih lama. Sebelum merestart instans, lakukan pengaturan bisnis yang tepat dan pastikan aplikasi Anda memiliki mekanisme rekoneksi.

Untuk mencegah masalah ini terulang, kami menyarankan Anda melakukan penyesuaian berikut setelah merestart instans:

Bagaimana cara mengatasi kegagalan koneksi akibat karakter khusus pada akun atau password dalam string koneksi?

Saat Anda terhubung ke instans ApsaraDB for MongoDB menggunakan Mongo Shell atau kode program, koneksi gagal jika password dalam string koneksi mengandung karakter khusus yang tidak dapat dikenali. Karakter khusus tersebut termasuk !@#$%^&*()_+=.

Solusi: Anda harus meloloskan karakter khusus dalam string koneksi berdasarkan aturan berikut:

! : %21
@ : %40
# : %23
$ : %24
% : %25
^ : %5e
& : %26
* : %2a
( : %28
) : %29
_ : %5f
+ : %2b
= : %3d

Contoh: Jika password adalah ab@#c, escape karakter khusus dalam string koneksi. Password menjadi ab%40%23c.

Bagaimana cara menentukan database otentikasi dalam koneksi?

Database otentikasi menyimpan akun dan password database. Akun database harus diautentikasi terhadap database tempat akun tersebut berada.

Asumsikan akun dan password keduanya adalah test, dan akun test berada di database testdb.

Titik akhir ketersediaan tinggi

Saat Anda menggunakan titik akhir URI ConnectionString atau ReadOnly ConnectionString untuk terhubung ke database, Anda harus mengatur parameter authSource untuk menentukan database tempat akun database berada. Jika Anda tidak mengonfigurasi parameter ini, database yang ditentukan oleh <database> digunakan sebagai database otentikasi.

Contoh:

  • Setelah akun test diautentikasi terhadap database testdb, instans beralih ke database <database>.

mongo "mongodb://test:test@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>&authSource=testdb"
  • Setelah akun test diautentikasi terhadap database testdb, instans beralih ke database testdb.

mongo "mongodb://test:test@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/testdb?replicaSet=<replicaSet_value>"

Titik akhir node tunggal

Anda dapat menjalankan salah satu perintah berikut untuk login:

mongo --host $myhost --port $myport -u test -p test --authenticationDatabase testdb

Atau

    mongo --host $myhost --port $myport
    mongo> use testdb
    mongo> db.auth("test", "test")

Untuk informasi lebih lanjut tentang parameter dalam titik akhir, lihat Hubungkan ke instance set replika dan Hubungkan ke instance kluster sharding.

Bagaimana cara menggunakan DMS untuk login ke database MongoDB?

Bahasa client apa saja yang didukung ApsaraDB for MongoDB?

ApsaraDB for MongoDB sepenuhnya kompatibel dengan MongoDB. Artinya, semua client yang didukung MongoDB juga didukung oleh ApsaraDB for MongoDB.

Bahasa yang didukung meliputi C, C++, C#, Java, Node.js, Python, PHP, dan Perl. Untuk informasi lebih lanjut, lihat dokumentasi resmi.

Untuk contoh kode, lihat:

Catatan

Untuk memastikan otentikasi yang tepat saat terhubung ke instans ApsaraDB for MongoDB, gunakan driver MongoDB versi 3.0 atau lebih baru.

Apakah ApsaraDB for MongoDB mendukung akses jaringan publik?

Ya, mendukung. Untuk informasi lebih lanjut, lihat Hubungkan ke instans MongoDB dari client lokal melalui Internet.

Apakah ApsaraDB for MongoDB mendukung akses tanpa kata sandi?

ApsaraDB for MongoDB tidak lagi mendukung akses tanpa password melalui VPC.

Jika Anda telah mengaktifkan akses tanpa password untuk suatu instans, Anda dapat menonaktifkan fitur ini. Setelah menonaktifkan fitur tersebut, Anda tidak dapat mengaktifkannya kembali. Untuk informasi tentang cara menonaktifkan akses tanpa password, lihat Nonaktifkan akses tanpa password melalui jaringan pribadi.

Instal dan gunakan Mongo Shell di Windows

  • Instal Mongo Shell. Buka halaman unduhan MongoDB Shell, lalu ikuti petunjuk di layar untuk mengunduh dan menginstalnya.

  • Gunakan Mongo Shell.

    • Buka Command Prompt.

    • Hubungkan ke instans MongoDB.

      Contoh:

      mongosh "mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****"    

      Untuk informasi selengkapnya tentang parameter string koneksi, lihat Hubungkan ke instans set replika dan Hubungkan ke instans kluster sharded.

Skenario koneksi umum