Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

การสำรองและกู้คืน Apache Cassandra

การสำรองและกู้คืนฐานข้อมูลเป็นหนึ่งในกิจกรรมที่สำคัญในแต่ละวันที่ผู้ดูแลระบบฐานข้อมูล (DBA) ดำเนินการ การสำรองข้อมูลฐานข้อมูลคือสำเนาของข้อมูลของคุณที่สามารถใช้ในการกู้คืนข้อมูลในกรณีที่ข้อมูลสูญหาย

บล็อกนี้แสดงวิธีสำรองฐานข้อมูล Apache® Cassandra® และกู้คืนหลังจากเกิดความล้มเหลว

แนะนำตัว

แม้ว่า Apache Cassandra จะถูกกระจายอำนาจ แต่ก็สามารถทนต่อความล้มเหลวของโหนดเดียวและหลายโหนดโดยไม่สูญเสียข้อมูลทางธุรกิจใด ๆ ตราบใดที่หนึ่งในโหนดในคลัสเตอร์มีข้อมูล อย่างไรก็ตาม ตามแนวทางปฏิบัติที่ดีที่สุด คุณควรกำหนดค่าการสำรองข้อมูลสำหรับฐานข้อมูล

ในกรณีที่เกิดความล้มเหลว เช่น การสร้างคลัสเตอร์ใหม่ทั้งหมด ข้อมูลเสียหาย การลบข้อมูลโดยไม่ได้ตั้งใจ และอื่นๆ คุณสามารถกู้คืนข้อมูลจากการสำรองข้อมูลและดำเนินธุรกิจต่อได้โดยมีผลกระทบเพียงเล็กน้อยหรือไม่มีเลย

มีบริษัทจำนวนมากขึ้นเรื่อยๆ ที่ใช้ฐานข้อมูล NoSQL เช่น Cassandra เพื่อจัดการข้อมูลธุรกิจปริมาณมาก ซึ่งเป็นที่รู้จักกันอย่างแพร่หลายในชื่อ Big Data Cassandra ซึ่งใช้กันอย่างแพร่หลายในองค์กรสำคัญๆ หลายแห่ง ช่วยให้มั่นใจได้ถึงความสามารถในการปรับขนาด ความทนทานต่อข้อผิดพลาด และความสอดคล้องในการสนับสนุน Big Data

การสำรองและกู้คืนฐานข้อมูลของ Cassandra

คุณสามารถใช้ยูทิลิตีต่อไปนี้เพื่อถ่ายภาพสแน็ปช็อตของฐานข้อมูล Cassandra และกู้คืนได้เมื่อจำเป็น:

  • nodetool (หากต้องการถ่ายภาพนิ่ง)
  • sstableloader (ในการกู้คืนข้อมูลสำรองสแน็ปช็อต)

รูปภาพต่อไปนี้แสดงการย้ายจากคลัสเตอร์ระบบคลาวด์ไปยัง Cassandracluster โดยใช้ sstableloader :

การสำรองและกู้คืน Apache Cassandra

ที่มาของรูปภาพ :https://dzone.com/articles/using-casandras-sstable-bulk

สำรองข้อมูล

ตัวอย่างต่อไปนี้ใช้ nodetool เพื่อถ่ายภาพของฐานข้อมูล Cassandrakeyspace(users) พร้อมโต๊ะชื่อ พนักงาน .

ที่มาของรายละเอียดคลัสเตอร์ Cassandra:

$ 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

ใช้คำสั่งต่อไปนี้เพื่อสำรองข้อมูล คีย์สเปซ :

$ 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

สิ่งนี้จะสร้างสแน็ปช็อตสำรองตามที่แสดงในตัวอย่างต่อไปนี้:

/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

ตอนนี้ เก็บ /snapshot สำรองไฟล์ไดเรกทอรีและย้าย tarfile ไปยัง /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

หลังจากคัดลอกไฟล์ tar สำรองไปยังตำแหน่งที่ไม่ใช่ค่าเริ่มต้น ให้วาง พนักงาน ตาราง

หมายเหตุ : Cassandra แจกจ่ายข้อมูลตามคีย์พาร์ติชั่นที่กำหนดและปัจจัยการจำลองแบบทั่วทั้งคลัสเตอร์ ดังนั้นคุณต้องเรียกใช้คำสั่งสำรองข้อมูลนี้จากโหนดทั้งหมดของคุณ ตัวอย่างนี้ใช้สคริปต์เชลล์ของ Linux® ใน crontab ซึ่งสำรองโหนดทั้งหมดในครั้งเดียว

$ 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"

คืนค่า

