Cách thiết lập MariaDB Galera Multi-Master Synchronous Replication bằng Debian 10

theanh

Administrator
Nhân viên
MariaDB cung cấp hai giải pháp phân cụm và tính khả dụng cao (HA) khác nhau. Giải pháp đầu tiên là sao chép chủ/tớ MariaDB chuẩn có thể được cấu hình trong nhiều cấu trúc khác nhau chủ yếu cho mục đích cân bằng tải, HA và sao lưu. Giải pháp thứ hai là MariaDB Galera, một giải pháp cụm đồng bộ đa chủ. Các tính năng chính của giải pháp này như sau:
  • Đa chủ: Tất cả các nút trong cụm Galera đều có thể thực hiện cả hoạt động đọc và ghi, mang lại khả năng mở rộng tốt hơn.
  • Các nút có thể tự động tham gia cụm và bị trục xuất khi xảy ra lỗi.
  • Sao chép Galera là đồng bộ, nghĩa là các thay đổi trên một nút được đảm bảo sẽ được áp dụng trên các nút khác. Về lý thuyết, điều này đảm bảo không mất dữ liệu khi một nút gặp lỗi.
Hướng dẫn này sẽ hướng dẫn bạn cài đặt MariaDB và cấu hình của nó trong cụm Galera. Chúng tôi sẽ sử dụng ba nút Debian 10 để trình diễn, mặc dù có thể sử dụng bất kỳ số lượng nút nào (≥3). Về mặt kỹ thuật, có thể thiết lập hai nút trong cụm Galera nhưng không cung cấp khả năng chịu lỗi vì một nút bị lỗi sẽ khiến nút kia dừng lại.

Yêu cầu​

  • Ba phiên bản Debian 10 trở lên.
  • Truy cập vào người dùng root hoặc bất kỳ người dùng nào có quyền sudo.
  • Biến môi trường $EDITOR phải được đặt.
LƯU Ý: Cụm Galera có thể hoạt động qua WAN hoặc LAN. Nếu các nút của bạn chia sẻ mạng riêng, hãy sử dụng địa chỉ IP riêng khi có thể. Nếu không, nên sử dụng địa chỉ WAN.

Nếu sử dụng người dùng sudo, hãy mở và sử dụng shell gốc trong suốt quá trình thiết lập này bằng cách sử dụng:
Mã:
sudo -s

Bước 1: Cài đặt MariaDB​

Bước này phải được thực hiện trên tất cả các nút.

Sử dụng các lệnh sau để cài đặt MariaDB, thư viện Galera và Rsync. Galera sử dụng lệnh sau.
Mã:
apt updateapt install -y mariadb-server mariadb-client galera-3 rsync
Đảm bảo dịch vụ MariaDB được bật:
Mã:
systemctl enable mariadb.service
Bảo mật các phiên bản MariaDB của bạn bằng tập lệnh mysql_secure_installation:
Mã:
mysql_secure_installation
Trả lời các câu hỏi như hiển thị bên dưới và đảm bảo bạn chọn mật khẩu mạnh cho người dùng root MySQL.
Mã:
Nhập mật khẩu hiện tại cho root (enter nếu không có): Nhấn Đặt mật khẩu root? [Y/n] yMật khẩu mới: your_passwordNhập lại mật khẩu mới: your_passwordXóa người dùng ẩn danh? [Y/n] yKhông cho phép root đăng nhập từ xa? [Y/n] yXóa cơ sở dữ liệu thử nghiệm và truy cập vào cơ sở dữ liệu đó? [Y/n] yTải lại bảng đặc quyền ngay bây giờ? [Y/n] yXong! Nếu bạn đã hoàn tất tất cả các bước trên, thì cài đặt MariaDBcủa bạn hiện đã an toàn.

Bước 2: Cấu hình MariaDB​

Bước này phải được thực hiện trên tất cả các nút.

