Contoh File Konfigurasi YAML untuk MongoDB?

33

The MongoDB pilihan konfigurasi dokumentasi daftar semua pilihan yang tersedia yang dapat ditentukan, tetapi tidak ada yang memiliki satu set contoh sepenuhnya terbentuk YAML diformat konfigurasi file untuk contoh MongoDB dalam berbagai peran?

Seperangkat contoh untuk peran umum akan menjadi titik awal yang sangat berguna bagi mereka yang mulai dari awal, atau ingin menguji dengan format file konfigurasi terbaru.

Adam C
sumber

Jawaban:

47

Berikut adalah beberapa contoh konfigurasi YAML untuk Linux (jalur dan opsi Windows sedikit berbeda), pada dasarnya secara eksplisit mengatur beberapa pengaturan default dan yang umum digunakan.

Pertama, standalone mongoddengan port default, path, pengaturan jurnal - ini akan menjadi jenis konfigurasi yang digunakan untuk pengujian lokal, dengan beberapa tambahan sehingga tunjukkan gaya umum:

storage:
    dbPath: "/data/db"
    directoryPerDB: true
    journal:
        enabled: true
systemLog:
    destination: file
    path: "/data/db/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
processManagement:
    fork: true
net:
    bindIp: 127.0.0.1
    port: 27017
    wireObjectCheck : false
    unixDomainSocket: 
        enabled : true

Beberapa catatan tentang konfigurasi ini:

  • Anda biasanya tidak ingin objek diperiksa ( wireObjectCheck: false) dalam produksi, tetapi untuk beban data yang besar untuk tujuan pengujian, itu akan mempercepat sedikit dan risiko minimal dalam lingkungan seperti itu
  • Ini tidak akan berfungsi untuk replikasi kecuali semua anggota set replika ada di alamat IP loopback (karena ini adalah satu-satunya yang mengikat yang ditentukan), jadi waspadalah

Sekarang, mari kita lihat file konfigurasi sampel untuk anggota set replika produksi khas dengan otentikasi diaktifkan dan berjalan sebagai bagian dari klaster yang diarsir:

storage:
    dbPath: "/data/db"
    directoryPerDB: true
    journal:
        enabled: true
systemLog:
    destination: file
    path: "/var/log/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
replication:
    oplogSizeMB: 10240
    replSetName: "rs1"
processManagement:
    fork: true
net:
    bindIp: 192.0.2.1
    port: 27018
security:
    keyFile: "/data/key/rs1.key"
    authorization: "enabled"
sharding:
    clusterRole: "shardsvr"

Beberapa catatan tentang konfigurasi ini:

  • Sekali lagi ada deklarasi eksplisit dari pengaturan default dan tersirat (port tersirat oleh clusterRole misalnya), umumnya ini direkomendasikan untuk menghindari kebingungan
  • Pengikatan IP sekarang hanya alamat IP eksternal, jadi komunikasi pada loopback IP sekarang akan gagal, tetapi replikasi dapat bekerja ke host jarak jauh
  • Oplog default ke 5% dari ruang kosong, jadi itu umum pada volume besar untuk menjadi lebih konservatif dan secara eksplisit mengatur ukuran yang dialokasikan

Selanjutnya, contoh mongoskonfigurasi:

sharding:
    configDB: "config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"
    autoSplit: true
systemLog:
    destination: file
    path: "/var/log/mongos.log"
processManagement:
    fork: true
net:
    port: 27017
    bindIp: 192.0.2.2
    maxIncomingConnections: 5000
security:
    keyFile: "/data/key/mongos.key"
    authorization: "enabled"

Satu-satunya perubahan yang diperlukan di sini adalah penghapusan yang tidak berlaku untuk mongos(karena tidak menyimpan data) dan penambahan configDBstring, yang harus identik pada semua mongosproses. Saya menambahkan pengaturan koneksi maksimum sebagai contoh, itu tidak diperlukan tetapi sering kali bisa menjadi ide yang baik untuk cluster yang lebih besar.

Mengakhiri cluster yang terbengkalai, kami memiliki sampel server konfigurasi, yang sebenarnya merupakan bagian dari anggota set replika dengan beberapa perubahan kecil:

storage:
    dbPath: "/data/db"
    journal:
        enabled: true
systemLog:
    destination: file
    path: "/var/log/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
processManagement:
    fork: true
net:
    bindIp: 192.0.2.3
    port: 27019
security:
    keyFile: "/data/key/config.key"
    authorization: "enabled"
sharding:
    clusterRole: "configsvr"

Akhirnya, MongoDB 3.0 (belum dirilis pada saat penulisan ini) akan memperkenalkan beberapa opsi baru, terutama dengan diperkenalkannya mesin penyimpanan baru. Oleh karena itu, berikut adalah contoh cara mengkonfigurasi anggota set replika yang sama, tetapi kali ini dengan mesin penyimpanan WiredTiger dan metode kompresi cepat (catatan) diubah dari aslinya karena SERVER-16266 , dan sampel tambahan engineConfig):

storage:
    dbPath: "/data/db"
    engine: "wiredTiger"
    wiredTiger:
        engineConfig: 
            cacheSizeGB: 8
        collectionConfig: 
            blockCompressor: snappy        
systemLog:
    destination: file
    path: "/var/log/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
replication:
    oplogSizeMB: 10240
    replSetName: "rs1"
processManagement:
    fork: true
net:
    bindIp: "192.0.2.1,127.0.0.1"
    port: 27018
security:
    keyFile: "/data/key/rs1.key"
    authorization: "enabled"
sharding:
    clusterRole: "shardsvr"

Sebagai tambahan bonus terakhir, saya menunjukkan cara mengikat beberapa alamat IP menggunakan daftar, dalam hal ini IP eksternal dan IP loopback.

Adam C
sumber
2
Sekali lagi terima kasih Adam untuk ini karena ini informasi yang sangat berguna. Saya sangat suka bahwa ada beberapa wawasan yang diberikan untuk konfigurasi mesin penyimpanan 2,8. Satu hal yang saya hanya ingin tambahkan adalah bahwa konfigurasi "processManagement" adalah sesuatu yang kebanyakan orang ingin hilangkan ketika berjalan di bawah "manajer proses" lain yang baru mulai Ubuntu menjadi yang umum. Jadi Anda tidak ingin "bercabang" di sana dan menyerahkannya kepada manajer untuk menangani bagian konfigurasi itu. Contoh terbaik dari YAML mengkonfigurasi di luar sana jadi +1 saya
Neil Lunn
Sangat berguna. Menarik, apakah format file konfigurasi 2,4 tetap untuk kompatibilitas mundur dengan 2.8 dan lebih lanjut?
Andrey
Tidak yakin kapan tepatnya akan dihapus, tetapi sejauh yang saya tahu, itu akan dipertahankan di 2.8. Setiap penghapusan akan dikomunikasikan dengan baik sebelumnya, tentu saja
Adam C
Untuk berjaga-jaga jika ada yang menginginkan contoh setParameter, lihat jawaban ini: dba.stackexchange.com/a/87653/6441
Adam C