MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách triển khai Cơ sở dữ liệu MongoDB Open edX để có tính khả dụng cao

Open edX là một nền tảng cung cấp công nghệ phần mềm học tập có khả năng mở rộng đại trà đằng sau edX. Dự án Open edX là một nền tảng dựa trên web để tạo, cung cấp và phân tích các khóa học trực tuyến. Đây là phần mềm hỗ trợ edx.org và nhiều trang web giáo dục trực tuyến khác.

Chúng tôi đã viết blog trước đây về việc triển khai Cơ sở dữ liệu MySQL Khả dụng Cao trên nền tảng Open edX. Như đã nói trước đây, nó là một nền tảng phức tạp vì nó bao gồm nhiều thành phần và một phần của nền tảng khổng lồ này, nó được bao phủ bởi nhiều dịch vụ:

  • Thương mại điện tử:https://github.com/edx/ecommerce
  • Danh mục:https://github.com/edx/course-discovery
  • LMS / Studio:https://github.com/edx/edx-platform
  • Thông tin xác thực:https://github.com/edx/credentials
  • Thông tin chi tiết:https://github.com/edx/edx-analytics-dashboard
  • API Analytics:https://github.com/edx/edx-analytics-data-api

Về cơ bản, Open Edx hoàn hảo cho các khóa học trực tuyến giữa đại dịch và đào tạo trực tuyến như những gì bạn có thể đã thử và thực hiện, đặc biệt nếu bạn đang đạt được chứng nhận sản phẩm.

Tổng quan tóm tắt về kiến ​​trúc

Trọng tâm của kiến ​​trúc Open edX là edx-platform, chứa các ứng dụng quản lý học tập và soạn thảo khóa học (tương ứng là LMS và Studio). Bên cạnh nền tảng edx của nó, các dịch vụ kỹ thuật bao gồm toàn bộ nền tảng bao gồm các công nghệ khác nhau có liên quan bao hàm toàn bộ mức độ phức tạp của phần mềm này. Xem sơ đồ dưới đây được lấy từ bài thuyết trình của Nhóm edX vào tháng 12 năm ngoái.

Bạn có Snowflake, Amazon RDS, MongoDB, Amazon S3, Elasticsearch, Memcached và Redis là công nghệ thể hiện nền tảng phong phú này. Tuy nhiên, cài đặt và thiết lập Open edX thậm chí còn khó nhưng tôi đã cố gắng thiết lập một môi trường phát triển đơn giản để hiểu một chút về nền tảng này.

Trong khi đó, hãy tập trung vào MongoDB được sử dụng để lưu trữ nội dung cho Diễn đàn, Cấu trúc khóa học và Nội dung khóa học. Dữ liệu mỗi người học được lưu trữ trong MySQL, vì vậy nếu bạn muốn biết và có tính khả dụng cao cho MySQL của mình với Open edX, hãy đọc tại đây.

Lưu trữ Nội dung cho MongoDB

MongoDB là cơ sở dữ liệu được Open edX lựa chọn để lưu trữ các tệp lớn là tệp văn bản, PDF, clip âm thanh / video, tarball, v.v. Nếu bạn đã quen với Open edX và đặc biệt sử dụng nó như một tác giả cho LMS hoặc Studio, dữ liệu được lưu trữ nếu bạn tải nội dung lên thiết lập Open edX của mình. Các tệp tải lên này được gọi là "kho nội dung" về cơ bản là một phiên bản GridFS được hỗ trợ bởi MongoDB. Open edX sử dụng MongoDB GridFS để lưu trữ dữ liệu tệp theo từng phần trong phiên bản MongoDB và có thể lưu trữ tệp có kích thước lớn hơn 16 MB. Nó cũng có thể phân phát các phần của tệp lớn thay vì toàn bộ tệp.

Nội dung có thể được tải lên ở dạng "đã khóa" hoặc "đã mở khóa". Nội dung bị khóa chỉ có sẵn cho sinh viên tham gia một khóa học cụ thể - nền tảng edx kiểm tra vai trò của người dùng trước khi phân phát tệp. Nội dung đã mở khóa được cung cấp cho bất kỳ người dùng nào theo yêu cầu. Khi một sinh viên trong khóa học yêu cầu một nội dung, toàn bộ nội dung sẽ được cung cấp từ GridFS.

Thiết lập Tính sẵn sàng cao cho Cơ sở dữ liệu Open edX MongoDB của bạn

