Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Cơ Sở Dữ Liệu

Thành Thạo Sao Lưu & Khôi Phục Apache Cassandra: Hướng Dẫn Hoàn Chỉnh Cho DBA

Giới thiệu

Sao lưu và khôi phục cơ sở dữ liệu là một trong những hoạt động hàng ngày quan trọng mà quản trị viên cơ sở dữ liệu (DBA) thực hiện. Bản sao lưu cơ sở dữ liệu là một bản sao của dữ liệu của bạn có thể được sử dụng để khôi phục dữ liệu trong trường hợp mất dữ liệu.

Blog này chỉ cho bạn cách sao lưu cơ sở dữ liệu Apache® Cassandra® và khôi phục chúng sau khi xảy ra sự cố.

Sao lưu và khôi phục cơ sở dữ liệu Cassandra

Bạn có thể sử dụng các tiện ích sau để chụp snapshot của cơ sở dữ liệu Cassandra và khôi phục nó khi cần:

  • nodetool (Để chụp snapshot)
  • sstableloader (Để khôi phục bản sao lưu snapshot)

Hình ảnh sau minh họa việc di chuyển từ cụm đám mây sang cụm Cassandra bằng cách sử dụng sstableloader:

Thành Thạo Sao Lưu & Khôi Phục Apache Cassandra: Hướng Dẫn Hoàn Chỉnh Cho DBA

Nguồn hình ảnh: https://dzone.com/articles/using-casandras-sstable-bulk

Sao lưu

Ví dụ sau sử dụng nodetool để chụp snapshot của cơ sở dữ liệu Cassandra keyspace(users) với một bảng gọi là employee.

Chi tiết cụm Cassandra nguồn:

$ nodetool -u cassandra -pw ******** -h localhost status Datacenter: us-central1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.128.0.2 121.52 KiB 256 63.3% 5957997f-7471-4c21-bead-37a6604812e2 f UN 10.128.0.3 92.22 KiB 256 68.0% 87c2a663-a965-4675-b5ed-c4a46d77c796 f UN 10.128.0.4 225.3 KiB 256 68.8% 8e12557f-be00-4387-bff3-ef51f431b9a0 f

Sử dụng lệnh sau để sao lưu keyspace:

$ nodetool -h localhost -u cassandra -pw ****** snapshot users -t "users-201904201800" Requested creating snapshot(s) for [users] with snapshot name [users-201904201800] and options {skipFlush=false} Snapshot directory: users-201904201800

Điều này tạo ra một bản sao lưu snapshot như ví dụ sau:

/bitnami/cassandra/data/data/users/employee-c1319df0636211e9a0e3570eb7f8fd5f/snapshots/users-201904201800 $ ls -ltr total 44 -rw-r--r-- 2 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db -rw-r--r-- 2 cassandra cassandra 56 Apr 20 12:05 md-1-big-Summary.db -rw-r--r-- 2 cassandra cassandra 32 Apr 20 12:05 md-1-big-Index.db -rw-r--r-- 2 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db -rw-r--r-- 2 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32 -rw-r--r-- 2 cassandra cassandra 43 Apr 20 12:05 md-1-big-CompressionInfo.db -rw-r--r-- 2 cassandra cassandra 4683 Apr 20 12:05 md-1-big-Statistics.db -rw-r--r-- 2 cassandra cassandra 92 Apr 20 12:05 md-1-big-TOC.txt -rw-r--r-- 1 cassandra cassandra 31 Apr 20 12:05 manifest.json -rw-r--r-- 1 cassandra cassandra 865 Apr 20 12:05 schema.cql $ date Sat Apr 20 12:08:21 UTC 2019

Bây giờ, nén thư mục /snapshot bản sao lưu và di chuyển file tar đến thư mục /bitnami/Cassandra/data/data/backup.

$ tar -cvf users-201904201800.tar *.* manifest.json md-1-big-CompressionInfo.db md-1-big-Data.db md-1-big-Digest.crc32 md-1-big-Filter.db md-1-big-Index.db md-1-big-Statistics.db md-1-big-Summary.db md-1-big-TOC.txt schema.cql $ ls -ltr total 64 -rw-r--r-- 2 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db -rw-r--r-- 2 cassandra cassandra 56 Apr 20 12:05 md-1-big-Summary.db -rw-r--r-- 2 cassandra cassandra 32 Apr 20 12:05 md-1-big-Index.db -rw-r--r-- 2 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db -rw-r--r-- 2 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32 -rw-r--r-- 2 cassandra cassandra 43 Apr 20 12:05 md-1-big-CompressionInfo.db -rw-r--r-- 2 cassandra cassandra 4683 Apr 20 12:05 md-1-big-Statistics.db -rw-r--r-- 2 cassandra cassandra 92 Apr 20 12:05 md-1-big-TOC.txt -rw-r--r-- 1 cassandra cassandra 31 Apr 20 12:05 manifest.json -rw-r--r-- 1 cassandra cassandra 865 Apr 20 12:05 schema.cql -rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:22 users-201904201800.tar cp *.tar /bitnami/cassandra/data/data/backup. /bitnami/cassandra/data/data/backup $ ls -ltr -rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:23 users-201904201800.tar

