MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Xây dựng cơ sở dữ liệu khả dụng cao cho Moodle bằng MariaDB (Replication &MariaDB Cluster)

Ngày nay, các cuộc gặp trực tiếp được giới hạn ở mức tối thiểu, các hoạt động trực tuyến đã được sử dụng như một phương thức chính để tương tác giữa giáo viên và học sinh. Nó làm tăng sự căng thẳng trên các nền tảng “họp” trực tuyến hiện có (có ai không biết Zoom là gì ngày nay không?) Mà còn trên các nền tảng học tập trực tuyến. Tính khả dụng cao của các công cụ trực tuyến quan trọng hơn bao giờ hết và các nhóm vận hành gấp rút xây dựng các kiến ​​trúc bền, có tính khả dụng cao cho môi trường của họ.

Nhiều khả năng ít nhất một số bạn đã sử dụng Moodle - đó là một nền tảng học tập trực tuyến độc lập mà bạn có thể triển khai tại chỗ và sử dụng nó để cung cấp đào tạo trực tuyến cho tổ chức của mình. Như chúng tôi đã đề cập, điều quan trọng hơn bao giờ hết là làm cho nó hoạt động bền bỉ, có tính khả dụng cao. Chúng tôi muốn đề xuất một giải pháp có tính khả dụng cao liên quan đến MariaDB làm cơ sở dữ liệu phụ trợ - cả bản sao không đồng bộ và Galera Cluster.

Quy trình Thiết kế Môi trường

Chúng tôi muốn bắt đầu với một quy trình trong đó chúng tôi sẽ giải thích quy trình suy nghĩ đằng sau việc thiết kế môi trường cho Moodle. Chúng tôi muốn tính khả dụng cao do đó một nút cơ sở dữ liệu duy nhất không hoạt động đối với chúng tôi. Chúng tôi muốn có nhiều nút và điều này dẫn chúng tôi đến quyết định thiết kế đầu tiên. Chúng ta nên sử dụng sao chép không đồng bộ hoặc Galera Cluster? Câu hỏi thứ hai là:chúng ta sẽ phân phối khối lượng công việc trên các nút như thế nào? Hãy bắt đầu với cái thứ hai.

Phiên bản Moodle mới nhất tại thời điểm blog này được viết (3.9) đã giới thiệu một tính năng hay được gọi là đọc an toàn. Vấn đề cần giải quyết ở đây là đọc sau khi ghi. Khi bạn sử dụng một nút, thế giới là một nơi đơn giản. Bạn viết và sau đó bạn đọc. Bất cứ điều gì bạn viết đã có ở đó rồi. Tuy nhiên, khi bạn thêm các nút, mọi thứ sẽ thay đổi. Trong sao chép không đồng bộ, nô lệ có thể bị trễ thậm chí hàng chục giây hoặc hơn. Bất cứ điều gì bạn viết trên chủ có thể mất vài phút (nếu không phải nhiều hơn trong những trường hợp cực đoan hơn) để áp dụng cho nô lệ. Nếu bạn thực hiện một ghi và sau đó ngay lập tức cố gắng đọc cùng một dữ liệu từ một trong các nô lệ, bạn có thể gặp phải bất ngờ kinh khủng - dữ liệu sẽ không có ở đó. Cụm Galera sử dụng một bản sao đồng bộ “ảo” và trong trường hợp cụ thể này, “hầu như” tạo ra sự khác biệt rất lớn - Galera không miễn nhiễm với các vấn đề đọc-sau-ghi. Luôn có độ trễ giữa việc thực thi ghi trên nút cục bộ và tập ghi đang được áp dụng cho các nút còn lại của cụm. Chắc chắn, nó rất có thể được đo bằng mili giây chứ không phải giây nhưng nó vẫn có thể phá vỡ giả định rằng bạn có thể đọc ngay những gì mình đã viết. Nơi duy nhất bạn có thể đọc một cách an toàn sau khi ghi là nút mà bạn đã ghi dữ liệu.

