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:
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:
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 bảo dịch vụ MariaDB được bật:
Bảo mật các phiên bản MariaDB của bạn bằng tập lệnh 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.
Dừng dịch vụ MariaDB trên tất cả các nút:
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:
Tìm dòng sau:
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ụ:
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:
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.
Để 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.
Đ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:
Sau đó, khởi động MariaDB trên các nút khác với:
Cụm bây giờ sẽ hoạt động.
Phát hành câu lệnh sau để tạo cơ sở dữ liệu:
Sau đó kiểm tra cơ sở dữ liệu mới này trên tất cả các nút khác:
Lệnh trên sẽ trả về danh sách chứa 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ột cụm 3 nút khỏe mạnh sẽ trả về kết quả sau:
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ề:
Để 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.
- Đ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.
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.
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ã:
systemctl enable mariadb.service
Mã:
mysql_secure_installation
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
Mã:
$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf
Mã:
bind-address = 127.0.0.1
Mã:
bind-address = 0.0.0.0
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
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
Mã:
galera_new_cluster
Mã:
systemctl status mariadb.service
Mã:
systemctl start mariadb.service
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
Mã:
> CREATE DATABASE test0;> \q
Mã:
mysql -u root -p -e "SHOW DATABASES;"
Mã:
+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test0 |+--------------------+
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ã:
+---------------------------+----------------+| 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.
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 |+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
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 |+---------------------------+----------------------------------------------------------------+