0
0
Lập trình
Admin Team
Admin Teamtechmely

Sao Chép Dữ Liệu & Tính Sẵn Sàng Cao trong Cơ Sở Dữ Liệu

Đăng vào 1 tháng trước

• 7 phút đọc

Sao Chép Dữ Liệu & Tính Sẵn Sàng Cao

🔹 Giới thiệu về Sao Chép Dữ Liệu

Sao chép dữ liệu là quá trình sao chép dữ liệu từ một máy chủ cơ sở dữ liệu (máy chủ chính) sang một hoặc nhiều máy chủ khác (máy chủ phụ). Điều này cho phép có nhiều bản sao của cùng một dữ liệu trên các máy chủ khác nhau, đảm bảo rằng nếu một máy chủ gặp sự cố, dữ liệu vẫn có sẵn từ các máy chủ khác.

  • Máy chủ chính (hoặc master) xử lý tất cả các thao tác ghi (INSERT, UPDATE, DELETE).
  • Máy chủ phụ (hoặc slave, follower, standby) nhận các thay đổi này và áp dụng chúng.

👉 Hãy tưởng tượng như việc giữ bản sao của cuốn sổ quan trọng ở nhiều nơi khác nhau — nếu một bản bị mất, bạn vẫn có bản sao.


🔹 Các loại Sao Chép

  1. Sao chép đồng bộ (Synchronous Replication)

    • Các thao tác ghi trên máy chủ chính chỉ được xác nhận sau khi máy chủ phụ cũng xác nhận đã ghi lại thay đổi.
    • Đảm bảo không mất dữ liệu nhưng có thể làm chậm hiệu suất vì phải chờ.
    • Ví dụ: Sao chép đồng bộ trong PostgreSQL.
  2. Sao chép không đồng bộ (Asynchronous Replication)

    • Các thao tác ghi trên máy chủ chính nhanh chóng trả về thành công, và máy chủ phụ cập nhật sau.
    • Nhanh hơn, nhưng có nguy cơ mất dữ liệu nếu máy chủ chính gặp sự cố trước khi máy chủ phụ đồng bộ.
    • Ví dụ: Sao chép mặc định của MySQL.
  3. Sao chép bán đồng bộ (Semi-synchronous Replication)

    • Là sự trung gian: máy chủ chính chờ ít nhất một máy chủ phụ xác nhận trước khi trả về thành công.
    • Cân bằng giữa an toàn và hiệu suất.

🔹 Tại sao Sao Chép lại Quan Trọng?

  • Mở rộng Đọc: Phân phối các yêu cầu đọc qua các máy chủ phụ (các ứng dụng có nhu cầu đọc cao sẽ được hưởng lợi).
  • Tính Sẵn Sàng Cao: Nếu máy chủ chính gặp sự cố, máy chủ phụ có thể được thăng cấp thành máy chủ chính mới.
  • Khôi phục Thảm họa: Dữ liệu sẽ được bảo vệ ngay cả khi một máy chủ bị mất.
  • Phân phối Địa lý: Người dùng ở châu Á có thể đọc từ một máy chủ phụ ở châu Á thay vì từ máy chủ ở Mỹ.

🔹 Tính Sẵn Sàng Cao (High Availability - HA)

Tính sẵn sàng cao liên quan đến việc giữ cho cơ sở dữ liệu luôn trực tuyến, ngay cả trong trường hợp gặp sự cố. Sao chép là một phần cốt lõi của HA, nhưng HA còn bổ sung thêm tự động chuyển đổi và giám sát.

  • Nếu máy chủ chính ngừng hoạt động, một máy chủ phụ tự động trở thành máy chủ chính mới.
  • Các khách hàng tự động kết nối lại mà không cần can thiệp thủ công.
  • Cần có một trình quản lý cụm / orchestrator.

🔹 Sao Chép & HA trong Các Cơ Sở Dữ Liệu Phổ Biến

  • MySQL

    • Sao chép: Không đồng bộ theo mặc định (dựa trên binlog).
    • HA: Các công cụ như MySQL InnoDB Cluster, Orchestrator, hoặc ProxySQL xử lý việc chuyển đổi.
  • PostgreSQL

    • Sao chép streaming tích hợp sẵn.
    • HA: Các công cụ như Patroni, PgBouncer, repmgr, hoặc Stolon.
  • MongoDB

    • Tập hợp bản sao tích hợp sẵn: một máy chủ chính, nhiều máy chủ phụ, tự động chuyển đổi.
  • Cassandra

    • Sao chép là peer-to-peer (không có sự phân biệt giữa master và replica). Mỗi nút có thể xử lý ghi.

🔹 Kịch Bản Ví Dụ

Hãy tưởng tượng một ứng dụng ngân hàng:

  • Cơ sở dữ liệu chính (Mumbai) → xử lý tất cả các giao dịch gửi/rút tiền.
  • Các máy chủ phụ:
    • Máy chủ phụ Delhi → xử lý các truy vấn đọc cho người dùng ở miền Bắc Ấn Độ.
    • Máy chủ phụ London → xử lý đọc cho người dùng ở châu Âu.

Nếu máy chủ chính Mumbai gặp sự cố:

  • Máy chủ phụ Delhi sẽ được thăng cấp thành máy chủ chính mới.
  • Tất cả các thao tác ghi giờ sẽ chuyển đến Delhi, đảm bảo không có thời gian chết cho khách hàng.

