Galera Cluster là một giải pháp đồng bộ hóa dữ liệu mạnh mẽ dành cho MySQL, giúp tạo ra một hệ thống MySQL phân tán với tính nhất quán cao giữa các node trong cluster. Galera Cluster được sử dụng phổ biến trong các môi trường yêu cầu tính sẵn sàng cao, cho phép quản lý nhiều node cùng lúc mà vẫn đảm bảo tính toàn vẹn của dữ liệu.
Trong bài viết này Long Vân sẽ giới thiệu và hướng dẫn các bước để cài đặt cấu hình Galera Cluster cho MySQL, bao gồm:

  • Giới thiệu về Galera Cluster.
  • Sự khác nhau giữa Galera Cluster và mô hình Replication thường.
  • Hướng dẫn cài đặt Galera Cluster.
  • Thêm node Slave

I. Giới thiệu MySQL Galera Cluster

MySQL Galera Cluster là một hệ thống Multi-Master mà trên đó tất cả node đều có thể đọc và ghi dữ liệu tại mọi thời điểm. Client có thể kết nối tới mọi node, dữ liệu sẽ được tự động đồng bộ giữa các node, đồng thời sẽ đồng bộ sang node mới khi mới được thêm vào Cluster.

Một cụm Galera cần có ít nhất 3 node và ưu tiên chạy với số lượng node lẻ để đảm bảo tính toàn vẹn khi xảy ra sự cố với một trong các node.

II .Sự khác nhau giữa Galera Cluster với mô hình Mysql Replicate thường.

  1. Sơ đồ minh họa 
  2. Sự khác nhau
    • MySQL Replication (Hình bên trái)
      • Mô hình Master-Slave: Dữ liệu từ máy chủ chính (Master) sẽ được ghi vào một tệp log (Binlog). Sau đó, dữ liệu này được gửi tới máy chủ phụ (Slave) thông qua các luồng sao chép (IO Thread, SQL Thread).
      • Chế độ ghi và đọc:
        • Master: Cho phép thực hiện cả đọc và ghi dữ liệu.
        • Slave: Chỉ cho phép đọc dữ liệu (không ghi).
      • Nhược điểm chính của mô hình này là có độ trễ trong việc sao chép dữ liệu và chỉ có một máy chủ chính (Master) thực hiện các tác vụ ghi. Điều này có thể gây ra hiện tượng nghẽn cổ chai nếu có quá nhiều yêu cầu ghi vào Master.
    • Galera Cluster (Hình bên phải)

      • Mô hình Multi-Master: Mỗi node trong cụm Galera đều có thể thực hiện cả đọc và ghi dữ liệu. Các giao dịch sau khi được thực hiện sẽ được đồng bộ hóa tức thời giữa các node bằng cách sử dụng API wsrep và cơ chế giao tiếp nhóm (group communication).
      • Chế độ ghi và đọc:
        • Tất cả các node đều có khả năng đọc/ghi (read/write).
      • Galera sử dụng phương pháp đồng bộ dữ liệu đồng thời trên tất cả các node, giúp loại bỏ độ trễ và cho phép ghi vào bất kỳ node nào mà không lo xung đột hoặc mất dữ liệu. Mô hình này đảm bảo tính nhất quán cao hơn so với MySQL Replication.
    • Tóm lại
      • MySQL Replication chỉ có một máy chủ chính (Master) thực hiện các tác vụ ghi và có độ trễ khi sao chép dữ liệu sang máy chủ phụ (Slave).
      • Galera Cluster cho phép mọi node đều có thể ghi và dữ liệu được đồng bộ hóa đồng thời, giúp giảm thiểu các vấn đề về xung đột và độ trễ.

III. Hướng dẫn cài đặt Mysql Galera Cluster

  1. Chuẩn bị:
    • Ở bài viết này Long Vân sẽ sử dụng 4 VPS được cài đặt sẵn Os Ubuntu 22.04. Trong đó
      • 1 server làm Controller , cài đặt Galera Manager
        • 192.168.70.188 ( lvsnodecontroller)
      • 3 server để cấu hình Mysql Galera Cluster
        • 192.168.70.156 ( lvsnode1)
        • 192.168.70.159 ( lvsnode2)
        • 192.168.70.168 ( lvsnode3)
  2. Tiến hành cài đặt:
    • Cập nhật lại hệ thống cho cả 4 node
      sudo apt-get update
      sudo apt-get upgrade 
    • Trên Server Controller ( lvsnodecontroller)
      • Cài đặt trình quản lí Galera Manager để quản lí các lvsnode
        wget https://galeracluster.com/galera-manager/gm-installer
        chmod +x gm-installer
        ./gm-installer install 

        • Chọn a để accept cài đặt .
        • Điền thông tin user admin và password (cần đặt password ở bước này sau đó mới đổi password để tránh không login được ).
        • Điền thông tin server làm controller -> nhấn Enter 
        • Chạy lại cập nhật hệ thống để apply Galera-Manager vừa khởi  tạo
          sudo apt-get update
          sudo apt-get upgrade 
        • Truy cập trình duyệt để tạo Galera Cluster với user và password đã tạo ở trước đó 
        • Lúc này, quản trị viên có thể thực hiện các thao tác trên giao diện controller như tạo Cluster hoặc thêm node vào Cluster.
      • Tạo Cluster:
        • Trong giao diện Galera Controller, chọn ADD CLUSTER -> Deloy cluster on user-provided hosts
        • Nhập thêm thông tin tên Cluster và chọn cơ sở dữ liệu muốn sử dụng ở đây Long Vân sẽ chạy với mysql8.0. Chọn host system là hệ điều hành đang chạy.
        • Click chọn I have added public key to /root/.ssh/authorized_keys file on all nodes
        • Copy đoạn key trên và thêm vào cấu hình /root/.ssh/authorized_keys của các node còn lại ( lvsnode1, lvsnode2, lvsnode3 ).
        • Trên trình duyệt Galena Controller tiếp tục chọn ADD NODE. Thêm thông Node cần thêm –>CHECK ACCESS –> DEPLOY ( ở đây thêm lvsnode1 node đầu tiên vào).

        • Thêm tiếp các node còn lại lvsnode2 và lvsnode3 tương tự như làm ở lvsnode1.
        • Quá trình thêm node hoàn tất.
    • Kiểm tra quá trình đồng bộ giữa các lvsnode trên Cluster
      • Kiểm tra hoạt động của LongVan_Cluster vừa tạo giữa các lvsnode
      • Kiểm tra tính đồng bộ dữ liệu trên database
      • Tiến hành tạo database có tên lvsdemo ở lvsnode1 và kiểm tra đồng bộ ở lvsnode2 và lvsnode3 (như hình trên).

