Appearance
Cassandra là một hệ thống database phân tán, được thiết kế để xử lý lượng dữ liệu lớn trên nhiều máy chủ.
Để đảm bảo tính sẵn sàng cao và bảo mật dữ liệu, việc lập kế hoạch và chiến lược backup và phục hồi rất là quan trọng.
1. Chiến lược backup
Trong cassandra chúng ta có 2 kiểu backup.
1.1 Backup Snapshot (Ảnh chụp nhanh)
- Snapshot là bản sao lưu toàn bộ dữ liệu tại một thời điểm nhất định. Trong Cassandra, khi một snapshot được thực hiện thì sẽ đóng băng dữ liệu trên đĩa, đảm bảo không có hành động ghi, sửa,xóa trong quá trình này.
Cách thực hiện
Sử dụng lệnh nodetool snapshot
Lệnh này sẽ tạo ra 1 bản snapshot chứa tất cả các file SStable hiện tại vào folder snapshot trên mỗi node.
Khi lệnh bắt đầu chạy, Cassandra sẽ thực hiện đóng băng hành động ghi và cập nhật, xóa, sau đó nó sẽ flush tất cả các dữ liệu ở memtable đến SStable, đảm bảo rằng tất cả dữ liệu đã được ghi vào SStable trước khi tạo snapshot.
Sau đó, Cassandra sẽ tạo ra một bản sao của các file SStable trong thư mục snapshot. Các file này sẽ có tên giống như các file SStable gốc nhưng sẽ được đặt trong thư mục snapshot.
Nếu bạn muốn tạo snapshot mà không flush memtables, bạn có thể sử dụng tùy chọn --skip-flus
h (chỉ có sẵn từ Cassandra 3.4 trở lên). Tuy nhiên, việc này sẽ khiến snapshot của bạn không chứa dữ liệu đang nằm trong memtables.
Sau khi lệnh nodetool snapshot
hoàn thành, bạn sẽ có một bản sao lưu của tất cả các file SStable trong thư mục snapshot. Bạn có thể sao chép các file này đến một vị trí khác để lưu trữ lâu dài.
1.2 Incremental Backups
1.2.1 Incremental Backups là gì ?
Kể từ khi phiên bản 2.1, Cassandra hỗ trợ tính năng sao lưu gia tăng (incremental backups). Tính năng này cho phép bạn sao lưu các thay đổi mới nhất kể từ lần tạo Snapshot cuối cùng, thay vì sao lưu toàn bộ dữ liệu mỗi lần.
Sau khi bạn tạo một snapshot cuối, các incremental Backups sẽ lưu trữ chỉ các thay đổi sau bản backup snapshot cuối đó.
Tại sao cần có incremental backup?
Thay vì phải backup snapshot 1 cách thường xuyên, incremental backup sẽ chỉ lưu những thay đổi kể từ lần backup gần nhất. Điều này sẽ giảm không gian lưu trữ.
Việc tạo snapshot cũng rất tốn kém nó còn làm đóng băng hệ thống 1 thời gian dài. Incremental backup tốn ít chi phí hệ thống về thời gian cần thiết để sao lưu.
Tác động đến chiến lược backup
Với việc sử dụng incremental backup, bạn có thể giảm tần suất tạo snapshot đầy đủ, chỉ cần tạo snapshot định kỳ và sử dụng incremental backup để sao lưu các thay đổi hàng ngày hoặc hàng giờ.
Với snapshot chúng ta có thể định kỳ backup mỗi tháng hoặc năm bởi vì điều này tốn rất nhiều chi phí, còn với incremental chúng ta có thể định kỳ backup hằng ngày. Điều này sẽ làm giảm dủi do mất dữ liệu.
Cách thực hiện incremental backup
Để thực hiện incremental backup, bạn cần cấu hình Cassandra để bật tính năng này. Trong tệp cấu hình cassandra.yaml
, bạn cần đặt incremental_backups
thành true
.
yaml
incremental_backups: true
Bởi vì incremental backup sẽ chạy sau khi snapshot được tạo, nên bạn cần tạo snapshot trước khi thực hiện incremental backup.
bash
nodetool snapshot -t "backup_name" keyspace_name
Sau khi snapshot được tạo, Cassandra sẽ tự động tạo hard links cho các SSTable mới trong thư mục backups
của mỗi keyspace. Các hard links này sẽ chỉ chứa các thay đổi kể từ lần snapshot cuối cùng.
1.3 Lưu trữ Backup
Để đảm bảo an toàn cho dữ liệu, bạn nên sao chép các snapshot và incremental backups đến một vị trí lưu trữ bên ngoài, chẳng hạn như một hệ thống lưu trữ đám mây hoặc một máy chủ lưu trữ khác.
1.4 Lịch trình Backup
Để đảm bảo tính nhất quán và an toàn của dữ liệu, bạn nên thiết lập một lịch trình backup định kỳ. Ví dụ:
- Snapshot: Mỗi tháng một lần hoặc mỗi quý một lần, tùy thuộc vào tần suất thay đổi dữ liệu.
- Incremental Backup: Hằng ngày hoặc hằng giờ, tùy thuộc vào tần suất thay đổi dữ liệu và yêu cầu về độ an toàn.
- Lưu trữ: Sao chép các snapshot và incremental backups đến một vị trí lưu trữ bên ngoài sau mỗi lần backup.
- Kiểm tra: Thực hiện kiểm tra định kỳ để đảm bảo rằng các bản sao lưu có thể phục hồi thành công.
- Xóa cũ: Xóa các bản sao lưu cũ sau một khoảng thời gian nhất định để tiết kiệm không gian lưu trữ.
- Giám sát: Sử dụng các công cụ giám sát để theo dõi tình trạng của các bản sao lưu và cảnh báo khi có sự cố xảy ra.
- Báo cáo: Gửi báo cáo định kỳ về tình trạng backup cho các bên liên quan để đảm bảo rằng mọi người đều biết về tình trạng backup và phục hồi dữ liệu.
2 Chiến lược phục hồi
Phục hồi dữ liệu từ các bản sao lưu là một phần quan trọng trong chiến lược bảo mật dữ liệu. Dưới đây là các bước để phục hồi dữ liệu từ snapshot và incremental backups trong Cassandra:
2.1 Phục hồi từ Snapshot
Để phục hồi dữ liệu từ một snapshot, bạn cần thực hiện các bước sau:
- Xác định Snapshot: Xác định snapshot mà bạn muốn phục hồi. Bạn có thể sử dụng lệnh
nodetool listsnapshots
để liệt kê các snapshot hiện có. Cần có bản snapshot đầy đủ và không bị lỗi để phục hồi dữ liệu. - Sao chép Snapshot: Sao chép các file snapshot từ thư mục snapshot đến thư mục dữ liệu của keyspace tương ứng. Bạn có thể sử dụng lệnh
cp
hoặcrsync
để sao chép các file này. - Khởi động lại Cassandra: Sau khi sao chép các file snapshot, bạn cần khởi động lại Cassandra để nó nhận diện các file mới. Bạn có thể sử dụng lệnh
systemctl restart cassandra
hoặcservice cassandra restart
tùy thuộc vào hệ điều hành của bạn. - Kiểm tra dữ liệu: Sau khi Cassandra khởi động lại, bạn có thể kiểm tra dữ liệu đã được phục hồi bằng cách sử dụng các công cụ quản lý dữ liệu như
cqlsh
hoặc các công cụ khác. - Xóa Snapshot Cũ: Nếu bạn không cần snapshot cũ nữa, bạn có thể xóa nó để giải phóng không gian lưu trữ. Bạn có thể sử dụng lệnh
nodetool clearsnapshot
để xóa tất cả các snapshot hoặcrm -rf
để xóa một snapshot cụ thể. - Kiểm tra tính toàn vẹn: Sau khi phục hồi, hãy kiểm tra tính toàn vẹn của dữ liệu để đảm bảo rằng không có lỗi xảy ra trong quá trình phục hồi.
- Cập nhật ứng dụng: Nếu ứng dụng của bạn sử dụng dữ liệu từ keyspace đã phục hồi, hãy đảm bảo rằng ứng dụng được cập nhật để sử dụng dữ liệu mới.
- Giám sát: Theo dõi hệ thống sau khi phục hồi để đảm bảo rằng không có vấn đề phát sinh và hiệu suất của hệ thống vẫn ổn định.
- Báo cáo: Gửi báo cáo về quá trình phục hồi cho các bên liên quan để đảm bảo rằng mọi người đều biết về tình trạng phục hồi dữ liệu.
2.2 Phục hồi từ Incremental Backups
Để phục hồi dữ liệu từ incremental backups, bạn cần thực hiện các bước sau:
- Phục hồi Snapshot gần nhất: Trước khi phục hồi từ incremental backups, bạn nên phục hồi từ snapshot gần nhất trước khi các incremental backups được tạo. Điều này sẽ đảm bảo rằng bạn có một cơ sở dữ liệu ổn định trước khi áp dụng các thay đổi incremental.
- Xác định Incremental Backup: Xác định incremental backup mà bạn muốn phục hồi. Bạn có thể sử dụng lệnh
ls
để liệt kê các file incremental backups trong thư mụcbackups
. - Sao chép Incremental Backup: Sao chép các file incremental backup từ thư mục
backups
đến thư mục dữ liệu của keyspace tương ứng. Bạn có thể sử dụng lệnhcp
hoặcrsync
để sao chép các file này. - Khởi động lại Cassandra: Sau khi sao chép các file incremental backup, bạn cần khởi động lại Cassandra để nó nhận diện các file mới. Bạn có thể sử dụng lệnh
systemctl restart cassandra
hoặcservice cassandra restart
tùy thuộc vào hệ điều hành của bạn. - Kiểm tra dữ liệu: Sau khi Cassandra khởi động lại, bạn có thể kiểm tra dữ liệu đã được phục hồi bằng cách sử dụng các công cụ quản lý dữ liệu như
cqlsh
hoặc các công cụ khác. - Xóa Incremental Backup Cũ: Nếu bạn không cần incremental backup cũ nữa, bạn có thể xóa nó để giải phóng không gian lưu trữ. Bạn có thể sử dụng lệnh
rm -rf
để xóa một incremental backup cụ thể. - Kiểm tra tính toàn vẹn: Sau khi phục hồi, hãy kiểm tra tính toàn vẹn của dữ liệu để đảm bảo rằng không có lỗi xảy ra trong quá trình phục hồi.
- Cập nhật ứng dụng: Nếu ứng dụng của bạn sử dụng dữ liệu từ keyspace đã phục hồi, hãy đảm bảo rằng ứng dụng được cập nhật để sử dụng dữ liệu mới.
- Giám sát: Theo dõi hệ thống sau khi phục hồi để đảm bảo rằng không có vấn đề phát sinh và hiệu suất của hệ thống vẫn ổn định.
- Báo cáo: Gửi báo cáo về quá trình phục hồi cho các bên liên quan để đảm bảo rằng mọi người đều biết về tình trạng phục hồi dữ liệu.
3. Kết luận
Việc lập kế hoạch và thực hiện chiến lược backup và phục hồi dữ liệu là rất quan trọng trong việc bảo vệ dữ liệu trong Cassandra. Snapshot và incremental backups cung cấp các phương pháp hiệu quả để sao lưu và phục hồi dữ liệu, giúp đảm bảo tính sẵn sàng cao và bảo mật dữ liệu.