Tóm tắt
Sao chép = Sao chép dữ liệu giữa các máy chủ.
Tính sẵn sàng cao = Đảm bảo cơ sở dữ liệu luôn hoạt động tự động, ngay cả khi một máy chủ gặp sự cố.


🔹 Cách Thức Hoạt Động của Tự Động Chuyển Đổi

1. Giám sát Sức Khỏe

  • Các công cụ như Patroni (PostgreSQL), Orchestrator (MySQL), hoặc tập hợp bản sao tích hợp của MongoDB liên tục ping máy chủ chính.
  • Họ kiểm tra:
    • Máy chủ cơ sở dữ liệu có hoạt động không (thông qua TCP/heartbeat)?
    • Sao chép có được cập nhật không?
    • phân vùng mạng không (máy chủ chính vẫn hoạt động nhưng không thể truy cập)?

👉 Nếu máy chủ chính ngừng phản hồi trong một khoảng thời gian nhất định (ví dụ 10 giây), nó sẽ được đánh dấu là thất bại.


2. Bầu cử Lãnh đạo

  • Trong một cụm, bạn không muốn có hai máy chủ chính (vấn đề phân tách ⚠️).
  • Một hệ thống đồng thuận như Etcd, Consul, hoặc Zookeeper được sử dụng.
  • Các thành viên trong cụm bỏ phiếu:
    • "Máy chủ chính đã chết, chúng ta cần một máy chủ mới."
    • Họ đồng ý về máy chủ phụ nào là máy chủ cập nhật nhất.

👉 Máy chủ phụ gần đây nhất (với độ trễ sao chép ít nhất) sẽ trở thành máy chủ chính mới.


3. Chuyển Đổi / Thăng Cấp

  • Máy chủ phụ đã chọn:
    • Thăng cấp thành máy chủ chính.
    • Ngừng hoạt động ở chế độ chỉ đọc.
    • Bắt đầu chấp nhận các thao tác ghi.

👉 Trong Patroni (PostgreSQL), điều này được thực hiện bằng lệnh pg_ctl promote.
👉 Trong Orchestrator (MySQL), nó phát lệnh RESET SLAVE ALL và cấu hình lại sao chép.


4. Cấu Hình Lại

  • Các máy chủ phụ khác giờ sẽ bắt đầu sao chép từ máy chủ chính mới.
  • Cụm cập nhật định tuyến để các ứng dụng biết nơi để gửi thao tác ghi.
  • Các công cụ như HAProxy, ProxySQL, hoặc PgBouncer giúp bằng cách hướng ứng dụng đến máy chủ chính hiện tại.

5. Tính Minh Bạch cho Ứng Dụng

  • Các ứng dụng không cần biết máy chủ nào là chính.
  • Họ chỉ cần kết nối với một bộ cân bằng tải / proxy.
  • Nếu có chuyển đổi, proxy sẽ tự động chuyển hướng lưu lượng đến máy chủ chính mới.

👉 Điều này đảm bảo không có thời gian chết cho ứng dụng.


🔹 Ví Dụ với Các Công Cụ

  • PostgreSQL + Patroni

    • Patroni sử dụng Etcd/Consul để theo dõi trạng thái cụm.
    • Giám sát sức khỏe của cơ sở dữ liệu.
    • Khi có sự cố → thăng cấp máy chủ phụ → cập nhật định tuyến.
  • MySQL + Orchestrator

    • Liên tục giám sát cấu trúc sao chép.
    • Phát hiện sự cố máy chủ chính.
    • Tự động thăng cấp máy chủ phụ tốt nhất.
    • Cập nhật HAProxy/ProxySQL.
  • MongoDB Replica Set

    • Phát hiện heartbeat tích hợp.
    • Bầu cử tự động (không cần công cụ bên ngoài).
    • Một máy chủ phụ trở thành máy chủ chính mới.

Tóm tắt bằng từ ngữ đơn giản
Công cụ chuyển đổi giống như một cảnh sát giao thông:

  1. Kiểm tra xem con đường chính (máy chủ chính) có mở không.
  2. Nếu đóng, tìm con đường thay thế tốt nhất (máy chủ phụ).
  3. Tự động chuyển hướng tất cả các xe (ứng dụng).

Thực Hành Tốt Nhất

  • Đảm bảo rằng tất cả các máy chủ phụ đều được giám sát liên tục và có khả năng phục hồi nhanh chóng.
  • Cấu hình các công cụ chuyển đổi tự động để giảm thiểu thời gian chết.

Những Cạm Bẫy Thường Gặp

  • Không kiểm tra định kỳ tình trạng của các máy chủ phụ.
  • Bỏ qua việc cấu hình các công cụ giám sát và chuyển đổi tự động.

Mẹo Tối Ưu Hiệu Suất

  • Xem xét việc sử dụng sao chép đồng bộ cho các ứng dụng quan trọng cần độ chính xác cao.
  • Sử dụng sao chép không đồng bộ cho các ứng dụng có thể chấp nhận độ trễ.

Câu Hỏi Thường Gặp

  • Sao chép có nghĩa là gì?
    Sao chép là quá trình sao chép dữ liệu từ một máy chủ chính sang một hoặc nhiều máy chủ phụ.

  • Tại sao cần tính sẵn sàng cao?
    Để đảm bảo rằng ứng dụng luôn hoạt động, ngay cả khi máy chủ chính gặp sự cố.

  • Có công cụ nào giúp tự động chuyển đổi không?
    Có, như Patroni cho PostgreSQL hoặc Orchestrator cho MySQL.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào