Npm mysql đồng bộ
Nối chuỗi bài MySQL Toàn tập, lần này Cloudcraft giới thiệu bài hướng dẫn cấu hình MySQL Replication Master-Master sử dụng GTID. Mô hình Master-Master này cho phép bạn Viết/Đọc đồng thời trên cả hai nút chứ không chỉ một nút Viết/Đọc và một nút Chỉ đọc như Master-Slave. Đây là một biến thể tuy không chính thống (rủ ro rất lớn cho tính nhất quán của dữ liệu) nhưng lại rất phổ biến của MySQL Replication Show
Tl;DR
LendingÝ tưởng của mô hình này cũng khá đơn giản, thay vì mỗi nút MySQL chỉ đóng 1 vai trò Master hoặc Slave, thì ta có thể để mỗi nút đóng cả 2 vai trò cùng lúc. Một nút vừa là Master vừa là Slave của nút khác. Bạn có thể để một nút đang hoạt động, nút còn sao lưu. Khi xảy ra sự cố, chỉ việc trỏ lại Ứng dụng về nút Sao lưu, không cần phải tương tác với MySQL để thăng cấp từ Slave Read-only thành Master như cách làm Master-Slave bình thường. Khi kết hợp với Keepalived + LVS/Haproxy, việc chuyển đổi dự phòng hoàn toàn có thể tự động (tự động chứ không chắc chắn là minh bạch 😀 ) Tuy nhiên, mô hình này vẫn chỉ là MySQL không đồng bộ và không có cơ chế đảm bảo dữ liệu đã được đồng bộ hóa. Viết thành công cũng như có phát sinh confict trên tất cả các nút còn lại hoặc không. Làm như vậy, mô hình này chỉ nên áp dụng ở mô hệ thống quy mô nhỏ cho phù hợp. Nếu có thể đáp ứng yêu cầu cấu hình tối thiểu của các giải pháp MySQL Đồng bộ như Galera Cluster, NDB Cluster,… bạn nên sử dụng các giải pháp này để mở rộng phần Viết cũng như HA cho hệ thống Do bài viết trước Cloudcraft đã giới thiệu Binlog, bài viết này sẽ theo cách GTID. Với Binlog, bạn cần quan tâm File Log & Position cho phù hợp. GTID ra đời nhằm giảm thiểu độ phức tạp ở đây. GTID viết tắt của Global Transaction ID. Với mỗi sự thay đổi trong 1 node MySQL sẽ phát sinh một ID. ID được đánh mã theo format Hình minh họa trong bài viết này là mô hình 2 nút, bạn hoàn toàn có thể mở rộng lên các nút 3,4,5,…. Tuy nhiên, như đã đề cập, nếu câu trả lời là tài nguyên dư thừa, bạn nên chuyển đổi thành dạng MySQL Đồng bộ Bước 1. bật GTID trên cả hai nútThêm vào /etc/my. cnf gtid_mode=on binlog_format = MIXED enforce_gtid_consistency = ON gtid_mode = ON log_slave_updates = ON relay_log_info_repository = TABLE relay_log_recovery = 1 relay_log_purge = 1 Khởi động lại mysql và kiểm tra lại biến gtid_mode systemctl restart mysql mysql -e 'show global variables like "gtid_mode"' +---------------+-------+ | Variable_name | Value | +---------------+-------+ | gtid_mode | ON | +---------------+-------+
Bước 2. Sao lưu dữ liệu và khôi phục trên các nútĐể cấu hình sao chép từ nút này (nguồn) sang nút kia (đích), lần sao lưu dữ liệu từ nút này (nguồn) và khôi phục sang nút kia (đích) To backup all data (source), you could use mysqldump ________số 8_______ các tùy chọn nâng cao hơn các giới hạn. chỉ sao lưu một số cơ sở dữ liệu nhất định (–database), sao lưu nhưng không kèm theo các trình kích hoạt, thủ tục lưu trữ,… bạn tham khảo tại link. Ngoài ra, bạn có thể sử dụng các công cụ khác như Xtrabackup Sau đó, sao chép tệp kết xuất sang và khôi phục ra trên nút còn lại (đích) scp source-ip:/backup.sql ./ mysql -e "reset master" mysql < backup.sql
Bước 3. Cấu hình GTID ReplicationCác lần lượt trên các nút, cấu hình như sau
systemctl restart mysql0 systemctl restart mysql1 systemctl restart mysql2
Check back by command mysql -e "show slave status\G" | grep Running Nếu cả Slave_IO_Running và Slave_SQL_Running đều là CÓ, thì chúc mừng bạn đã cấu hình thành công, nếu không, hãy kiểm tra Nhật ký MySQL để biết thêm chi tiết lỗi lặp lại Bước 3 trên tất cả các nút Sau khi cấu hình xong, bạn có thể thử Create Database, Create User, Create Table, Insert data,… để kiểm tra quá trình đồng bộ Như vậy, ta đã gạch đầu dòng đầu tiên “Bản sao MySQL hai chiều” trong hình minh họa ở đầu bài viết. Ở bài viết sau, Cloudcraft sẽ mở rộng HA bằng cách kết hợp Keepalived |