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

Những thách thức khi mở rộng quy mô cơ sở dữ liệu Moodle PostgreSQL

Moodle là Hệ thống Quản lý Học tập (LMS) phổ biến nhất cho phép các nhà giáo dục tạo trang web của riêng họ với các khóa học hoặc nội dung mở rộng việc học. Các loại nền tảng này ngày càng trở nên quan trọng hơn để cho phép bạn tiếp tục học từ xa khi hệ thống giáo dục truyền thống không có sẵn hoặc chỉ là một phần bổ sung của nó, do đó, sự gia tăng lưu lượng truy cập hoặc người dùng yêu cầu mở rộng môi trường của bạn để đảm bảo phản hồi thấp thời gian.

Khả năng mở rộng là thuộc tính của hệ thống / cơ sở dữ liệu để xử lý lượng nhu cầu ngày càng tăng bằng cách thêm tài nguyên. Có các cách tiếp cận khác nhau để mở rộng cơ sở dữ liệu của bạn tùy thuộc vào cách bạn cần mở rộng nó và, trong môi trường sản xuất, hầu hết thời gian ngừng hoạt động có thể kéo dài là không mong muốn, vì vậy bạn cũng nên tính đến điều này.

Trong blog này, chúng ta sẽ xem xét những tùy chọn tỷ lệ nào có sẵn và cách mở rộng cơ sở dữ liệu Moodle PostgreSQL của bạn một cách dễ dàng mà không ảnh hưởng đến hệ thống đang chạy của bạn.

Tỷ lệ theo chiều ngang và tỷ lệ theo chiều dọc

Có hai cách chính để mở rộng cơ sở dữ liệu của bạn:

  • Tỷ lệ theo chiều ngang (scale-out):Nó được thực hiện bằng cách thêm nhiều nút cơ sở dữ liệu hơn để tạo hoặc tăng một cụm cơ sở dữ liệu.
  • Tỷ lệ theo chiều dọc (tăng tỷ lệ):Nó được thực hiện bằng cách thêm nhiều tài nguyên phần cứng hơn (CPU, Bộ nhớ, Đĩa) vào một nút cơ sở dữ liệu hiện có.

Đối với Tỷ lệ Ngang , bạn có thể thêm nhiều nút cơ sở dữ liệu làm nút dự phòng. Nó có thể giúp bạn cải thiện hiệu suất đọc cân bằng lưu lượng giữa các nút. Trong trường hợp này, bạn sẽ cần thêm bộ cân bằng tải để phân phối lưu lượng truy cập đến đúng nút tùy thuộc vào chính sách và trạng thái của nút. Bạn cũng nên cân nhắc thêm hai hoặc nhiều nút cân bằng tải để tránh một điểm lỗi duy nhất và sử dụng một công cụ như “Keepalived”, để đảm bảo tính khả dụng. Keepalived là một dịch vụ cho phép bạn định cấu hình Địa chỉ IP ảo trong một nhóm máy chủ hoạt động / thụ động. Địa chỉ IP ảo này được chỉ định cho một máy chủ đang hoạt động (Bộ cân bằng tải hoạt động). Nếu máy chủ này bị lỗi, Địa chỉ IP sẽ tự động được di chuyển sang máy chủ thụ động "Phụ", cho phép nó tiếp tục hoạt động với cùng một Địa chỉ IP một cách minh bạch cho hệ thống.

