MongoDB Auto-Clustering
Virtuozzo Application Platform menyediakan pengelompokan otomatis untuk tumpukan MongoDB, yang memungkinkan Anda untuk membuat replica set yang andal untuk database Anda dengan sekali klik. Solusi yang diterapkan memberikan serangkaian manfaat:
- redundansi dan ketersediaan data yang tinggi - beberapa salinan data di server database yang berbeda menawarkan tingkat toleransi kesalahan yang tinggi terhadap kehilangan data
- skala dan autodiscovery – node baru yang ditambahkan selama horizontal scaling terhubung ke cluster dengan semua penyesuaian yang diperlukan diterapkan secara otomatis
- failover otomatis – node database yang tidak tersedia sementara atau memiliki latensi tinggi secara otomatis dikecualikan dari cluster dan ditambahkan kembali setelah koneksi dipulihkan
Semua manfaat ini dapat dicapai hanya dalam beberapa klik dalam wizard topologi. Jelajahi langkah-langkah di bawah ini untuk mengaktifkan auto-clustering untuk database MongoDB Anda di PaaS.
MongoDB Auto-Clustering Specifics
Sebuah replica set adalah sekelompok setidaknya tiga instance MongoDB yang mempertahankan data yang sama. Salah satu node dari set dianggap sebagai primary dan bertanggung jawab untuk semua operasi tulis. Ia mencatat semua perubahan dalam oplog sehingga node lainnya (secondaries) dapat mencerminkan data secara akurat di primary. Jika primary menjadi tidak tersedia, yang baru akan secara otomatis dipilih dari secondaries aktif setelah penundaan singkat.
Nilai default untuk pengaturan cluster yang dikonfigurasi secara otomatis disediakan di bawah ini:
- “chainingAllowed” : true - memungkinkan anggota sekunder untuk mereplikasi dari sekunder lainnya
- “heartbeatIntervalMillis” : 2000 - frekuensi dalam milidetik untuk heartbeat
- “heartbeatTimeoutSecs” : 10 - timeout dalam detik yang ditunggu oleh anggota replica set untuk heartbeat yang sukses sebelum menandai node yang sesuai sebagai tidak dapat diakses.
- “electionTimeoutMillis” : 10000 - timeout dalam milidetik untuk mendeteksi jika anggota primary tidak dapat dijangkau
- “catchUpTimeoutMillis” : -1 - timeout dalam milidetik (-1 untuk waktu tak terbatas) bagi primary yang baru terpilih untuk mengejar ketertinggalan dengan anggota yang memiliki tulisan lebih baru
- “catchUpTakeoverDelayMillis” : 30000 - timeout dalam milidetik yang diberikan oleh node sekunder, yang lebih maju dari primary saat ini, untuk mengejar sebelum memulai pemilihan menjadi primary yang baru
Jika perlu, pengaturan ini dapat dikonfigurasi ulang secara manual setelah instalasi cluster menggunakan perintah rs.reconfig()
. Periksa bagian di bawah ini untuk belajar bagaimana Anda dapat terhubung ke cluster MongoDB Anda melalui SSH dan menjalankan perintah yang diperlukan.
Poin penting lainnya adalah keamanan dan perlindungan dari akses yang tidak diinginkan. Autentikasi adalah proses jaminan keamanan yang penting yang memaksa setiap anggota replica set untuk mengidentifikasi dirinya selama komunikasi internal dengan menggunakan file kunci autentikasi unik khusus. Platform secara otomatis menerapkan konfigurasi yang diperlukan (di /etc/mongod.conf) dan menghasilkan kunci (terletak di /home/jelastic/mongodb.key) selama konfigurasi cluster. Juga, untuk memastikan konsistensi, file ini ditambahkan ke file redeploy.conf sehingga tetap ada melalui semua operasi siklus hidup kontainer.
MongoDB menggunakan mesin penyimpanan WiredTiger secara default. Ini memastikan kinerja tinggi (berkat algoritma non-locking) dan pemanfaatan biaya/sumber daya yang efektif. Opsi default untuk WiredTiger dioptimalkan untuk menjalankan satu instance mongod per server, yang juga cocok untuk kontainer platform. MongoDB memanfaatkan baik cache internal WiredTiger maupun cache sistem file. Ukuran cache internal adalah 50% dari total RAM dikurangi 1 GB (tetapi tidak kurang dari 256 MB), sementara cache sistem file mengoperasikan memori bebas yang tidak digunakan oleh WiredTiger atau proses lainnya. Untuk informasi lebih lanjut tentang konfigurasi WiredTiger, lihat dokumentasi resmi MongoDB.
Satu fitur unik lainnya dari auto-cluster MongoDB adalah deteksi otomatis node baru yang ditambahkan melalui horizontal scaling dan penyertaan mereka ke dalam replica set tanpa tindakan manual. Demikian pula, node dikecualikan dari cluster saat melakukan scaling in.
Creating MongoDB Cluster
Seluruh proses pembuatan auto-cluster MongoDB dapat dilakukan dalam beberapa klik sederhana.
1. Buka wizard topologi dengan tombol New Environment di pojok kiri atas dashboard, pilih database MongoDB, dan aktifkan Auto-Clustering melalui switcher yang sesuai.
Beberapa spesifikasi topologi cluster MongoDB tercantum di bawah ini: 4 GiB RAM (32 cloudlets) direkomendasikan untuk pekerjaan yang tepat dari node replica set. Secara default, jumlah cloudlets ini ditambahkan sebagai batas skala dinamis, sehingga Anda tidak akan dikenakan biaya kecuali sumber daya benar-benar digunakan. Jumlah minimum node yang diperlukan untuk auto-cluster MongoDB adalah 3.
Konfigurasikan parameter lainnya sesuai kebutuhan Anda (public IPs, region, dll.) dan klik Create.
2. Tunggu beberapa menit hingga platform mengonfigurasi cluster untuk Anda.
3. Setelah instalasi, Anda akan menerima email dengan kredensial replica set:
Anda dapat menggunakan kredensial ini untuk mengakses panel admin atau untuk membangun koneksi dari aplikasi Anda ke node primary dari replica set.
Seperti yang disebutkan, setiap node sekunder dapat menjadi primary jika terjadi kegagalan. Selain itu, pemilihan akan terjadi jika cluster di-restart, dan mungkin node primary yang baru akan muncul. Jadi, string koneksi aplikasi menjadi tidak valid. Untuk menghindari masalah ini, string koneksi harus berisi nama replica set, semua hostname anggota, dan preferensi baca (jika perlu untuk memindahkan node primary untuk menangani baca atau memastikan ketersediaan tinggi cluster dan failover). Berikut adalah contoh string koneksi untuk aplikasi node.js:
client = new MongoClient("mongodb://admin:cbfef7418d@node540102-mongo-cluster.madrid.jele.io:27017,node540096-mongo-cluster.madrid.jele.io:27017,node540099-mongo-cluster.madrid.jele.io:27017/admin", { useUnifiedTopology: true, readPreference: 'primaryPreferred', replicaSet: 'rs0' });
Di mana:
useUnifiedTopology: true
- memaksa MongoDB untuk menggunakan mesin Server Discover and Monitoring yang baru.readPreference: 'primaryPreferred'
- operasi baca dari primary tetapi jika tidak tersedia, operasi membaca dari anggota sekunder.replicaSet: 'rs0'
- secara default, nama replica set adalah rs0 di platform. Anda dapat mengamati nama replica set di setiap node cluster di file mongod.conf atau di prompt shell mongo.
Koneksi aplikasi yang diuraikan di atas dianggap telah dibuat dalam satu platform hosting. Namun, jika diperlukan, Anda dapat membuat koneksi aplikasi eksternal ke replica set melalui SLB. Dalam hal ini, Anda hanya perlu mempertahankan koneksi ke node primary untuk read/writes melalui endpoints.
Jika Anda perlu membaca dari sekunder, Anda harus menyesuaikan kode aplikasi Anda untuk melakukan pembacaan dari sekunder dalam thread terpisah seperti yang Anda lakukan untuk primary. Bagaimanapun, untuk kasus seperti itu, Anda harus menghapus parameter replicaSet dari string koneksi sehingga terlihat sebagai berikut:
client = new MongoClient("mongodb://admin:bfef7418d@node540102-mongo-cluster.madrid.jele.io:11013/admin", { useUnifiedTopology: true });
4. Secara default, auto-cluster memanfaatkan panel administrasi Mongo Express yang menyediakan dukungan untuk replica set.
5. Anda juga dapat terhubung ke database Anda melalui mongo shell langsung di terminal Anda (misalnya, menggunakan opsi Web SSH yang terintegrasi).
mongosh -u {user} -p {password} {DB_name}
Jika bekerja dengan versi database yang lebih lama, gunakan perintah mongo (untuk MongoDB 3.x, 4.x) alih-alih mongosh (untuk MongoDB 6.x, 7.x) dengan parameter yang sama.
Di mana:
{user}
– nama pengguna administrator (dikirim ke email Anda, admin secara default){password}
– kata sandi untuk pengguna DB yang sesuai (dapat ditemukan dalam email yang sama){DB_name}
– nama database yang ingin Anda akses (kami akan menggunakan yang default admin)
6. Anda dapat memeriksa status replica set dengan perintah yang sesuai:
rs.status()
Seperti yang Anda lihat, replica set (dengan nama rs0 default) sedang berjalan. Perintah replica set lainnya dapat ditemukan di dokumentasi resmi. Misalnya, gunakan operasi rs.conf() jika Anda ingin melihat konfigurasi replica set.