MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara Menyebarkan Database Open edX MongoDB untuk Ketersediaan Tinggi

Open edX adalah platform yang menyediakan teknologi perangkat lunak pembelajaran berskala besar di balik edX. Proyek Open edX adalah platform berbasis web untuk membuat, menyampaikan, dan menganalisis kursus online. Ini adalah perangkat lunak yang mendukung edx.org dan banyak situs pendidikan online lainnya.

Kami telah membuat blog sebelumnya tentang menerapkan Ketersediaan Tinggi untuk database MySQL pada platform Open edX. Seperti yang dikatakan sebelumnya, ini adalah platform yang kompleks karena mencakup banyak komponen, dan bagian dari platform besar ini dicakup oleh banyak layanan:

  • eCommerce:https://github.com/edx/ecommerce
  • Katalog:https://github.com/edx/course-discovery
  • LMS / Studio:https://github.com/edx/edx-platform
  • Kredensial:https://github.com/edx/credentials
  • Wawasan:https://github.com/edx/edx-analytics-dashboard
  • API Analisis:https://github.com/edx/edx-analytics-data-api

Pada dasarnya, Open Edx sangat cocok untuk kursus online di tengah pandemi dan pelatihan online seperti yang mungkin sudah Anda coba dan ambil, terutama jika Anda memperoleh sertifikasi produk.

Ikhtisar Arsitektur Singkat

Inti dari arsitektur Open edX adalah edx-platform, yang berisi manajemen pembelajaran dan aplikasi pembuatan kursus (masing-masing LMS dan Studio). Selain platform edx-nya, layanan teknis yang terdiri dari seluruh platform terdiri dari berbagai teknologi yang terlibat yang mencakup seluruh tingkat kompleks perangkat lunak ini. Lihat diagram di bawah yang diambil dari presentasi Tim edX Desember lalu.

Anda memiliki Kepingan Salju, Amazon RDS, MongoDB, Amazon S3, Elasticsearch, Memcached , dan Redis sebagai teknologi yang mewujudkan platform yang kaya ini. Namun bahkan sulit untuk menginstal dan menyiapkan Open edX tetapi saya berhasil memasang lingkungan pengembangan yang sederhana untuk memahami sedikit tentang platform ini.

Sementara, mari kita fokus pada MongoDB yang digunakan untuk menyimpan konten untuk Forum, Struktur Kursus, dan Aset Kursus. Data per pelajar disimpan di MySQL, jadi jika Anda ingin mengetahui dan memiliki ketersediaan tinggi untuk MySQL Anda dengan Open edX, baca di sini.

Menyimpan Konten Untuk MongoDB

MongoDB adalah database pilihan oleh Open edX untuk menyimpan file besar seperti file teks, PDF, klip audio/video, tarball, dll. Jika Anda sudah familiar dengan Open edX dan telah menggunakannya terutama sebagai penulis untuk LMS atau Studio, data disimpan jika Anda mengunggah aset ke penyiapan Open edX Anda. Unggahan ini disebut "contentstore" pada dasarnya adalah instance GridFS yang didukung MongoDB. Open edX menggunakan MongoDB GridFS untuk menyimpan data file dalam potongan dalam instans MongoDB dan mampu menyimpan file yang berukuran lebih dari 16 MB. Itu juga dapat melayani sebagian file besar alih-alih seluruh file.

Aset dapat diunggah sebagai "terkunci" atau "tidak terkunci". Aset terkunci hanya tersedia untuk siswa yang mengambil kursus tertentu - platform edx memeriksa peran pengguna sebelum menyajikan file. Aset yang tidak terkunci disajikan kepada pengguna mana pun berdasarkan permintaan. Saat seorang siswa dalam kursus meminta aset, seluruh aset disajikan dari GridFS.

Menyiapkan Ketersediaan Tinggi Untuk Basis Data Open edX MongoDB Anda

Kami akui bahwa menginstal atau menyiapkan platform Open edX Anda adalah tantangan besar. Sangat sulit terutama bahwa Anda baru mengenal platform atau perangkat lunak ini tetapi memiliki desain arsitektur yang sangat bagus. Namun, ada kemungkinan bahwa pengaturan Anda dengan MongoDB Anda adalah Stand Replica Set satu-node sebagai yang utama. Di sisi lain, yang terbaik adalah bahwa Replika Set Anda harus memiliki setidaknya node sekunder atau beberapa sekunder selain dari Primer. Ini melayani penyiapan ketersediaan tinggi Anda jika Primer Anda rusak, node replika Sekunder Anda akan mengambil alih peran utama.

Mengatur Kumpulan Replika dengan Replika Sekunder

