Bài 24: Tối ưu Query với Replication

Thana OscarThana Oscar
4 min read

Replication là một kỹ thuật quan trọng trong việc tối ưu hóa hiệu suất và độ tin cậy của hệ thống cơ sở dữ liệu. Nó không chỉ giúp phân tải truy vấn mà còn đảm bảo tính sẵn sàng cao (high availability) và khả năng phục hồi sau sự cố. Trong bài này, chúng ta sẽ tìm hiểu chi tiết về replication, cách triển khai, và khi nào nên sử dụng nó.


24.1. Replication là gì?

Replication là quá trình sao chép dữ liệu từ một cơ sở dữ liệu chính (master) sang một hoặc nhiều cơ sở dữ liệu phụ (slave). Mục đích chính là để phân tải truy vấn, đảm bảo dữ liệu luôn sẵn sàng, và tăng khả năng phục hồi sau thảm họa.

24.1.1. Cách hoạt động của replication
  • Master-Slave Replication:

    • Master node là nơi thực hiện các thao tác ghi (INSERT, UPDATE, DELETE).

    • Slave node sao chép dữ liệu từ master và chỉ thực hiện các thao tác đọc (SELECT).

    • Các thay đổi trên master được ghi lại trong binary log, sau đó slave đọc và áp dụng các thay đổi này vào dữ liệu của mình.

  • Multi-Source Replication: Một slave có thể nhận dữ liệu từ nhiều master.

  • Synchronous vs Asynchronous Replication:

    • Synchronous: Dữ liệu được ghi đồng thời lên master và slave. Đảm bảo tính nhất quán cao nhưng có thể làm chậm hiệu suất.

    • Asynchronous: Dữ liệu được ghi lên master trước, sau đó mới sao chép sang slave. Hiệu suất cao hơn nhưng có độ trễ.

24.1.2. Lợi ích của replication
  • Phân tải truy vấn đọc (Read Scaling): Các truy vấn đọc có thể được phân tải lên các slave, giảm tải cho master.

  • Tính sẵn sàng cao (High Availability): Nếu master gặp sự cố, slave có thể tiếp quản để đảm bảo hệ thống tiếp tục hoạt động.

  • Sao lưu dữ liệu an toàn: Slave có thể được sử dụng để sao lưu dữ liệu mà không ảnh hưởng đến master.

  • Phân tích dữ liệu: Có thể sử dụng slave để chạy các truy vấn phân tích nặng mà không ảnh hưởng đến hiệu suất của master.


24.2. Cách triển khai replication

24.2.1. Cấu hình master-slave replication

Dưới đây là các bước cơ bản để thiết lập master-slave replication trong MySQL:

  1. Cấu hình Master:

    • Chỉnh sửa file cấu hình my.cnf trên master:

        [mysqld]
        server-id=1
        log-bin=mysql-bin
        binlog-do-db=your_database_name
      
    • Tạo user cho replication:

        CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
        GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
        FLUSH PRIVILEGES;
      
    • Lấy thông tin binary log:

        SHOW MASTER STATUS;
      
  2. Cấu hình Slave:

    • Chỉnh sửa file cấu hình my.cnf trên slave:

        [mysqld]
        server-id=2
        relay-log=mysql-relay-bin
      
    • Cấu hình slave để kết nối với master:

        CHANGE MASTER TO
        MASTER_HOST='master_ip',
        MASTER_USER='replica_user',
        MASTER_PASSWORD='password',
        MASTER_LOG_FILE='mysql-bin.000001',
        MASTER_LOG_POS=12345;
      
    • Bắt đầu replication:

        START SLAVE;
      
  3. Kiểm tra trạng thái replication:

    • Trên slave, chạy lệnh:

        SHOW SLAVE STATUS\G;
      
    • Đảm bảo rằng Slave_IO_RunningSlave_SQL_Running đều là Yes.

24.2.2. Sử dụng replication để phân tải read query
  • Cân bằng tải (Load Balancing): Sử dụng các công cụ như ProxySQL hoặc HAProxy để tự động chuyển hướng các truy vấn đọc đến các slave.

  • Phân tích dữ liệu: Chạy các truy vấn phân tích nặng trên slave để tránh ảnh hưởng đến hiệu suất của master.

  • Đọc dữ liệu gần thời gian thực (Near Real-Time Reads): Sử dụng asynchronous replication để đảm bảo các truy vấn đọc trên slave có dữ liệu gần nhất từ master.


24.3. Khi nào nên sử dụng replication

24.3.1. Trường hợp phù hợp cho replication
  • Ứng dụng có nhiều truy vấn đọc: Nếu ứng dụng của bạn có tỷ lệ truy vấn đọc cao hơn truy vấn ghi, replication là một giải pháp lý tưởng.

  • Yêu cầu tính sẵn sàng cao: Nếu bạn cần đảm bảo hệ thống luôn hoạt động ngay cả khi có sự cố.

  • Phân tích dữ liệu: Khi cần chạy các báo cáo hoặc phân tích dữ liệu mà không ảnh hưởng đến hiệu suất của cơ sở dữ liệu chính.

24.3.2. Đánh đổi giữa replication và sharding
  • Replication:

    • Ưu điểm: Dễ triển khai, phù hợp cho các ứng dụng có nhiều truy vấn đọc.

    • Nhược điểm: Không giải quyết được vấn đề mở rộng cho các truy vấn ghi.

  • Sharding:

    • Ưu điểm: Phân tải cả truy vấn đọc và ghi bằng cách chia dữ liệu thành các phần nhỏ hơn.

    • Nhược điểm: Phức tạp trong triển khai và quản lý.


Kết luận

Replication là một kỹ thuật mạnh mẽ để tối ưu hóa hiệu suất và độ tin cậy của cơ sở dữ liệu. Bằng cách phân tải các truy vấn đọc lên các slave, bạn có thể giảm tải cho master và đảm bảo hệ thống luôn sẵn sàng. Tuy nhiên, cần cân nhắc kỹ lưỡng giữa replication và sharding tùy thuộc vào nhu cầu của ứng dụng.

Với những kiến thức trên, bạn đã có thể bắt đầu triển khai replication để tối ưu hóa hệ thống cơ sở dữ liệu của mình. Chúc bạn thành công! 🚀

0
Subscribe to my newsletter

Read articles from Thana Oscar directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Thana Oscar
Thana Oscar