Đối với Tỷ lệ theo chiều dọc , có thể cần thay đổi một số tham số cấu hình để cho phép PostgreSQL sử dụng tài nguyên phần cứng mới hoặc tốt hơn. Hãy xem một số tham số này từ tài liệu PostgreSQL.

  • work_mem:Chỉ định dung lượng bộ nhớ được sử dụng bởi các hoạt động sắp xếp nội bộ và bảng băm trước khi ghi vào các tệp đĩa tạm thời. Một số phiên đang chạy có thể thực hiện các thao tác như vậy đồng thời, vì vậy tổng bộ nhớ được sử dụng có thể gấp nhiều lần giá trị của work_mem.
  • Maint_work_mem:Chỉ định dung lượng bộ nhớ tối đa được sử dụng bởi các hoạt động bảo trì, chẳng hạn như VACUUM, CREATE INDEX và ALTER TABLE THÊM TỪ KHÓA NGOẠI LỆ. Các cài đặt lớn hơn có thể cải thiện hiệu suất cho việc hút bụi và khôi phục các kết xuất cơ sở dữ liệu.
  • autovacuum_work_mem:Chỉ định dung lượng bộ nhớ tối đa được sử dụng bởi mỗi quy trình autovacuum worker.
  • autovacuum_max_workers:Chỉ định số lượng quy trình autovacuum tối đa có thể chạy cùng một lúc.
  • max_worker_processes:Đặt số lượng quá trình nền tối đa mà hệ thống có thể hỗ trợ. Chỉ định giới hạn của quy trình như hút bụi, điểm kiểm tra và các công việc bảo trì khác.
  • max_parallel_workers:Đặt số lượng nhân công tối đa mà hệ thống có thể hỗ trợ cho các hoạt động song song. Các công nhân song song được lấy từ nhóm các quy trình công nhân được thiết lập bởi tham số trước đó.
  • max_parallel_maintenance_workers:Đặt số lượng công nhân song song tối đa có thể được khởi động bằng một lệnh tiện ích. Hiện tại, lệnh tiện ích song song duy nhất hỗ trợ việc sử dụng công nhân song song là CREATE INDEX và chỉ khi tạo chỉ mục B-tree.
  • effect_cache_size:Đặt giả định của người lập kế hoạch về kích thước hiệu dụng của bộ đệm đĩa có sẵn cho một truy vấn. Điều này được tính vào các ước tính về chi phí sử dụng một chỉ số; giá trị cao hơn thì khả năng quét chỉ mục sẽ được sử dụng nhiều hơn, giá trị thấp hơn khiến khả năng quét tuần tự sẽ được sử dụng nhiều hơn.
  • shared_buffers:Đặt dung lượng bộ nhớ mà máy chủ cơ sở dữ liệu sử dụng cho bộ đệm bộ nhớ được chia sẻ. Thường cần cài đặt cao hơn đáng kể so với mức tối thiểu để có hiệu suất tốt.
  • temp_buffers:Đặt số lượng bộ đệm tạm thời tối đa được sử dụng bởi mỗi phiên cơ sở dữ liệu. Đây là các bộ đệm phiên-cục bộ chỉ được sử dụng để truy cập vào các bảng tạm thời.
  • effect_io_concurrency:Đặt số lượng hoạt động I / O đĩa đồng thời mà PostgreSQL mong đợi có thể được thực thi đồng thời. Việc nâng giá trị này sẽ làm tăng số lượng hoạt động I / O mà bất kỳ phiên PostgreSQL riêng lẻ nào cố gắng thực hiện song song. Hiện tại, cài đặt này chỉ ảnh hưởng đến các lần quét vùng bitmap.
  • max_connections:Xác định số lượng tối đa các kết nối đồng thời đến máy chủ cơ sở dữ liệu. Việc tăng thông số này cho phép PostgreSQL chạy đồng thời nhiều quy trình phụ trợ hơn.

Thách thức ở đây có thể là làm thế nào để biết liệu bạn có cần mở rộng Cơ sở dữ liệu Moodle của mình hay không và theo cách nào, và câu trả lời là Giám sát.

Giám sát PostgreSQL cho Moodle

Chia tỷ lệ cơ sở dữ liệu là một quá trình phức tạp, vì vậy bạn nên kiểm tra một số chỉ số để có thể xác định chiến lược tốt nhất để mở rộng cơ sở dữ liệu.

Bạn có thể theo dõi việc sử dụng CPU, Bộ nhớ và Đĩa để xác định xem có vấn đề nào đó về cấu hình hay thực sự bạn cần mở rộng cơ sở dữ liệu của mình. Ví dụ:nếu bạn thấy máy chủ tải cao nhưng hoạt động cơ sở dữ liệu thấp, có lẽ không cần phải mở rộng quy mô, bạn chỉ cần kiểm tra các thông số cấu hình để khớp với tài nguyên phần cứng của mình.

Kiểm tra dung lượng đĩa được sử dụng bởi nút PostgreSQL trên mỗi cơ sở dữ liệu có thể giúp bạn xác nhận xem bạn có cần thêm đĩa hoặc thậm chí là phân vùng bảng hay không. Để kiểm tra dung lượng đĩa được sử dụng bởi cơ sở dữ liệu / bảng, bạn có thể sử dụng một số hàm PostgreSQL như pg_database_size hoặc pg_table_size.

Từ phía cơ sở dữ liệu, bạn nên kiểm tra:

  • Số lượng kết nối
  • Đang chạy các truy vấn
  • Sử dụng chỉ mục
  • Bloat
  • Trễ sao chép

Đây có thể là những số liệu rõ ràng để xác nhận xem có cần mở rộng cơ sở dữ liệu của bạn hay không.

ClusterControl như một Hệ thống Giám sát và Chia tỷ lệ

ClusterControl có thể giúp bạn đối phó với cả hai cách mở rộng mà chúng tôi đã đề cập trước đó và theo dõi tất cả các số liệu cần thiết để xác nhận yêu cầu mở rộng.

Nếu bạn chưa sử dụng ClusterControl, bạn có thể cài đặt nó và triển khai hoặc nhập cơ sở dữ liệu PostgreSQL hiện tại của mình bằng cách chọn tùy chọn “Nhập” và làm theo các bước, để tận dụng tất cả các tính năng của ClusterControl như sao lưu, chuyển đổi dự phòng tự động, cảnh báo, giám sát và hơn thế nữa.