Melakukan ini, Anda hanya perlu menambahkan dan menyiapkan setidaknya dua replika sekunder. Idealnya adalah, setidaknya, dalam satu set replika, Anda memiliki 3 node yang satu adalah Primer Anda, kemudian dua node lainnya adalah sekunder Anda yang mereplikasi ke primer. Ini memungkinkan Replika MongoDB yang diatur untuk melanjutkan pemilihan jika primer kehilangan konektivitas dengan sekundernya. Ini memberi Anda keandalan, redundansi, dan tentu saja ketersediaan tinggi. Ini adalah pengaturan sederhana yang dapat Anda miliki untuk mencapai lingkungan yang tersedia tinggi dengan MongoDB.

Mengapa ini memberikan ketersediaan tinggi? Kumpulan Replika di MongoDB adalah sekelompok proses mongod yang memelihara kumpulan data yang sama. Kumpulan Replika MongoDB menggunakan pemilihan untuk menentukan anggota kumpulan mana yang akan menjadi yang utama jika primer turun atau dihentikan secara tidak normal atau beberapa perubahan konfigurasi. Kumpulan replika dapat memicu pemilihan sebagai respons terhadap berbagai peristiwa, seperti:

  • Menambahkan simpul baru ke set replika,
  • memulai set replika,
  • melakukan pemeliharaan kumpulan replika menggunakan metode seperti rs.stepDown() atau rs.reconfig(), dan
  • anggota sekunder kehilangan konektivitas ke utama selama lebih dari batas waktu yang dikonfigurasi (10 detik secara default).

Ambil contoh diagram ini yang memvisualisasikan cara kerja pemilu.

Gambar milik dokumentasi MongoDB

Selain itu, Anda dapat menggunakan replika sekunder lainnya sebagai preferensi baca Anda tetapi ini tergantung pada pengaturan berdasarkan koneksi klien Anda. Anda dapat mempelajari lebih lanjut dengan membaca opsi preferensi baca untuk koneksi atau periksa Preferensi Baca di sini.

Sekarang, ini tampak hebat tetapi berurusan dengan titik akhir klien aplikasi Anda seperti mengubah nama host atau alamat IP memerlukan perubahan manual. Ini tidak ideal jika Anda memiliki penyeimbang beban di atas Set Replika Anda seperti HaProxy karena Set Replika MongoDB melakukan pemilihan secara internal MongoDB.

Menyiapkan Cluster Terbagi

Kluster terpotong sangat ideal jika Anda berurusan dengan kumpulan data berukuran besar. Meskipun tidak berarti Anda harus mendesain sharded cluster, itu harus berurusan dengan kumpulan data yang besar. MongoDB menawarkan mongos, yang merupakan utilitas yang akan bertindak sebagai layanan perutean untuk konfigurasi shard MongoDB yang memproses kueri dari lapisan aplikasi kemudian menentukan lokasi data ini dalam klaster sharded yang diidentifikasi melalui kunci shardnya untuk menyelesaikan transaksi atau databasenya operasi. Pada dasarnya, anggap saja instance mongos berperilaku identik dengan instance MongoDB lainnya.

Jadi, mengapa ada mongos di depan aplikasi Anda? Saat Replica Anda menetapkan nama host atau IP Utama berubah setelah pemilihan, dari perspektif aplikasi, itu berarti Anda juga perlu mengubah titik akhir. Dengan mongos, cukup arahkan klien aplikasi Anda ke salah satu instance mongos kami. Klien aplikasi Anda hanya berinteraksi dengan instance mongos dan hanya itu yang penting. Mongo akan menjadi orang yang menangani permintaan kueri atau transaksi Anda menggunakan tujuan dan fungsinya untuk pengaturan MongoDB Shard Anda. Itu berarti, dalam file konfigurasi Open edx Anda, tidak ada perubahan yang harus dilakukan. Anda tidak perlu memulai ulang server aplikasi Anda untuk mengikuti perubahan dari Kumpulan Replika MongoDB Anda.

Cara Menyiapkan Ketersediaan Tinggi

Misalnya, menggunakan ClusterControl. Menggunakan ClusterControl dapat dicapai dengan sederhana dan efisien karena hal ini dapat dilakukan melalui UI untuk menghindari konfigurasi dan penginstalan manual tersebut untuk penyiapan yang sangat kompleks.

Mari kita anggap Anda sudah memiliki instance MongoDB dengan database Open edX yang sudah ada,

rs0:PRIMARY> show dbs;

admin                0.000GB

cs_comments_service  0.000GB

edxapp               0.087GB

local                0.118GB



rs0:PRIMARY> rs.status()

{

        "set" : "rs0",

        "date" : ISODate("2021-01-22T14:46:51.398Z"),

        "myState" : 1,

        "term" : NumberLong(17),

        "heartbeatIntervalMillis" : NumberLong(2000),

        "members" : [

                {

                        "_id" : 0,

                        "name" : "192.168.40.10:27017",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 133,

                        "optime" : {

                                "ts" : Timestamp(1611326680, 1),

                                "t" : NumberLong(17)

                        },

                        "optimeDate" : ISODate("2021-01-22T14:44:40Z"),

                        "electionTime" : Timestamp(1611326679, 1),

                        "electionDate" : ISODate("2021-01-22T14:44:39Z"),

                        "configVersion" : 2,

                        "self" : true

                }

        ],

        "ok" : 1

}

