Sistem database bekerja lebih baik ketika ada beban kerja terdistribusi di antara sejumlah instance yang berjalan atau lebih tepatnya data dikategorikan dengan cara yang mudah. MongoDB menggunakan sharding sehingga data dalam database yang diberikan dikelompokkan sesuai dengan beberapa kunci. Sharding meningkatkan penskalaan horizontal yang akibatnya menghasilkan kinerja yang lebih baik dan peningkatan keandalan. Secara umum, MongoDB menawarkan penskalaan horizontal dan vertikal sebagai lawan dari SQL DBMS misalnya MySQL yang hanya mempromosikan penskalaan vertikal.
MongoDB memiliki model konsistensi yang lebih longgar di mana dokumen dalam koleksi mungkin memiliki kunci tambahan yang tidak ada di dokumen lain dalam koleksi yang sama.
Berbagi
Sharding pada dasarnya mempartisi data menjadi potongan-potongan terpisah dan kemudian mendefinisikan berbagai potongan ke server pecahan yang berbeda. Kunci shard yang sering kali merupakan bidang yang ada di semua dokumen dalam database yang akan dipecah digunakan untuk mengelompokkan data. Sharding bekerja bergandengan tangan dengan replikasi untuk mempercepat throughput baca dengan memastikan beban kerja terdistribusi di antara sejumlah server daripada bergantung pada satu server. Selain itu, replikasi memastikan salinan data tertulis tersedia.
Katakanlah kita memiliki 120 dokumen dalam koleksi, data ini dapat di-sharding sehingga kita memiliki 3 set replika dan masing-masing memiliki 40 dokumen seperti yang digambarkan dalam konfigurasi konfigurasi di bawah ini. Jika dua klien mengirim permintaan, satu untuk mengambil dokumen yang ada di indeks 35 dan yang lain yang indeksnya di 92, permintaan tersebut diterima oleh router kueri (proses mongos) yang pada gilirannya menghubungi node konfigurasi yang menyimpan catatan bagaimana rentang potongan didistribusikan di antara pecahan. Ketika identitas dokumen yang ditentukan ditemukan, itu kemudian diambil dari pecahan terkait. Misalnya di atas, dokumen klien pertama akan diambil dari Shard A dan untuk klien B, dokumen akan diambil dari Shard C. Secara umum akan ada beban kerja terdistribusi yang didefinisikan sebagai penskalaan horizontal.
Untuk pecahan yang diberikan, jika ukuran koleksi dalam pecahan melebihi ukuran chunk_, koleksi akan dibagi dan diseimbangkan di seluruh pecahan secara otomatis menggunakan kunci pecahan yang ditentukan. Dalam pengaturan penerapan, untuk contoh di bawah ini kita akan membutuhkan 3 set replika masing-masing dengan primer dan beberapa sekunder. Node utama juga bertindak sebagai server sharding.
Konfigurasi minimum yang disarankan untuk penyebaran produksi MongoDB adalah setidaknya tiga server shard masing-masing dengan satu set replika. Untuk kinerja terbaik, server mongos disebarkan di server terpisah sementara node konfigurasi terintegrasi dengan shard.
Menyebarkan Shard MongoDB dengan Ansible
Mengonfigurasi shard dan kumpulan replika kluster secara terpisah adalah pekerjaan yang rumit, oleh karena itu kami menyelesaikannya menjadi alat sederhana seperti Ansible untuk mencapai hasil yang diperlukan dengan banyak kemudahan. Playbook digunakan untuk menulis konfigurasi dan tugas yang diperlukan yang akan dijalankan oleh perangkat lunak Ansible.
Proses buku pedoman yang sistematis harus:
- Instal paket basis mongo (tanpa server, pymongo, dan antarmuka baris perintah)
- Instal server mongodb. Ikuti panduan ini untuk memulai.
- Siapkan instance mongod dan ada set replika koresponden.
- Mengonfigurasi dan menyiapkan server konfigurasi
- Mengonfigurasi dan menyiapkan layanan perutean Mongos.
- Tambahkan pecahan ke kluster Anda.
Playbook tingkat atas akan terlihat seperti ini
- name: install mongo base packages include: mongod.yml
tags: - mongod
- name: configure config server
include: configServer.yml
when: inventory_hostname in groups['mongoc-servers']
tags:
- cs
- name: configure mongos server
include: configMongos.yml
when: inventory_hostname in groups['mongos-server'] tags:
- mongos
- name: add shards
include: addShards.yml
when: inventory_hostname in groups['mongos-servers']
tags:
- mongos
- shards
Kita dapat menyimpan file di atas sebagai mongodbCluster.yml.
Beberapa Sembilan Menjadi DBA MongoDB - Membawa MongoDB ke ProduksiPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan MongoDBUnduh secara GratisFile mongodb.yml sederhana akan terlihat seperti:
---
- hosts: ansible-test
remote_user: root
become: yes
tasks:
- name: Import the public key used by the package management system
apt_key: keyserver=hkp://keyserver.ubuntu.com:80 id=7F0CEB10 state=present
- name: Add MongoDB repository
apt_repository: repo='deb <a class="vglnk" href="https://downloads-distro.mongodb.org/repo/ubuntu-upstart" rel="nofollow"><span>http</span><span>://</span><span>downloads</span><span>-</span><span>distro</span><span>.</span><span>mongodb</span><span>.</span><span>org</span><span>/</span><span>repo</span><span>/</span><span>ubuntu</span><span>-</span><span>upstart</span></a> dist 10gen' state=present
- name: install mongodb
apt: pkg=mongodb-org state=latest update_cache=yes
notify:
- start mongodb
handlers:
- name: start mongodb
service: name=mongod state=started
Untuk parameter umum yang diperlukan dalam penerapan set replika, kami memerlukan dua parameter ini lagi untuk menambahkan pecahan.
- pecahan: secara default adalah null, Ini adalah string koneksi shard yang harus dalam format
/Host:port. Misalnya replica0/siteurl1.com:27017 - status: secara default nilai ada yang menentukan bahwa pecahan harus ada, jika tidak, seseorang dapat mengaturnya agar tidak ada.
Setelah menerapkan set replika seperti yang dijelaskan di blog ini, Anda dapat melanjutkan untuk menambahkan pecahan.
# add a replicaset shard named replica0 with a member running on port 27017 on mongodb0.example.net
- mongodb_shard:
login_user: admin
login_password: root
shard: "replica0/mongodb1.example.net:27017"
state: present
# add a standalone mongod shard running on port 27018 of mongodb2.example.net
- mongodb_shard:
login_user: admin
login_password: root
shard: "mongodb2.example.net:27018"
state: present
# Single node shard running on localhost
- name: Ensure shard replica0 exists
mongodb_shard:
login_user: admin
login_password: root
shard: "replica0/localhost:3001"
state: present
# Single node shard running on localhost
- name: Ensure shard replica0 exists
mongodb_shard:
login_user: admin
login_password: root
shard: "replica0/localhost:3002"
state: present
Setelah mengatur semua konfigurasi ini, kami menjalankan playbook dengan perintah
ansible-playbook -i hosts mongodbCluster.yml
Setelah buku pedoman selesai, kita dapat masuk ke salah satu server mongos dan mengeluarkan perintah sh.status(). Jika hasilnya seperti di bawah ini, pecahan telah dikerahkan. Selain itu anda bisa melihat key mongodb_shard jika sudah dinilai berhasil.
mongos> sh.status()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shardA", "host" : "locahhost1/web2:2017,locahhost3:2017" }
{ "_id" : "shardB", "host" : "locahhost3/web2:2018,locahhost3:2019" }
{ "_id" : "shardC", "host" : "locahhost3/web2:2019,locahhost3:2019" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
Untuk menghapus pecahan bernama replica0
- mongodb_shard:
login_user: admin
login_password: root
shard: replica0
state: absent
Kesimpulan
Ansible telah memainkan peran utama dalam membuat proses penyebaran menjadi mudah karena kita hanya perlu mendefinisikan tugas-tugas yang perlu dijalankan. Bayangkan misalnya jika Anda memiliki 40 anggota kumpulan replika dan Anda perlu menambahkan pecahan ke masing-masing. Menggunakan cara normal akan memakan waktu lama dan rentan terhadap banyak kesalahan manusia. Dengan ansible, Anda cukup mendefinisikan tugas-tugas ini dalam file sederhana bernama playbook dan ansible akan menangani tugas-tugas tersebut saat file dijalankan.