Vì Moodle phụ thuộc khá nhiều vào việc đọc-sau-ghi, chúng tôi không thể dễ dàng mở rộng quy mô số lần đọc chỉ bằng cách thêm nhiều nút hơn để đọc từ đó. Đối với Galera Cluster, chúng tôi có thể cố gắng giảm thiểu sự cố bằng cách sử dụng cài đặt cấu hình wsrep-sync-wait để buộc Galera đảm bảo rằng các lần đọc được thực thi an toàn. Điều này tạo ra tác động về hiệu suất trên hệ thống vì tất cả các lần đọc phải đợi ghi được áp dụng trước khi chúng có thể được thực thi. Đây cũng là một giải pháp cho MariaDB Cluster (và các giải pháp dựa trên Galera khác), không phải cho sao chép không đồng bộ. May mắn thay, giải pháp từ Moodle giải quyết được vấn đề này. Bạn có thể xác định danh sách các nút có thể bị trễ và Moodle sẽ chỉ sử dụng chúng cho các lần đọc không yêu cầu cập nhật các lần ghi. Tất cả các lần đọc còn lại yêu cầu dữ liệu luôn được cập nhật sẽ được chuyển trực tiếp đến nút ghi. Vì vậy, khả năng mở rộng của Moodle bị giới hạn vì chỉ những lần đọc “an toàn” mới có thể được thu nhỏ. Chúng tôi chắc chắn sẽ muốn sử dụng tính năng của 3.9 vì đây là phương pháp an toàn duy nhất để xác định lựa chọn nào sẽ đi đến đâu. Cho rằng mọi thứ đều được viết trong tệp cấu hình của Moodle, chúng tôi rất có thể muốn sử dụng bộ cân bằng tải, tốt nhất là ProxySQL, để tạo logic xử lý phân phối đọc của chúng tôi.

Chúng ta nên sử dụng MariaDB Cluster hay sao chép không đồng bộ? Chúng tôi thực sự sẽ chỉ cho bạn cách sử dụng cả hai. Trong cả hai trường hợp, cấu hình cho Moodle sẽ khá giống nhau. Trong cả hai trường hợp, chúng tôi sẽ sử dụng ProxySQL làm bộ cân bằng tải. Sự khác biệt chính giữa các giải pháp đó là chuyển đổi dự phòng. MariaDB Cluster dễ xử lý hơn - nếu một nút gặp sự cố, ProxySQL sẽ chỉ chuyển lưu lượng ghi sang một trong các nút còn lại. Với sao chép không đồng bộ, mọi thứ hơi khác một chút. Nếu cái chính gặp sự cố, chuyển đổi dự phòng phải xảy ra. Điều này không xảy ra tự động, bạn phải thực hiện bằng tay hoặc bạn có thể dựa vào một số phần mềm để thực hiện điều đó. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng ClusterControl để quản lý môi trường và thực hiện chuyển đổi dự phòng, do đó, từ quan điểm người dùng, không có nhiều sự khác biệt giữa sao chép không đồng bộ và Cụm MariaDB - trong cả hai trường hợp, lỗi của trình viết sẽ được tự động xử lý và cụm sẽ tự động khôi phục .

Những gì chúng tôi đã thiết lập là chúng tôi sẽ giới thiệu cả bản sao không đồng bộ và hầu như đồng bộ. Chúng tôi sẽ sử dụng tính năng ghi an toàn từ Moodle 3.9 và chúng tôi sẽ sử dụng ProxySQL làm bộ cân bằng tải. Để đảm bảo tính khả dụng cao, chúng tôi sẽ cần nhiều hơn một phiên bản ProxySQL, do đó chúng tôi sẽ đi với hai phiên bản trong số đó và để tạo một điểm vào duy nhất vào lớp cơ sở dữ liệu, chúng tôi sẽ sử dụng Keepalived để tạo một IP ảo và trỏ nó đến một trong những ProxySQL có sẵn điểm giao. Đây là cách cụm cơ sở dữ liệu của chúng tôi có thể trông như thế nào:

Đối với sao chép không đồng bộ, nó có thể trông giống như sau:

Triển khai Phần hỗ trợ Cơ sở dữ liệu Khả dụng Cao cho Moodle Sử dụng Bản sao MariaDB

Hãy bắt đầu với Bản sao MariaDB. Chúng tôi sẽ sử dụng ClusterControl để triển khai toàn bộ phần phụ trợ cơ sở dữ liệu bao gồm cả bộ cân bằng tải.

Triển khai Cụm sao chép MariaDB

Đầu tiên, chúng ta cần chọn "Triển khai" từ trình hướng dẫn:

Sau đó, chúng ta nên xác định kết nối SSH, truy cập SSH không mật khẩu, dựa trên khóa là một yêu cầu đối với ClusterControl để quản lý cơ sở hạ tầng cơ sở dữ liệu.