Sau khi sao chép file tar bản sao lưu đến vị trí không mặc định, xóa bảng employee.

LƯU Ý: Cassandra phân phối dữ liệu dựa trên khóa phân vùng và yếu tố nhân bản được định nghĩa trên toàn cụm, vì vậy bạn phải chạy lệnh sao lưu này từ tất cả các node của bạn. Ví dụ này sử dụng shell script Linux® trong crontab, sao lưu tất cả các node cùng một lúc.

$ cqlsh -u cassandra -p ******* Connected to Test_Cassandra at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cassandra@cqlsh> use users; cassandra@cqlsh:users> select * from employee; emp_id | employee_address | employee_name --------+------------------+--------------- 8796 | Singapore | Joy 5647 | London | Mike 3452 | Canada | Nancy 6453 | China | John (4 rows) cassandra@cqlsh:users> drop table employee; cassandra@cqlsh:users> select * from employee; InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table employee"

Khôi phục

Để khôi phục bảng employee từ bản sao lưu snapshot keyspace (users), bạn phải sử dụng tiện ích sstableloader. Tiện ích sstableloader không chỉ sao chép tập hợp sstables đến mỗi node mà còn truyền phần dữ liệu thích hợp đến mọi node dựa trên chiến lược nhân bản được định nghĩa cho một cụm. Lưu ý rằng không cần phải có một bảng trống để khôi phục dữ liệu.

Sử dụng các bước sau để khôi phục file tar vào backup/users:

$ pwd /bitnami/cassandra/data/data/backup/users $ ls -ltr total 20 -rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:23 users-201904201800.tar $ tar -xvf *.tar manifest.json md-1-big-CompressionInfo.db md-1-big-Data.db md-1-big-Digest.crc32 md-1-big-Filter.db md-1-big-Index.db md-1-big-Statistics.db md-1-big-Summary.db md-1-big-TOC.txt schema.cql

Tạo liên kết mềm cho thư mục user với tên của bảng bạn sẽ khôi phục.

$ ln -s /bitnami/cassandra/data/data/backup/users employee $ ls -ltr total 64 -rw-r--r-- 1 cassandra cassandra 865 Apr 20 12:05 schema.cql -rw-r--r-- 1 cassandra cassandra 92 Apr 20 12:05 md-1-big-TOC.txt -rw-r--r-- 1 cassandra cassandra 56 Apr 20 12:05 md-1-big-Summary.db -rw-r--r-- 1 cassandra cassandra 4683 Apr 20 12:05 md-1-big-Statistics.db -rw-r--r-- 1 cassandra cassandra 32 Apr 20 12:05 md-1-big-Index.db -rw-r--r-- 1 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db -rw-r--r-- 1 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32 -rw-r--r-- 1 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db -rw-r--r-- 1 cassandra cassandra 43 Apr 20 12:05 md-1-big-CompressionInfo.db -rw-r--r-- 1 cassandra cassandra 31 Apr 20 12:05 manifest.json -rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:23 users-201904201800.tar lrwxrwxrwx 1 cassandra cassandra 41 Apr 20 15:56 employee -> /bitnami/cassandra/data/data/backup/users

Tạo cấu trúc bảng bằng cách sử dụng file .cql được tạo bởi bản sao lưu snapshot.

Khi bạn thực hiện sao lưu cho keyspace, nó tạo ra một file gọi là schema.cql chứa ngôn ngữ định nghĩa dữ liệu (DDL) của các đối tượng nằm trong keyspace.

Sử dụng schema.cql để tạo đối tượng employee, đã bị xóa nhầm.

$ cqlsh -u cassandra -p ******** -f schema.cql Warnings: dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 $ cqlsh -u cassandra -p ******* -f schema.cql

Khôi phục dữ liệu từ snapshot bằng cách sử dụng sstableloader, đọc mọi sstables từ bản sao lưu và truyền dữ liệu vào cụm. Sau đó nó truyền phần dữ liệu liên quan đến mỗi node dựa trên chiến lược nhân bản được định nghĩa trong cụm.

Syntax: sstableloader -u <username> -pw passwrod -d <hostname> <employee table softlink name with location>

Sử dụng lệnh sau để khôi phục dữ liệu:

$ sstableloader -u cassandra -pw ******** -d cassandra-cluster-1-node-0 /bitnami/cassandra/data/data/backup/users/employee Established connection to initial hosts Opening sstables and calculating sections to stream Streaming relevant part of /bitnami/cassandra/data/data/backup/users/md-1-big-Data.db to [/10.128.0.2, /10.128.0.3, /10.128.0.4] progress: [/10.128.0.2]0:0/1 0 % [/10.128.0.3]0:0/1 0 % [/10.128.0.4]0:1/1 100% total: 33% 0.032KiB/s (avg: 0.032KiB/s) progress: [/10.128.0.2]0:0/1 0 % [/10.128.0.3]0:0/1 0 % [/10.128.0.4]0:1/1 100% total: 33% 0.000KiB/s (avg: 0.031KiB/s) progress: [/10.128.0.2]0:0/1 0 % [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 66% 0.113KiB/s (avg: 0.050KiB/s) progress: [/10.128.0.2]0:1/1 100% [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 100% 85.129KiB/s (avg: 0.074KiB/s) progress: [/10.128.0.2]0:1/1 100% [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 100% 0.000KiB/s (avg: 0.073KiB/s) progress: [/10.128.0.2]0:1/1 100% [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 100% 0.000KiB/s (avg: 0.073KiB/s) Summary statistics: Connections per host : 1 Total files transferred : 3 Total bytes transferred : 0.393KiB Total duration : 5346 ms Average transfer rate : 0.073KiB/s Peak transfer rate : 0.074KiB/s

Lặp lại các bước này cho mọi node để lấy dữ liệu từ sstables của chúng.

Sửa chữa dữ liệu bằng cách sử dụng nodetool repair, so sánh tất cả các bản sao của dữ liệu được lưu trữ trên node nơi lệnh chạy và cập nhật mỗi bản sao lên phiên bản mới nhất.

$ nodetool repair -u Cassandra -pw ******** [2019-04-21 07:59:14,701] Starting repair command #1 (5b123ad0-640b-11e9-a0e3-570eb7f8fd5f), repairing keyspace users with repair options (parallelism: parallel, primary range: false, incremental: true, job threads: 1, ColumnFamilies: [], dataCenters: [], hosts: [], # of ranges: 768, pull repair: false) [2019-04-21 07:59:16,450] Repair completed successfully [2019-04-21 07:59:16,451] Repair command #1 finished in 1 second [2019-04-21 07:59:16,460] Replication factor is 1. No repair is needed for keyspace 'system_auth' [2019-04-21 07:59:16,474] Starting repair command #2 (5c22e780-640b-11e9-a0e3-570eb7f8fd5f), repairing keyspace system_traces with repair options (parallelism: parallel, primary range: false, incremental: true, job threads: 1, ColumnFamilies: [], dataCenters: [], hosts: [], # of ranges: 513, pull repair: false) finished (progress: 1%) [2019-04-21 07:59:17,653] Repair completed successfully [2019-04-21 07:59:17,653] Repair command #2 finished in 1 second

Xác thực dữ liệu vào bảng employee, mà chúng ta đã xóa. Lệnh trước đã khôi phục dữ liệu từ bản sao lưu bạn đã thực hiện trước đó. Bây giờ bạn cần xác thực dữ liệu để xem nó đã được khôi phục đúng cách chưa.

$ cqlsh -u cassandra -p ******** Connected to Test_Cassandra at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cassandra@cqlsh> use users; cassandra@cqlsh:users> select * from employee; emp_id | employee_address | employee_name --------+------------------+--------------- 8796 | Singapore | Joy 5647 | London | Mike 3452 | Canada | Nancy 6453 | China | John (4 rows)

Kết luận

Trong bài viết này, bạn đã học cách sao lưu và khôi phục một bảng vào cơ sở dữ liệu Cassandra. Tuy nhiên, nếu bạn cần khôi phục toàn bộ keyspace/cơ sở dữ liệu, hãy sử dụng các bước trước đó mà không cần phần khôi phục bảng. Bạn phải tạo lại keyspace và tải dữ liệu bằng cách sử dụng sstableloader.

Số lượng node trong cụm cơ sở dữ liệu nguồn và đích không quan trọng với sstableloader vì nó đọc từng sstables từ bản sao lưu. Sau đó, nó truyền dữ liệu vào cụm trong khi đặt dữ liệu theo chiến lược nhân bản được định nghĩa trong cụm.

Sử dụng tab Feedback để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.

Tối ưu hóa môi trường của bạn với quản trị, quản lý và cấu hình chuyên gia

Các chuyên gia Dịch vụ Ứng dụng của Rackspace (RAS) cung cấp các dịch vụ chuyên nghiệp và được quản lý sau đây trên danh mục ứng dụng rộng:

  • Nền tảng Thương mại điện tử và Trải nghiệm Kỹ thuật số
  • Lập kế hoạch Nguồn lực Doanh nghiệp (ERP)
  • Business Intelligence
  • Salesforce Quản trị Quan hệ Khách hàng (CRM)
  • Cơ sở dữ liệu
  • Lưu trữ Email và Năng suất

Chúng tôi mang lại:

  • Chuyên môn kiến nghị: Chúng tôi đơn giản hóa và hướng dẫn hành trình hiện đại hóa của bạn, tập trung vào các khả năng mang lại giá trị tức thì.
  • Fanatical Experience™: Chúng tôi kết hợp phương pháp Quy trình trước. Công nghệ sau.® với hỗ trợ kỹ thuật chuyên dụng để cung cấp giải pháp toàn diện.
  • Danh mục không đối thủ: Chúng tôi áp dụng kinh nghiệm đám mây rộng lớn để giúp bạn chọn và triển khai công nghệ phù hợp trên đám mây phù hợp.
  • Giao hàng nhanh chóng: Chúng tôi gặp bạn ở đâu bạn đang ở trong hành trình và điều chỉnh thành công của chúng tôi cho phù hợp với của bạn.

Trò chuyện ngay để bắt đầu.