Dừng dịch vụ MariaDB trên tất cả các nút:
Mã:
systemctl stop mariadb.service
Theo mặc định, daemon MariaDB chỉ lắng nghe các kết nối trên máy chủ cục bộ. Để cụm hoạt động, bạn phải thay đổi địa chỉ này thành địa chỉ có thể truy cập bên ngoài. Để thực hiện, hãy chỉnh sửa tệp tùy chọn /etc/mysql/mariadb.conf.d/50-server.cnf:
Mã:
$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf
Tìm dòng sau:
Mã:
bind-address = 127.0.0.1
Nếu bạn đang sử dụng mạng riêng cho cụm và không muốn MariaDB tiếp xúc với các mạng khác (tức là WAN), hãy chỉ định địa chỉ IPv4 cục bộ cho mỗi nút. Nếu không, hãy sử dụng 0.0.0.0 để hướng dẫn MariaDB lắng nghe trên tất cả các giao diện. Ví dụ:
Mã:
bind-address = 0.0.0.0
Lưu thay đổi và thoát khỏi trình soạn thảo văn bản của bạn.

Bây giờ chúng ta sẽ định cấu hình các tùy chọn liên quan đến cụm. Tạo một tệp tùy chọn mới:
Mã:
$EDITOR /etc/mysql/mariadb.conf.d/99-cluster.cnf
Nhập cấu hình hợp lý sau vào tệp, thay thế các địa chỉ IP. Cấu hình này phải giống hệt nhau trên tất cả các nút.
Mã:
[galera]
wsrep_on = onwsrep_provider = /lib/galera/libgalera_smm.sowsrep_cluster_address = gcomm://192.0.2.1,192.0.2.2,192.0.2.3wsrep_cluster_name = galera_cluster_0default_storage_engine = InnoDBinnodb_autoinc_lock_mode = 2innodb_doublewrite = 1binlog_format = ROW
  • wsrep_on = on cho phép sao chép tập lệnh ghi, chức năng cơ bản được Galera sử dụng.
  • wsrep_provider chỉ định đường dẫn đến thư viện galera. Đường dẫn này được cung cấp bởi gói galera-3 tại /lib/galera/libgalera_smm.so trên Debian 10.
  • wsrep_cluster_address phải chứa ít nhất một địa chỉ của một thành viên cụm khác. Nên liệt kê tất cả các thành viên của cụm. Không cần thứ tự cụ thể nào cả.
  • wsrep_cluster_name phải là duy nhất đối với cụm và phải giống hệt nhau trên tất cả các nút của cùng một cụm galera.
  • Các tùy chọn còn lại là bắt buộc để Galera hoạt động bình thường và không được thay đổi.

Bước 3: Khởi động cụm​

Đảm bảo MariaDB đã dừng/không hoạt động trên tất cả các nút trước khi tiếp tục:
Mã:
systemctl status mariadb.service
Để khởi động cụm, trước tiên một nút cần tạo cụm đó. Trên Debian 10, điều này có thể được thực hiện bằng tập lệnh galera_new_cluster. Tập lệnh này chỉ nên được thực thi trên một nút và chỉ một lần để khởi tạo cụm.
Mã:
galera_new_cluster
Điều này sẽ khởi động MariaDB trên nút hiện tại. Đảm bảo rằng nó đang chạy với:
Mã:
systemctl status mariadb.service
Sau đó, khởi động MariaDB trên các nút khác với:
Mã:
systemctl start mariadb.service
Cụm bây giờ sẽ hoạt động.

Bước 4: Kiểm tra​

Để đảm bảo cụm hoạt động như mong đợi, hãy chọn bất kỳ nút nào và đăng nhập vào MariaDB:
Mã:
mysql -u root -p
Phát hành câu lệnh sau để tạo cơ sở dữ liệu:
Mã:
> CREATE DATABASE test0;> \q
Sau đó kiểm tra cơ sở dữ liệu mới này trên tất cả các nút khác:
Mã:
mysql -u root -p -e "SHOW DATABASES;"
Lệnh trên sẽ trả về danh sách chứa test0:
Mã:
+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test0 |+--------------------+
Bạn có thể muốn kiểm tra kỹ hơn bằng cách ghi vào cụm từ mọi nút. Khi bạn đã hài lòng với việc kiểm tra, hãy dọn sạch mọi cơ sở dữ liệu không cần thiết khỏi cụm. Có thể sử dụng bất kỳ nút nào.
Mã:
mysql -u root -p -e "DROP DATABASE test0;"