Hãy thừa nhận rằng việc cài đặt hoặc thiết lập nền tảng Open edX của bạn là một thách thức lớn. Đặc biệt khó khăn khi bạn chưa quen với nền tảng hoặc phần mềm này nhưng nó có thiết kế kiến ​​trúc rất tuyệt vời. Tuy nhiên, có thể thiết lập của bạn với MongoDB của bạn là một Bộ bản sao một nút làm cơ sở chính. Mặt khác, tốt nhất là Bộ bản sao của bạn phải có ít nhất một nút phụ hoặc nhiều nút phụ ngoài Bộ chính. Điều này phục vụ thiết lập tính khả dụng cao của bạn trong trường hợp Chính của bạn gặp sự cố, nút bản sao Phụ của bạn sẽ đảm nhận vai trò chính.

Thiết lập Bộ Bản sao với Bản sao Phụ

Làm điều này, bạn chỉ cần thêm và thiết lập ít nhất hai bản sao phụ. Lý tưởng là, ít nhất, trong một tập hợp bản sao, bạn có 3 nút, trong đó một nút là Chính của bạn, sau đó hai nút còn lại là các nút thứ hai của bạn sao chép thành nút chính. Điều này cho phép tập hợp MongoDB Replica tiến hành một cuộc bầu cử trong trường hợp sơ cấp mất kết nối với các tổ chức thứ hai. Điều này mang lại cho bạn độ tin cậy, khả năng dự phòng và tất nhiên là tính sẵn sàng cao. Đó là một thiết lập đơn giản mà bạn có thể có để đạt được môi trường khả dụng cao với MongoDB.

Tại sao điều này cung cấp tính khả dụng cao? Tập bản sao trong MongoDB là một nhóm các quy trình mongod duy trì cùng một tập dữ liệu. Bộ bản sao MongoDB sử dụng các cuộc bầu cử để xác định thành viên tập hợp nào sẽ trở thành thành viên chính trong trường hợp cơ quan chính đi xuống hoặc kết thúc bất thường hoặc một số thay đổi cấu hình. Tập hợp bản sao có thể kích hoạt một cuộc bầu cử để đáp ứng nhiều sự kiện khác nhau, chẳng hạn như:

  • Thêm một nút mới vào tập hợp bản sao,
  • bắt đầu tập hợp bản sao,
  • thực hiện bảo trì tập hợp bản sao bằng các phương pháp như rs.stepDown () hoặc rs.reconfig () và
  • các thành viên phụ mất kết nối với thành viên chính trong hơn thời gian chờ đã định cấu hình (10 giây theo mặc định).

Lấy sơ đồ ví dụ này để hình dung cách thức hoạt động của cuộc bầu cử.

Hình ảnh từ tài liệu MongoDB

Ngoài ra, bạn có thể sử dụng các bản sao phụ khác như tùy chọn đọc của bạn nhưng điều này phụ thuộc vào thiết lập dựa trên kết nối của khách hàng của bạn. Bạn có thể tìm hiểu thêm bằng cách đọc các tùy chọn ưu tiên đọc cho kết nối hoặc kiểm tra Tùy chọn đọc tại đây.

Bây giờ, điều này có vẻ tuyệt vời nhưng xử lý với điểm cuối ứng dụng khách của bạn, chẳng hạn như thay đổi tên máy chủ hoặc địa chỉ IP yêu cầu thay đổi thủ công. Sẽ không lý tưởng nếu bạn có một bộ cân bằng tải ở trên Bộ bản sao giống như HaProxy vì Bộ bản sao MongoDB thực hiện việc bầu chọn trong nội bộ MongoDB.

Thiết lập một Cụm được chia nhỏ

Cụm phân mảnh là lý tưởng nếu bạn đang xử lý tập hợp dữ liệu có kích thước lớn. Mặc dù không có nghĩa là bạn phải thiết kế một cụm phân đoạn, nhưng nó phải xử lý các tập dữ liệu lớn. MongoDB cung cấp mongos, là một tiện ích sẽ hoạt động như một dịch vụ định tuyến cho các cấu hình phân đoạn MongoDB xử lý các truy vấn từ lớp ứng dụng, sau đó xác định vị trí của dữ liệu này trong cụm phân đoạn được xác định thông qua khóa phân đoạn của nó để hoàn thành các giao dịch hoặc cơ sở dữ liệu của nó các hoạt động. Về cơ bản, chỉ cần nghĩ rằng các bản sao mongos hoạt động giống hệt với bất kỳ bản sao MongoDB nào khác.

