全部产品
Search
文档中心

ApsaraDB for MongoDB:Mengelola balancer

更新时间:Mar 01, 2026

Balancer mendistribusikan data secara merata di seluruh node shard dalam instans kluster sharded ApsaraDB for MongoDB. Topik ini menjelaskan cara memeriksa status balancer, menjadwalkan jendela waktu aktif, serta mengaktifkan atau menonaktifkan balancer.

Catatan

Semua contoh dalam topik ini menggunakan mongo shell. Perintah dan output dapat berbeda jika menggunakan alat klien lain.

Cara kerja

Balancer memantau distribusi data di seluruh node shard dan secara otomatis melakukan migrasi data untuk menjaga keseimbangan. Perilakunya bergantung pada versi mesin database.

MongoDB 5.0 dan sebelumnya

Balancer melacak jumlah chunk pada setiap node shard. Ketika selisih antar node shard mencapai ambang batas migrasi, balancer akan memigrasikan chunk (moveChunk) untuk menyeimbangkan kembali kluster.

Versi mesin databaseAmbang batas migrasi
MongoDB 4.2, 4.4, 5.01
MongoDB 3.4 (tidak didukung lagi), MongoDB 4.0Default: 2. Diturunkan menjadi 1 jika total chunk < 20 atau chunk yang sebelumnya dimigrasikan < 20
MongoDB 3.2 (tidak didukung lagi)Total chunk < 20: ambang batas adalah 2. Total chunk 20–80: ambang batas adalah 4. Total chunk >= 80: ambang batas adalah 8

MongoDB 6.0

Balancer memantau ukuran data per koleksi pada setiap node shard, bukan menghitung jumlah chunk. Jika selisih ukuran data antara dua node shard dalam koleksi yang sama melebihi 384 MB (tiga kali ukuran chunk default), balancer akan membagi data berdasarkan tag shard dan memigrasikannya menggunakan moveRange.

Untuk memeriksa apakah data sudah seimbang, jalankan getShardDistribution() dan fokus pada ukuran data, bukan jumlah chunk.

Catatan penggunaan

  • Balancer hanya didukung untuk instans kluster sharded.

  • Secara default, balancer diaktifkan dengan jendela waktu aktif 24 jam (selalu berjalan).

  • Migrasi chunk mengonsumsi sumber daya instans dan dapat menurunkan performa database. Jadwalkan jendela waktu aktif selama jam sepi.

Periksa status balancer

Sebelum menonaktifkan balancer, periksa apakah balancer sedang menjalankan tugas migrasi.

  1. Sambungkan ke instans kluster sharded menggunakan mongo shell.

  2. Jalankan perintah berikut:

       sh.isBalancerRunning()
  3. Interpretasikan hasil berdasarkan jenis nilai kembali: Nilai kembali Map Beberapa versi mongo shell mengembalikan objek Map. Periksa bidang inBalancerRound: Untuk informasi lebih lanjut, lihat sh.isBalancerRunning().

    Nilai kembali Boolean

    NilaiMakna
    falseBalancer tidak aktif. Anda dapat menonaktifkan balancer.
    trueBalancer sedang memigrasikan chunk. Jangan nonaktifkan—melakukannya dapat menyebabkan inkonsistensi data.
    inBalancerRoundMakna
    falseBalancer tidak aktif. Anda dapat menonaktifkan balancer.
    trueBalancer sedang memigrasikan chunk. Jangan nonaktifkan—melakukannya dapat menyebabkan inkonsistensi data.
       {
         mode: 'full',
         inBalancerRound: false,
         numBalancerRounds: Long("1143"),
         ok: 1,
         '$clusterTime': {
           clusterTime: Timestamp({ t: 1639753724, i: 3 }),
           signature: {
             hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
             keyId: Long("0")
           }
         },
         operationTime: Timestamp({ t: 1639753724, i: 3 })
       }

Tetapkan jendela waktu aktif

Jadwalkan balancer agar hanya berjalan pada jam tertentu guna menghindari dampak terhadap performa selama jam operasional.

  1. Sambungkan ke instans kluster sharded menggunakan mongo shell.

  2. Beralih ke database config:

       use config
  3. Tetapkan jendela waktu aktif: Ganti placeholder dengan nilai aktual: Contoh: Jadwalkan balancer berjalan dari pukul 01.00 hingga 03.00 setiap hari:

    Catatan

    Waktu menggunakan zona waktu lokal wilayah tempat instans dideploy.

    PlaceholderDeskripsiFormat
    <start-time>Waktu mulai jendela aktifHH:MM (HH: 00–23, MM: 00–59)
    <stop-time>Waktu akhir jendela aktifHH:MM (HH: 00–23, MM: 00–59)
       db.settings.update(
          { _id: "balancer" },
          { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
          { upsert: true }
       )
       db.settings.update(
          { _id: "balancer" },
          { $set: { activeWindow : { start : "01:00", stop : "03:00" } } },
          { upsert: true }
       )
  4. Verifikasi konfigurasi dengan menjalankan sh.status(). Output mencakup jendela waktu aktif:

Hapus jendela waktu aktif

Untuk mengembalikan penyeimbangan berkelanjutan selama 24 jam, hapus jendela waktu aktif:

db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

Aktifkan balancer

Setelah Anda mengaktifkan balancer, balancer akan segera mulai menyeimbangkan data jika sharding telah dikonfigurasi. Hal ini mengonsumsi sumber daya instans. Lakukan operasi ini selama jam sepi.

  1. Sambungkan ke instans kluster sharded menggunakan mongo shell.

  2. Beralih ke database config:

       use config
  3. Aktifkan balancer:

       sh.setBalancerState(true)

Nonaktifkan balancer

Catatan

Setelah balancer dinonaktifkan, balancer tidak lagi menyeimbangkan data di seluruh node shard. Hal ini dapat menyebabkan kesenjangan data.

  1. Sambungkan ke instans kluster sharded menggunakan mongo shell.

  2. Beralih ke database config:

       use config
  3. Periksa apakah balancer sedang aktif memigrasikan data: Untuk detail cara menginterpretasikan nilai kembali, lihat Periksa status balancer.

    • Jika hasilnya false (atau inBalancerRound: false untuk nilai kembali Map), lanjutkan ke langkah berikutnya.

    • Jika hasilnya true (atau inBalancerRound: true), tunggu hingga migrasi saat ini selesai sebelum melanjutkan. Menonaktifkan balancer selama migrasi dapat menyebabkan inkonsistensi data.

       sh.isBalancerRunning()
  4. Setelah memastikan balancer tidak aktif, nonaktifkan balancer:

       sh.stopBalancer()

Referensi