Bước 5: Mẹo khắc phục sự cố​

Sử dụng truy vấn sau để xem thông tin về trạng thái hiện tại của nút/cụm:
Mã:
mysql -u root -p -e "SELECT * FROM information_schema.global_status WHERE variable_name IN ('WSREP_CLUSTER_STATUS','WSREP_LOCAL_STATE_COMMENT','WSREP_CLUSTER_SIZE','WSREP_EVS_REPL_LATENCY','WSREP_EVS_DELAYED','WSREP_READY');"
Một cụm 3 nút khỏe mạnh sẽ trả về kết quả sau:
Mã:
+---------------------------+----------------+| VARIABLE_NAME | VARIABLE_VALUE |+---------------------------+----------------+| WSREP_CLUSTER_SIZE | 3 || WSREP_CLUSTER_STATUS | Chính || WSREP_EVS_DELAYED | || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Đã đồng bộ || WSREP_READY | BẬT |+---------------------------+----------------+
  • WSREP_CLUSTER_SIZE biểu thị số lượng nút hiện tại trong thành phần cụm.
  • WSREP_CLUSTER_STATUS biểu thị trạng thái của thành phần cụm chứ không phải toàn bộ cụm.
  • WSREP_EVS_DELAYED hiển thị danh sách các nút bị trễ. Giá trị trống được mong đợi từ các cụm khỏe mạnh.
  • WSREP_EVS_REPL_LATENCY hiển thị độ trễ sao chép theo định dạng min/avg/max/stddev/samplesize. Các giá trị được hiển thị theo giây. Độ trễ rất cao có thể dẫn đến hiệu suất giảm.
  • WSREP_LOCAL_STATE_COMMENT hiển thị trạng thái nút hiện tại.
  • WSREP_READY cho biết liệu nút có thể chấp nhận truy vấn hay không.
Khi một nút trong cụm 3 nút mất kết nối, cụm được phân vùng thành một thành phần chính bao gồm 2 nút và một thành phần không phải chính. Thành phần chính không bị ảnh hưởng bởi sự cố ngừng hoạt động và tiếp tục hoạt động bình thường. Theo quan điểm của thành phần không phải chính, truy vấn được hiển thị ở trên sẽ trả về kết quả sau:
Mã:
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+| VARIABLE_NAME | VARIABLE_VALUE |+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+| WSREP_CLUSTER_SIZE | 1 || WSREP_CLUSTER_STATUS | không phải là Primary || WSREP_EVS_DELAYED | 6b7864f2-fe7d-11e9-84ab-93e58c0d2907:tcp://192.0.2.1:4567:3,a421be89-fe7d-11e9-a91e-7e62f7562e58:tcp://192.0.2.3:4567:2 || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Đã khởi tạo || WSREP_READY | TẮT |+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
Lưu ý giá trị WSREP_EVS_DELAYED, giá trị này cho biết sự cố kết nối với các nút khác.

Trên các nút thành phần chính, cùng một truy vấn trả về:
Mã:
+---------------------------+----------------------------------------------------------------+| VARIABLE_NAME | VARIABLE_VALUE |+---------------------------+----------------------------------------------------------------+| WSREP_CLUSTER_SIZE | 2 || WSREP_CLUSTER_STATUS | Chính || WSREP_EVS_DELAYED | a2217526-fe7d-11e9-8692-1f2f0cdb403d:tcp://192.0.2.2:4567:2 || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Đã đồng bộ || WSREP_READY | BẬT |+---------------------------+----------------------------------------------------------------+
Để phục hồi sau lỗi của một nút, không cần can thiệp thủ công. Khi nút bị lỗi kết nối lại với cụm, nó sẽ tự động đồng bộ hóa với cụm.

Thông tin thêm​

Để biết các tùy chọn cấu hình nâng cao, hãy tham khảo Biến hệ thống cụm Galera.
 
Back
Bên trên