IV. Thêm node Slave vào trong Galera Cluster.

  1. Trong Galera Cluster, bạn có thể kết nối một node không đồng bộ (async slave) vào cụm. Điều này hữu ích vì vài lý do:

    • Chuyển tải truy vấn : Nếu cụm của bạn phải xử lý các truy vấn  hoặc phân tích dài và nặng, nó có thể làm chậm cả hệ thống. Bằng cách gửi các truy vấn này đến một máy chủ async slave riêng, bạn ngăn không cho tải này ảnh hưởng đến Galera Cluster.

    • Sao lưu trực tiếp: Async slave cũng có thể được sử dụng như một sao lưu từ xa, giúp tạo một bản sao dữ liệu trực tiếp để khôi phục khi gặp sự cố.

  2. Các bước thêm node Async
    • Thêm 1 Server  cho quá trình thêm Node Async ( Slave )
      • 192.168.70.180 ( lvsnode4 )
    • Trên node lvsnode4
      • Cài đặt galera-4 mysql-wsrep-8.0
        • Trước tiên, cần đảm bảo rằng khóa Galera Cluster GPG đã được cài đặt:

          apt-key adv --keyserver keyserver.ubuntu.com --recv 8DA84635 

        • Thêm thư viện souce list
          vi /etc/apt/sources.list.d/galera.list 
          deb https://releases.galeracluster.com/galera-4.20/ubuntu jammy main
          deb https://releases.galeracluster.com/mysql-wsrep-8.0.39-26.20/ubuntu jammy main 
        • Thêm kho lưu trữ
          vi /etc/apt/preferences.d/galera.pref 
          Package: *
          Pin: origin releases.galeracluster.com
          Pin-Priority: 1001 
        • Chạy lại update để cập nhật thư viện và kho lưu trữ vừa thêm
          sudo apt-get update 

        • Cài đặt galera-4 mysql-wsrep-8.0
          sudo apt-get install galera-4 mysql-wsrep-8.0 
        • Thêm cấu hình vào file conf mysql vừa đặt
          vi /etc/mysql/mysql.conf.d/mysqld.cnf 
          gtid_mode=ON
          log_bin=binlog
          log_slave_updates=1
          enforce_gtid_consistency
          expire_logs_days=7
          server_id=4
          binlog_format=ROW
          slave_net_timeout=60 
        • Khởi động lại Mysql để lưu lại cấu hình
          systemctl restart mysql 
    • Trên node lvsnode1
      • Thêm cấu hình vào file conf mysql
        vi /etc/mysql/mysql.conf.d/mysqld.cnf 
        gtid_mode=ON
        log_bin=binlog
        log_slave_updates=1
        enforce_gtid_consistency
        expire_logs_days=7
        server_id=1
        binlog_format=ROW 
      • Khởi động lại Mysql để lưu lại cấu hình
        systemctl restart mysql 
      • Tạo user replica cho node lvsnode4
        mysql
        CREATE USER 'replica'@'192.168.70.180' IDENTIFIED WITH 'mysql_native_password' BY 'P@ssw0rd321';
        GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.70.180';
        FLUSH PRIVILEGES;
        exit 

      • Trên node lvsnode4
        • Cấu hình replicate với user vừa tạo ở node lvsnode1
          mysql
          CHANGE MASTER TO MASTER_HOST = '192.168.70.156', MASTER_PORT = 3306, MASTER_USER = 'replica', MASTER_PASSWORD = 'P@ssw0rd321', MASTER_AUTO_POSITION = 1;
          START SLAVE;
          SHOW SLAVE STATUSG; 

      • Kiểm tra đồng bộ giữa server Master ( lvsnode1) và server Slave ( lvsnode4 ).
        • Đứng từ server Master (lvsnode1) tạo database với tên lvsdemo1  để xem quá trình đồng bộ từ Master (lvsnode1) xuống Slave (lvsnode4).
        • Ngược lại từ server Slave (lvsnode4) tạo database với tên lvsdemo2  để xem quá trình có đồng bộ ngược từ Slave ( lvsnode4 ) về Master ( lvsnode1).
        • Kết quả cho thấy dữ liệu phát sinh trên server Slave sẽ không đồng bộ ngược lại.

 

Như vậy qua bài viết này Long Vân đã giúp các bạn tìm hiểu sơ lược về Galera Cluster cũng như cách cài đặt Mysql Galera Cluster với cấu hình 3 node trên Galera-Manager là như thế nào. Chúc các bạn thành công .