ในการกู้คืนพนักงาน ตารางจาก keyspace (ผู้ใช้) สำรองข้อมูลสแน็ปช็อต คุณต้องใช้ sstableloader คุณประโยชน์. sstableloader ยูทิลิตีไม่เพียงแต่คัดลอกชุดของ sstables ไปยังแต่ละโหนด แต่ยังถ่ายโอนส่วนที่เหมาะสมของข้อมูลไปยังทุกโหนดตามกลยุทธ์การจำลองแบบที่กำหนดไว้สำหรับคลัสเตอร์ โปรดทราบว่าไม่จำเป็นต้องมีตารางว่างในการกู้คืนข้อมูล

ใช้ขั้นตอนต่อไปนี้เพื่อกู้คืนไฟล์ tar เป็น สำรองข้อมูล/ผู้ใช้ :

$ 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

สร้างซอฟต์ลิงค์สำหรับไดเร็กทอรีผู้ใช้ด้วยชื่อของตารางที่คุณจะกู้คืน

$ 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

สร้างโครงสร้างตารางโดยใช้ .cql ไฟล์ที่สร้างขึ้นโดยการสำรองข้อมูลสแนปชอต

เมื่อคุณดำเนินการสำรองข้อมูลสำหรับ คีย์สเปซ มันสร้างไฟล์ชื่อschema.cql ที่มี data definition language (DDL) ของอ็อบเจ็กต์ที่อยู่ใน keyspace .

ใช้ schema.cql เพื่อสร้างออบเจกต์ของพนักงานซึ่งตกหล่นโดยไม่ได้ตั้งใจ

$ 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

กู้คืนข้อมูลจากสแน็ปช็อตโดยใช้ sstableloader ซึ่งอ่านทุกsstables จากการสำรองข้อมูลและสตรีมข้อมูลไปยังคลัสเตอร์ จากนั้นจะถ่ายโอนข้อมูลส่วนที่เกี่ยวข้องไปยังแต่ละโหนดตามกลยุทธ์การจำลองแบบที่กำหนดไว้ในคลัสเตอร์

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

ใช้คำสั่งต่อไปนี้เพื่อกู้คืนข้อมูล:

$  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

ทำซ้ำขั้นตอนเหล่านี้สำหรับทุกโหนดเพื่อดึงข้อมูลจากความเสถียรของโหนด

ซ่อมแซมข้อมูลโดยใช้ nodetool repair ซึ่งเปรียบเทียบการจำลองข้อมูลทั้งหมดที่จัดเก็บบนโหนดที่คำสั่งรันและอัพเดตแต่ละเรพพลิกาเป็นเวอร์ชันใหม่ล่าสุด

$ 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

ตรวจสอบข้อมูลใน พนักงาน ตารางที่เราลดลง คำสั่งก่อนหน้านี้กู้คืนข้อมูลจากข้อมูลสำรองที่คุณทำไว้ก่อนหน้านี้ ตอนนี้ คุณต้องตรวจสอบความถูกต้องของข้อมูลเพื่อดูว่ามีการกู้คืนอย่างถูกต้องหรือไม่

$ 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 อย่างไรก็ตาม หากคุณต้องการกู้คืนคีย์สเปซ/ฐานข้อมูลแบบเต็ม ให้ใช้ขั้นตอนก่อนหน้าโดยไม่มีส่วนการคืนค่าตาราง คุณต้องสร้างคีย์สเปซ .ขึ้นใหม่ และโหลดข้อมูลโดยใช้ sstableloader .

จำนวนโหนดในคลัสเตอร์ฐานข้อมูลต้นทางและเป้าหมายไม่สำคัญกับ sstableloader เพราะมันอ่านแต่ละ sstables จากการสำรองข้อมูลจากนั้นจะสตรีมข้อมูลไปยังคลัสเตอร์ในขณะที่วางข้อมูลตามกลยุทธ์การจำลองแบบที่กำหนดไว้ในคลัสเตอร์

ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม

เพิ่มประสิทธิภาพสภาพแวดล้อมของคุณด้วยการดูแลระบบ การจัดการ และการกำหนดค่าจากผู้เชี่ยวชาญ

บริการแอปพลิเคชันของ Rackspace(RAS) ผู้เชี่ยวชาญจะให้บริการแบบมืออาชีพและที่มีการจัดการในแอปพลิเคชันที่หลากหลาย:

  • แพลตฟอร์มอีคอมเมิร์ซและประสบการณ์ดิจิทัล
  • การวางแผนทรัพยากรองค์กร (ERP)
  • ระบบธุรกิจอัจฉริยะ
  • การจัดการลูกค้าสัมพันธ์ของ Salesforce (CRM)
  • ฐานข้อมูล
  • อีเมลโฮสติ้งและประสิทธิภาพการทำงาน

เราจัดส่ง:

  • ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
  • ประสบการณ์สุดคลั่ง ™:เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
  • ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
  • ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ

แชทเลยเพื่อเริ่มต้น