Vậy tại sao lại có mongos phía trước ứng dụng của bạn? Trong trường hợp Bản sao của bạn đặt tên máy chủ chính hoặc IP thay đổi sau cuộc bầu cử, từ góc độ ứng dụng, điều đó có nghĩa là bạn cũng cần thay đổi điểm cuối. Với mongos, chỉ cần trỏ ứng dụng khách của bạn đến một trong các phiên bản mongos của chúng tôi. Ứng dụng khách của bạn chỉ giao diện với phiên bản mongos và đó là tất cả những gì quan trọng. Mongos sẽ là cái để xử lý các yêu cầu truy vấn hoặc giao dịch của bạn bằng cách sử dụng mục đích và chức năng của nó cho thiết lập MongoDB Shard của bạn. Điều đó có nghĩa là, trong tệp cấu hình Open edx của bạn, không có thay đổi nào được thực hiện. Bạn không cần phải khởi động lại máy chủ ứng dụng của mình để bắt kịp những thay đổi từ Bộ bản sao MongoDB của bạn.

Cách thiết lập Tính khả dụng cao

Ví dụ:sử dụng ClusterControl. Việc sử dụng ClusterControl có thể đạt được một cách đơn giản và hiệu quả vì điều này có thể được thực hiện qua giao diện người dùng, tránh những cấu hình và cài đặt thủ công đối với một thiết lập rất phức tạp.

Hãy xem bạn có một phiên bản MongoDB hiện có với cơ sở dữ liệu Open edX hiện có,

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

}

Bạn chỉ cần nhập dữ liệu này làm cơ sở dữ liệu hiện có vào ClusterControl và sao lưu bằng tính năng sao lưu của ClusterControl. Ngoài ra, bạn có thể sử dụng mongodump hoặc thử sử dụng Percona Backup cho MongoDB.

Bây giờ, trong ClusterControl, hãy tạo MongoDB Shard dưới dạng triển khai mới. Điều này có thể được thực hiện theo các bước sau:

  1. Triển khai MongoDB Shard mới trong hộp thoại trình hướng dẫn triển khai.

  1. Thiết lập Cài đặt SSH cũng như Máy chủ và Bộ định tuyến cấu hình của nó. Đây là nơi các phiên bản mongos của bạn sẽ không nằm ngoài các máy chủ cấu hình của bạn.

  1. Xác định các Shard của bạn. Đây là (các) phân đoạn Tập hợp bản sao của bạn. Tùy thuộc vào nhu cầu của bạn. Ví dụ:trong triển khai này, tôi đã triển khai hai phân đoạn nhưng bạn chỉ có thể sử dụng một phân đoạn để bắt đầu, đặc biệt là đối với các triển khai nhỏ.

  1. Xác định cài đặt cơ sở dữ liệu của bạn

Tại thời điểm này, nhấn nút triển khai và chỉ cần đợi khi công việc được xử lý bởi ClusterControl.

  1. Sau khi hoàn tất, bây giờ bạn có thể khôi phục bản sao lưu mà bạn đã lấy từ mongodump. Ví dụ:tôi đã tạo một bản sao lưu bằng ClusterControl và sau đó sử dụng bản sao lưu này làm bản sao lưu nguồn của mình. Khi sử dụng lệnh mongorestore, hãy đảm bảo rằng máy chủ đích của bạn là một trong các phiên bản mongos của bạn. Đối với triển khai ví dụ này, tôi có máy chủ lưu trữ 192.168.40.233.

$ 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. Bây giờ, bạn đã sẵn sàng và sau đó thực hiện một số thay đổi đối với tệp cấu hình Open edX của mình . Trong thiết lập cài đặt của tôi, bạn có thể cập nhật /edx/etc/studio.yml và /edx/etc/lms.yml. Bạn cũng có thể phải thay đổi các tệp trong tệp /edx/app/edxapp/lms.auth.json và /edx/app/edxapp/cms.auth.json và thay thế chúng bằng tên máy chủ chính xác của phiên bản mongos của bạn.

  2. Xác minh trong mongos của bạn và kiểm tra xem cơ sở dữ liệu đã được tải chưa và có thể truy cập được hay không,

[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

Bây giờ bạn đã hoàn tất !!!

Trong chế độ xem web cũng của ClusterControl, khi ClusterControl kết thúc việc triển khai, bạn sẽ có cấu trúc liên kết trông giống như thế này,

Sau khi hoàn tất, bạn đã quản lý được Open edX của mình và quản lý các khóa học của bạn!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để lưu trữ thời gian trong ngày trong MongoDB? Như một chuỗi? Cho năm / tháng / ngày tùy ý?

  2. Tạo chỉ mục văn bản với các trọng lượng trường khác nhau trong MongoDB

  3. Làm cách nào để biết ngày tạo bộ sưu tập MongoDB bằng trình điều khiển MongoDB C #?

  4. Mongoose - Tên bộ sưu tập Force

  5. Tìm tài liệu có mảng không chứa giá trị cụ thể