Khi bạn điền các chi tiết đó, đã đến lúc chọn nhà cung cấp và phiên bản , xác định mật khẩu của superuser và quyết định một số chi tiết khác.

Bây giờ chúng ta sẽ sử dụng MariaDB 10.4. Bước tiếp theo, chúng ta phải xác định cấu trúc liên kết sao chép:

Chúng ta nên chuyển tên máy chủ của các nút và cách chúng liên quan đến từng khác. Một khi chúng tôi hài lòng với cấu trúc liên kết, chúng tôi có thể triển khai. Với mục đích của blog này, chúng tôi sẽ sử dụng chính và hai nô lệ làm phụ trợ của chúng tôi.

Chúng tôi đã thiết lập và sẵn sàng cụm đầu tiên. Bây giờ, hãy triển khai ProxySQL và Keepalived.

Triển khai ProxySQL

Đối với ProxySQL, bạn phải điền một số chi tiết - chọn máy chủ để cài đặt quyết định về phiên bản ProxySQL, thông tin xác thực cho người dùng quản trị và giám sát. Bạn cũng nên nhập người dùng cơ sở dữ liệu hiện có hoặc tạo một người dùng mới cho ứng dụng của mình. Cuối cùng, quyết định các nút cơ sở dữ liệu bạn muốn sử dụng với ProxySQL và quyết định xem bạn có sử dụng các giao dịch ngầm hay không. Trong trường hợp của Moodle, điều này không đúng.

Triển khai Keepalived

Ở bước tiếp theo, chúng tôi sẽ triển khai Keepalived.

Sau khi chuyển các chi tiết như phiên bản ProxySQL cần được theo dõi, IP ảo và giao diện VIP nên ràng buộc với chúng tôi đã sẵn sàng để triển khai. Sau vài phút, mọi thứ sẽ sẵn sàng và cấu trúc liên kết sẽ giống như bên dưới:

Định cấu hình Moodle và ProxySQL để Ghi tỉ lệ an toàn

Bước cuối cùng sẽ là định cấu hình Moodle và ProxySQL để sử dụng ghi an toàn. Mặc dù có thể mã hóa cứng các nút cơ sở dữ liệu trong cấu hình Moodle, nhưng sẽ tốt hơn nhiều nếu dựa vào ProxySQL để xử lý các thay đổi cấu trúc liên kết. Những gì chúng ta có thể làm là tạo thêm một người dùng trong cơ sở dữ liệu. Người dùng đó sẽ được định cấu hình trong Moodle để thực hiện các lần đọc an toàn. ProxySQL sẽ được định cấu hình để gửi tất cả lưu lượng được thực thi từ người dùng đó đến các nút phụ có sẵn.

Trước tiên, hãy tạo một người dùng mà chúng tôi sẽ sử dụng để truy cập chỉ đọc.

Chúng tôi đang cấp tất cả các đặc quyền ở đây nhưng có thể giới hạn danh sách đó .

Người dùng mà chúng tôi vừa tạo phải được thêm vào cả hai phiên bản ProxySQL mà chúng tôi có trong cụm để cho phép ProxySQL xác thực với tư cách là người dùng đó. Trong giao diện người dùng ClusterControl, bạn có thể sử dụng hành động “Nhập người dùng”.

Chúng tôi có thể tìm kiếm người dùng mà chúng tôi vừa tạo:

ProxySQL sử dụng khái niệm nhóm máy chủ - nhóm máy chủ phục vụ cùng một mục đích . Trong cấu hình mặc định của chúng tôi, có hai nhóm máy chủ - nhóm máy chủ 10 luôn trỏ đến chính hiện tại và nhóm máy chủ 20 trỏ đến các nút phụ. Chúng tôi muốn người dùng này gửi lưu lượng đến các nút phụ, do đó chúng tôi sẽ gán HG 20 làm nút mặc định.

Vậy là xong, người dùng sẽ được hiển thị trên danh sách người dùng:

Bây giờ chúng ta nên lặp lại quá trình tương tự trên nút ProxySQL khác hoặc sử dụng Tùy chọn "Đồng bộ hóa phiên bản". Bằng cách này hay cách khác, cả hai nút ProxySQL phải được thêm người dùng moodle_safereads.