Tỷ lệ theo chiều ngang

Để mở rộng quy mô theo chiều ngang, nếu bạn đi tới hành động cụm và chọn “Thêm mô hình nhân rộng”, bạn có thể tạo bản sao mới từ đầu hoặc thêm cơ sở dữ liệu PostgreSQL hiện có làm bản sao.

Hãy xem việc thêm một nô lệ nhân bản mới có thể là một nhiệm vụ thực sự dễ dàng như thế nào.

Như bạn thấy trong hình, bạn chỉ cần chọn Master của mình máy chủ, nhập địa chỉ IP cho máy chủ nô lệ mới của bạn và cổng cơ sở dữ liệu. Sau đó, bạn có thể chọn nếu bạn muốn ClusterControl cài đặt phần mềm cho bạn và nếu nô lệ nhân bản phải là Đồng bộ hoặc Không đồng bộ.

Bằng cách này, bạn có thể thêm bao nhiêu bản sao tùy thích và chia sẻ lưu lượng đọc giữa chúng bằng cách sử dụng bộ cân bằng tải, điều này bạn cũng có thể triển khai với ClusterControl.

Bây giờ, nếu bạn đi tới hành động cụm và chọn “Thêm Bộ cân bằng tải”, bạn có thể triển khai Bộ cân bằng tải HAProxy mới hoặc thêm một bộ cân bằng hiện có.

Và sau đó, trong cùng phần cân bằng tải, bạn có thể thêm Keepalived dịch vụ sẽ chạy trên các nút cân bằng tải để cải thiện môi trường có tính khả dụng cao của bạn.

Sau khi thêm Load Balancer hoặc sử dụng IP ảo có dịch vụ Keepalived , bạn phải cập nhật cấu hình Moodle của mình để sử dụng điểm cuối cơ sở dữ liệu mới. Đối với điều này, hãy truy cập thư mục gốc Moodle của bạn và sửa đổi tệp config.php bằng địa chỉ IP mới:

$CFG->dbhost    = 'IP_ADDRESS';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'mdluser';

$CFG->dbpass    = '********';

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => PORT,

  'dbsocket' => '',

);

Đảm bảo rằng bạn có thể truy cập cơ sở dữ liệu của mình thông qua Bộ cân bằng tải hoặc địa chỉ IP ảo hoặc nếu bạn cần cập nhật tệp pg_hba.conf PostgreSQL của mình để cho phép.

Tỷ lệ theo chiều dọc

Để mở rộng quy mô theo chiều dọc, với ClusterControl, bạn có thể giám sát các nút cơ sở dữ liệu của mình từ cả hệ điều hành và phía cơ sở dữ liệu. Bạn có thể kiểm tra một số chỉ số như mức sử dụng CPU, Bộ nhớ, kết nối, truy vấn hàng đầu, truy vấn đang chạy và thậm chí nhiều hơn nữa. Bạn cũng có thể bật phần Trang tổng quan, phần này cho phép bạn xem các chỉ số một cách chi tiết hơn và thân thiện hơn.

Từ ClusterControl, bạn cũng có thể thực hiện các tác vụ quản lý khác nhau như Khởi động lại máy chủ, Xây dựng lại Replication Slave, hoặc Promotion Slave, với một cú nhấp chuột.

Kết luận

Chia tỷ lệ cơ sở dữ liệu Moodle PostgreSQL của bạn có thể là một nhiệm vụ khó khăn vì bạn sẽ cần biết cách bạn cần mở rộng quy mô và cách thực hiện mà không ảnh hưởng đến hệ thống. Có một hệ thống giám sát tốt là bước đầu tiên để biết bạn cần mở rộng Cơ sở dữ liệu Moodle của mình khi nào và như thế nào. Việc thêm Bộ cân bằng tải sẽ giúp bạn tránh thời gian chết không cần thiết và nó cũng sẽ cải thiện Tính khả dụng cao trong môi trường LMS của bạn.

Tất cả những điều này mà chúng tôi đã đề cập có thể được thực hiện bằng cách sử dụng ClusterControl, điều này sẽ giúp công việc dễ dàng hơn. ClusterControl cung cấp một loạt các tính năng, như giám sát, cảnh báo, chuyển đổi dự phòng tự động, sao lưu, khôi phục tại thời điểm, xác minh sao lưu, mở rộng quy mô và hơn thế nữa.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL chuyển dữ liệu từ CTE đệ quy vào hàm

  2. PGTune Alternatives - ClusterControl PostgreSQL Configuration

  3. Không thể kết nối với máy chủ postgres trong một docker từ một ứng dụng dày đặc

  4. Tạo một bảng gồm hai loại trong PostgreSQL

  5. Nhiều CTE trong một truy vấn