Giới thiệu
Khi chạy Galera Cluster, một thực tế phổ biến là thêm một hoặc nhiều nô lệ không đồng bộ trong cùng một trung tâm dữ liệu hoặc trong một trung tâm dữ liệu khác. Điều này cung cấp cho chúng tôi một kế hoạch dự phòng với RTO thấp và với chi phí vận hành thấp. Trong trường hợp xảy ra sự cố không thể khắc phục trong cụm của chúng tôi, chúng tôi có thể nhanh chóng chuyển đổi dự phòng để các ứng dụng có thể tiếp tục có quyền truy cập vào dữ liệu.
Khi sử dụng kiểu thiết lập này, chúng ta không thể xây dựng lại cụm của mình từ bản sao lưu trước đó. Vì nô lệ không đồng bộ hiện là nguồn chân lý mới, chúng tôi cần xây dựng lại cụm từ đó.
Điều này không có nghĩa là chúng ta chỉ có một cách để làm, thậm chí có thể có một cách tốt hơn! Vui lòng cho chúng tôi đề xuất của bạn trong phần nhận xét ở cuối bài đăng này.
Cấu trúc liên kết
ClusterControl Topology View OnlineỞ trên, chúng ta có thể thấy một cấu trúc liên kết mẫu với Galera Cluster và một bản sao / nô lệ không đồng bộ.
Sơ đồ cơ sở dữ liệu 1Tiếp theo, chúng ta sẽ xem cách chúng ta có thể tạo lại cụm của mình, bắt đầu từ nô lệ, trong trường hợp tìm thấy thứ gì đó như sau:
Sơ đồ cơ sở dữ liệu 2 ClusterControl Topology View OfflineNếu chúng ta nhìn vào hình ảnh trước đó, chúng ta có thể thấy 3 nút Galera của chúng ta đang giảm. Nô lệ của chúng tôi không thể kết nối với Galera master nhưng nó đang ở trạng thái "Đang hoạt động".
Quảng bá Slave
Khi nô lệ của chúng tôi hoạt động bình thường, chúng tôi có thể quảng bá nó để làm chủ và chỉ các ứng dụng của chúng tôi vào nó. Đối với điều này, chúng tôi phải tắt tham số chỉ đọc trong máy chủ của mình và đặt lại cấu hình máy chủ.
Trong nô lệ của chúng tôi (mysql1):
mysql> SET GLOBAL read_only=0;
Query OK, 0 rows affected (0.00 sec)
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> RESET SLAVE;
Query OK, 0 rows affected (0.18 sec)
Tạo cụm mới
Tiếp theo, để bắt đầu khôi phục cụm bị lỗi, chúng tôi sẽ tạo một Cụm Galera mới. Điều này có thể dễ dàng thực hiện thông qua ClusterControl ClusterControl, vui lòng cuộn xuống dưới blog này để xem cách thực hiện.
Khi chúng tôi đã triển khai cụm Galera mới của mình, chúng tôi sẽ có một cái gì đó giống như sau:
Sơ đồ cơ sở dữ liệu 3Nhân rộng
Chúng tôi phải đảm bảo rằng chúng tôi đã định cấu hình các thông số sao chép.
Đối với các nút Galera (galera1, galera2, galera3):
server_id=<ID> # Different value in each node
binlog_format=ROW
log_bin = /var/lib/mysql-binlog/binlog
log_slave_updates = ON
gtid_mode = ON
enforce_gtid_consistency = true
relay_log = relay-bin
expire_logs_days = 7
Đối với nút Chính (mysql1):
server_id=<ID> # Different value in each node
binlog_format=ROW
log_bin=binlog
log_slave_updates=1
gtid_mode=ON
enforce_gtid_consistency=1
relay_log=relay-bin
expire_logs_days=7
read_only=ON
sync_binlog=1
report_host=<HOSTNAME or IP> # Local server
Để nô lệ mới của chúng tôi (galera1) kết nối với chủ mới của chúng tôi (mysql1), chúng tôi phải tạo một người dùng có quyền sao chép trong chủ của chúng tôi.
Trong trang chủ mới của chúng tôi (mysql1):
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
Lưu ý:Chúng tôi có thể thay thế "%" bằng IP của nút Galera Cluster sẽ là nô lệ của chúng tôi, trong ví dụ của chúng tôi là galera1.
Sao lưu
Nếu chúng ta không có nó, chúng ta phải tạo một bản sao lưu nhất quán cho master của chúng ta (mysql1) và tải nó vào Galera Cluster mới của chúng ta. Đối với điều này, chúng ta có thể sử dụng công cụ XtraBackup hoặc mysqldump. Hãy xem cả hai tùy chọn.
Trong ví dụ của chúng tôi, chúng tôi sử dụng cơ sở dữ liệu sakila có sẵn để thử nghiệm.
Công cụ XtraBackup
Chúng tôi tạo bản sao lưu trong bản chính mới (mysql1). Trong trường hợp của chúng tôi, chúng tôi gửi nó đến thư mục cục bộ / root / backup:
$ innobackupex /root/backup/
Chúng ta phải nhận được thông báo:
180705 22:08:14 completed OK!
Chúng tôi nén bản sao lưu và gửi nó đến nút sẽ là nô lệ của chúng tôi (galera1):
$ cd /root/backup
$ tar zcvf 2018-07-05_22-08-07.tar.gz 2018-07-05_22-08-07
$ scp /root/backup/2018-07-05_22-08-07.tar.gz galera1:/root/backup/
Trong galera1, giải nén bản sao lưu:
$ tar zxvf /root/backup/2018-07-05_22-08-07.tar.gz
Chúng tôi dừng cụm (nếu nó được bắt đầu). Đối với điều này, chúng tôi dừng các dịch vụ mysql của 3 nút:
$ service mysql stop
Trong galera1, chúng tôi đổi tên thư mục dữ liệu của mysql và tải bản sao lưu:
$ mv /var/lib/mysql /var/lib/mysql.bak
$ innobackupex --copy-back /root/backup/2018-07-05_22-08-07
Chúng ta phải nhận được thông báo:
180705 23:00:01 completed OK!
Chúng tôi chỉ định các quyền chính xác trên thư mục dữ liệu:
$ chown -R mysql.mysql /var/lib/mysql
Sau đó, chúng ta phải khởi tạo cụm.
Khi nút đầu tiên được khởi tạo, chúng tôi phải khởi động dịch vụ MySQL cho các nút còn lại, loại bỏ mọi bản sao trước đó của tệp grastate.dat, sau đó xác minh rằng dữ liệu của chúng tôi đã được cập nhật.
$ rm /var/lib/mysql/grastate.dat
$ service mysql start
Lưu ý:Xác minh rằng người dùng được sử dụng bởi XtraBackup được tạo trong nút khởi tạo của chúng tôi và giống nhau trong mỗi nút.
mysqldump
Nói chung, chúng tôi không khuyên bạn nên làm điều đó với mysqldump, vì nó có thể khá chậm với một khối lượng lớn dữ liệu. Nhưng nó là một giải pháp thay thế để thực hiện nhiệm vụ.
Chúng tôi tạo bản sao lưu trong bản chính mới (mysql1):
$ mysqldump -uroot -p --single-transaction --skip-add-locks --triggers --routines --events --databases sakila > /root/backup/sakila_dump.sql
Chúng tôi nén nó và gửi nó đến nút nô lệ của chúng tôi (galera1):
$ gzip /root/backup/sakila_dump.sql
$ scp /root/backup/sakila_dump.sql.gz galera1:/root/backup/
Chúng tôi tải kết xuất vào galera1.
$ gunzip /root/backup/sakila_dump.sql.gz
$ mysql -p < /root/backup/sakila_dump.sql
Khi kết xuất được tải trong galera1, chúng tôi phải khởi động lại dịch vụ MySQL trên các nút còn lại, xóa tệp grastate.dat và xác minh rằng chúng tôi đã cập nhật dữ liệu của mình.
$ rm /var/lib/mysql/grastate.dat
$ service mysql start
Bắt đầu Replication Slave
Bất kể tùy chọn nào chúng tôi chọn, XtraBackup hay mysqldump, nếu mọi thứ diễn ra tốt đẹp, trong bước này, chúng tôi đã có thể bật tính năng sao chép trong nút sẽ là nô lệ của chúng tôi (galera1).
$ mysql> CHANGE MASTER TO MASTER_HOST = 'mysql1', MASTER_PORT = 3306, MASTER_USER = 'slave_user', MASTER_PASSWORD = 'slave_password', MASTER_AUTO_POSITION = 1;
$ mysql> START SLAVE;
Chúng tôi xác minh rằng nô lệ đang hoạt động:
mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Tại thời điểm này, chúng tôi có một cái gì đó như sau:
Sơ đồ cơ sở dữ liệu 4Sau khi NewGalera1 được cập nhật, chúng tôi có thể trỏ lại ứng dụng đến cụm galera mới của mình và định cấu hình lại bản sao không đồng bộ.
ClusterControl
Như chúng tôi đã đề cập trước đó, với ClusterControl, chúng tôi có thể thực hiện một số tác vụ được đề cập ở trên bằng một vài cú nhấp chuột đơn giản. Nó cũng có các tùy chọn khôi phục tự động, cho cả các nút và cụm. Hãy xem một số tác vụ mà nó có thể hỗ trợ.
Triển khai ClusterControl 1Để thực hiện triển khai, chỉ cần chọn tùy chọn “Triển khai cụm cơ sở dữ liệu” và làm theo hướng dẫn xuất hiện.
Triển khai ClusterControl 2Chúng ta có thể lựa chọn giữa các loại công nghệ và nhà cung cấp khác nhau. Chúng tôi phải chỉ định Người dùng, Khóa hoặc Mật khẩu và cổng để kết nối bằng SSH với máy chủ của chúng tôi. Chúng tôi cũng cần tên cho cụm mới của mình và nếu chúng tôi muốn ClusterControl cài đặt phần mềm và cấu hình tương ứng cho chúng tôi.
Triển khai ClusterControl 3Sau khi thiết lập thông tin truy cập SSH, chúng ta phải xác định các nút trong cụm của chúng ta. Chúng tôi cũng có thể chỉ định kho lưu trữ nào sẽ sử dụng. Chúng tôi cần thêm máy chủ của mình vào cụm mà chúng tôi sẽ tạo.
Chúng tôi có thể theo dõi trạng thái tạo cụm mới của mình từ trình theo dõi hoạt động ClusterControl.
Ngoài ra, chúng ta có thể nhập cụm hoặc cơ sở dữ liệu hiện tại của mình theo các bước tương tự. Trong trường hợp này, ClusterControl sẽ không cài đặt phần mềm cơ sở dữ liệu vì đã có một cơ sở dữ liệu đang chạy.
ClusterControl Thêm Replication SalveĐể thêm nô lệ nhân bản, bạn cần nhấp vào Hành động cụm, chọn Thêm nô lệ nhân bản và thêm thông tin truy cập SSH của máy chủ mới. ClusterControl sẽ kết nối với máy chủ để tạo các cấu hình cần thiết cho hành động này.
ClusterControl Bật tính năng ghi nhật ký nhị phânĐể biến một hoặc nhiều nút Galera thành máy chủ chính (theo nghĩa là tạo các binlog), bạn có thể chuyển đến Tác vụ nút và chọn Bật ghi nhật ký nhị phân.
Sao lưu ClusterControlCác bản sao lưu có thể được định cấu hình bằng XtraBackup (đầy đủ hoặc tăng dần) và mysqldump, đồng thời bạn có các tùy chọn khác như tải bản sao lưu lên đám mây, mã hóa, nén, lên lịch và hơn thế nữa.
Khôi phục ClusterControlĐể khôi phục bản sao lưu, hãy chuyển đến tab Sao lưu và chọn tùy chọn Khôi phục, sau đó bạn chọn máy chủ bạn muốn khôi phục.
ClusterControl Change Replication MasterNếu bạn có một nô lệ và bạn muốn thay đổi cái chính hoặc xây dựng lại bản sao, bạn có thể đi tới Node Actions và chọn tùy chọn.
Kết luận
Như chúng ta có thể thấy, chúng ta có một số cách để đạt được mục tiêu của mình, một số cách phức tạp hơn, một số cách khác thân thiện với người dùng hơn, nhưng với bất kỳ cách nào trong số chúng, bạn có thể tạo lại một cụm từ một nô lệ không đồng bộ. Xtrabackup sẽ khôi phục nhanh hơn đối với khối lượng dữ liệu lớn hơn. Để đề phòng lỗi của toán tử (ví dụ:BẢNG DROP bị lỗi), bạn cũng có thể sử dụng trình phụ bị trễ để bạn hy vọng có thời gian để ngăn tuyên bố lan truyền.
Chúng tôi hy vọng rằng thông tin này hữu ích và bạn không bao giờ phải sử dụng nó trong sản xuất;)