Bước cuối cùng sẽ là triển khai Moodle. Chúng tôi sẽ không xem xét toàn bộ quá trình ở đây, nhưng có một vấn đề chúng tôi phải giải quyết. ProxySQL tự giới thiệu là 5.5.30 và Moodle phàn nàn rằng nó quá cũ. Chúng tôi có thể dễ dàng chỉnh sửa nó thành bất kỳ phiên bản nào chúng tôi muốn:

Sau khi hoàn tất, chúng tôi phải tạm thời gửi tất cả lưu lượng truy cập đến bậc thầy. Điều này có thể được thực hiện bằng cách xóa tất cả các quy tắc truy vấn trong ProxySQL. Người dùng 'moodle' có HG10 làm nhóm máy chủ mặc định có nghĩa là không có quy tắc truy vấn nào, tất cả lưu lượng truy cập từ người dùng đó sẽ được chuyển hướng đến máy chủ. Cách đọc thứ hai, an toàn, người dùng có nhóm máy chủ mặc định 20, đây là khá nhiều cấu hình mà chúng tôi muốn có.

Sau khi hoàn tất, chúng ta nên chỉnh sửa tệp cấu hình của Moodle và bật két an toàn tính năng đọc:

<?php  // Moodle configuration file



unset($CFG);

global $CFG;

$CFG = new stdClass();



$CFG->dbtype    = 'mysqli';

$CFG->dblibrary = 'native';

$CFG->dbhost    = '192.168.1.111';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'moodle';

$CFG->dbpass    = 'pass';

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => 6033,

  'dbsocket' => '',

  'dbcollation' => 'utf8mb4_general_ci',

  'readonly' => [

    'instance' => [

      'dbhost' => '192.168.1.111',

      'dbport' => 6033,

      'dbuser' => 'moodle_safereads',

      'dbpass' => 'pass'

    ]

  ]



);



$CFG->wwwroot   = 'http://192.168.1.200/moodle';

$CFG->dataroot  = '/var/www/moodledata';

$CFG->admin     = 'admin';



$CFG->directorypermissions = 0777;



require_once(__DIR__ . '/lib/setup.php');



// There is no php closing tag in this file,

// it is intentional because it prevents trailing whitespace problems!

Điều đã xảy ra ở đây là chúng tôi đã thêm kết nối chỉ đọc vào ProxySQL sẽ sử dụng người dùng moodle_safereads. Người dùng này sẽ luôn chỉ về phía nô lệ. Phần này kết thúc quá trình thiết lập Moodle để sao chép MariaDB của chúng tôi.

Triển khai Phần phụ trợ Cơ sở dữ liệu Khả dụng Cao cho Moodle Sử dụng Cụm MariaDB

Lần này chúng tôi sẽ cố gắng sử dụng MariaDB Cluster làm chương trình phụ trợ của chúng tôi. Một lần nữa, bước đầu tiên cũng giống như vậy, chúng ta cần chọn “Triển khai” từ trình hướng dẫn:

Khi bạn làm điều đó, chúng tôi nên xác định kết nối SSH, không cần mật khẩu, khóa- truy cập SSH dựa trên là một yêu cầu đối với ClusterControl để quản lý cơ sở hạ tầng cơ sở dữ liệu.

Sau đó, chúng ta nên quyết định về nhà cung cấp, phiên bản, máy chủ lưu trữ mật khẩu và nhiều hơn nữa cài đặt:

Sau khi điền tất cả các chi tiết, chúng ta có thể triển khai.

Chúng tôi có thể tiếp tục ở đây hơn nữa nhưng với tất cả các bước tiếp theo về cơ bản giống như với MariaDB replication, chúng tôi chỉ yêu cầu bạn cuộn lên và kiểm tra phần “Triển khai ProxySQL” và mọi thứ tiếp theo sau nó. Bạn phải triển khai ProxySQL, Keepalived, cấu hình lại nó, thay đổi tệp cấu hình của Moodle và điều này là khá nhiều. Chúng tôi hy vọng rằng blog này sẽ giúp bạn xây dựng các môi trường có tính khả dụng cao cho Moodle được hỗ trợ bởi MariaDB Cluster hoặc sao chép.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xác định các vấn đề về hiệu suất MySQL với các truy vấn chậm

  2. Cách DAYOFYEAR () hoạt động trong MariaDB

  3. Mẹo lưu trữ bản sao lưu MariaDB của bạn trên đám mây

  4. So sánh MariaDB Enterprise Backup với ClusterControl Backup Management

  5. Kiểm tra tự động quá trình nâng cấp cho PXC / MariaDB Galera Cluster