Anda cukup mengimpor ini sebagai database yang ada ke ClusterControl dan mengambil cadangan menggunakan fitur pencadangan ClusterControl. Atau, Anda dapat menggunakan mongodump atau mencoba menggunakan Cadangan Percona untuk MongoDB.

Sekarang, di ClusterControl, buat MongoDB Shard sebagai penerapan baru. Ini dapat dilakukan dengan langkah-langkah berikut:

  1. Terapkan Shard MongoDB baru dalam dialog wizard penerapan.

  1. Siapkan Pengaturan SSH dan Server Konfigurasi dan Routernya. Di sinilah instance mongos Anda akan berada selain dari server konfigurasi Anda.

  1. Tentukan Pecahan Anda. Ini adalah pecahan Replica Set Anda. Tergantung pada kebutuhan Anda. Misalnya, dalam penerapan ini saya menerapkan dua pecahan tetapi Anda hanya dapat menggunakan satu pecahan untuk memulai terutama untuk penerapan kecil.

  1. Tentukan setelan database Anda

Pada titik ini, tekan tombol deploy dan tunggu saja saat pekerjaan diproses oleh ClusterControl.

  1. Setelah selesai, Anda sekarang dapat memulihkan cadangan yang telah Anda ambil dari mongodump. Misalnya, saya mengambil cadangan menggunakan ClusterControl dan kemudian menggunakan ini sebagai cadangan sumber saya. Saat menggunakan perintah mongorestore, pastikan bahwa host tujuan Anda adalah salah satu instance mongos Anda. Untuk penerapan contoh ini, saya memiliki 192.168.40.233 host.

$ mongorestore --host 192.168.40.233 --port 27017 --username <username> --password <password> --gzip  --archive=BACKUP-2/rs0.gz --authenticationDatabase=admin

2021-01-22T11:17:06.335+0000    preparing collections to restore from

2021-01-22T11:17:06.336+0000    don't know what to do with subdirectory "cs_comments_service", skipping...

2021-01-22T11:17:06.336+0000    don't know what to do with subdirectory "edxapp", skipping...

2021-01-22T11:17:06.337+0000    don't know what to do with subdirectory "admin", skipping...

2021-01-22T11:17:06.337+0000    don't know what to do with subdirectory "", skipping...

2021-01-22T11:17:06.372+0000    restoring to existing collection edxapp.modulestore.definitions without dropping

2021-01-22T11:17:06.372+0000    reading metadata for edxapp.modulestore.definitions from archive 'BACKUP-2/rs0.gz'

2021-01-22T11:17:06.373+0000    restoring edxapp.modulestore.definitions from archive 'BACKUP-2/rs0.gz'

2021-01-22T11:17:06.387+0000    restoring to existing collection edxapp.fs.chunks without dropping

2021-01-22T11:17:06.387+0000    reading metadata for edxapp.fs.chunks from archive 'BACKUP-2/rs0.gz'

…

……
  1. Sekarang, Anda siap dan kemudian membuat beberapa perubahan pada file konfigurasi Open edX Anda . Dalam penyiapan penginstalan saya, Anda dapat memperbarui /edx/etc/studio.yml dan  /edx/etc/lms.yml. Anda mungkin juga harus mengubah file di file /edx/app/edxapp/lms.auth.json dan /edx/app/edxapp/cms.auth.json dan menggantinya dengan nama host yang benar dari instance mongos Anda.

  2. Verifikasi di mongos Anda dan periksa apakah database dimuat dan dapat diakses,

[email protected]:~# mongo --host "mongodb://edxapp:[email protected]:27017/?authSource=admin"

MongoDB shell version v4.2.11

connecting to: mongodb://192.168.40.233:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("00a3a395-3531-4381-972e-502478af38d1") }

MongoDB server version: 4.2.11

mongos> show dbs

admin                0.000GB

config               0.002GB

cs_comments_service  0.000GB

edxapp               0.104GB

Sekarang Anda siap!!!

Dalam tampilan web juga ClusterControl, setelah ClusterControl menyelesaikan penerapan, Anda akan memiliki topologi yang akan terlihat seperti ini,

Setelah selesai, Anda dapat mengelola Open edX dan mengelolanya kursus Anda!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Impor lebih dari 1 file json menggunakan mongoimport

  2. Perbedaan antara basis data berbasis Dokumen dan Basis Data Kunci/Nilai?

  3. Impor CSV Menggunakan Skema Mongoose

  4. Menghapus kunci/nilai dari entri MongoDB yang ada

  5. MongoDB $bagi