Giới thiệu
Replication trong MySQL là một trong những giải pháp quan trọng nhất để đảm bảo tính sẵn sàng cao (high availability) cho hệ thống cơ sở dữ liệu. Trong môi trường sản xuất, việc một server gặp sự cố có thể gây ra downtime nghiêm trọng. Replication giúp duy trì một hoặc nhiều bản sao dữ liệu trên các server khác nhau, từ đó giảm thiểu rủi ro mất mát dữ liệu và đảm bảo hệ thống vẫn hoạt động khi có sự cố xảy ra.
Các khái niệm cơ bản về replication MySQL
Replication trong MySQL hoạt động theo mô hình master-slave, trong đó một server (master) xử lý các thao tác ghi dữ liệu và gửi các thay đổi tới một hoặc nhiều server khác (slaves) để cập nhật. Điều này cho phép phân tán tải đọc và cung cấp backup thời gian thực.
Có ba dạng replication chính:
– Asynchronous replication: Master không chờ slave xác nhận trước khi commit transaction.
– Semi-synchronous replication: Master đợi ít nhất một slave xác nhận trước khi commit.
– Synchronous replication: Master chỉ commit khi tất cả slave đã xác nhận (thường dùng Galera Cluster).
Mỗi phương pháp có ưu và nhược điểm riêng, nhưng với yêu cầu sẵn sàng cao, semi-synchronous thường là lựa chọn cân bằng giữa hiệu năng và độ tin cậy.
Kiến trúc và topology khuyên dùng
Với môi trường cần tính sẵn sàng cao, một topology đơn giản master-slave có thể chưa đủ. Thay vào đó, nhiều tổ chức sử dụng multi-source hoặc circular replication để tăng tính dự phòng. Tuy nhiên, cần lưu ý rằng circular replication dễ gây xung đột nếu không được thiết kế cẩn thận.
Một kiến trúc phổ biến là:
– Một master chính (primary)
– Hai slave dự phòng (standby)
– Một load balancer phía trước để điều phối truy vấn đọc
Điều này giúp hệ thống vẫn hoạt động nếu một node bất kỳ gặp sự cố.
Các bước thiết lập replication
Bước 1: Chuẩn bị server
Cài đặt MySQL/MariaDB giống hệt nhau trên tất cả các server. Đảm bảo phiên bản, cấu hình và quyền truy cập giống nhau.
Bước 2: Cấu hình master
Chỉnh sửa file my.cnf (hoặc my.ini trên Windows):
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROWKhởi động lại MySQL và tạo user replication:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON . TO 'repl'@'%';
FLUSH PRIVILEGES;