การสำรองและกู้คืนฐานข้อมูลเป็นหนึ่งในกิจกรรมที่สำคัญในแต่ละวันที่ผู้ดูแลระบบฐานข้อมูล (DBA) ดำเนินการ การสำรองข้อมูลฐานข้อมูลคือสำเนาของข้อมูลของคุณที่สามารถใช้ในการกู้คืนข้อมูลในกรณีที่ข้อมูลสูญหาย
บล็อกนี้แสดงวิธีสำรองฐานข้อมูล Apache® Cassandra® และกู้คืนหลังจากเกิดความล้มเหลว
แนะนำตัว
แม้ว่า Apache Cassandra จะถูกกระจายอำนาจ แต่ก็สามารถทนต่อความล้มเหลวของโหนดเดียวและหลายโหนดโดยไม่สูญเสียข้อมูลทางธุรกิจใด ๆ ตราบใดที่หนึ่งในโหนดในคลัสเตอร์มีข้อมูล อย่างไรก็ตาม ตามแนวทางปฏิบัติที่ดีที่สุด คุณควรกำหนดค่าการสำรองข้อมูลสำหรับฐานข้อมูล
ในกรณีที่เกิดความล้มเหลว เช่น การสร้างคลัสเตอร์ใหม่ทั้งหมด ข้อมูลเสียหาย การลบข้อมูลโดยไม่ได้ตั้งใจ และอื่นๆ คุณสามารถกู้คืนข้อมูลจากการสำรองข้อมูลและดำเนินธุรกิจต่อได้โดยมีผลกระทบเพียงเล็กน้อยหรือไม่มีเลย
มีบริษัทจำนวนมากขึ้นเรื่อยๆ ที่ใช้ฐานข้อมูล NoSQL เช่น Cassandra เพื่อจัดการข้อมูลธุรกิจปริมาณมาก ซึ่งเป็นที่รู้จักกันอย่างแพร่หลายในชื่อ Big Data Cassandra ซึ่งใช้กันอย่างแพร่หลายในองค์กรสำคัญๆ หลายแห่ง ช่วยให้มั่นใจได้ถึงความสามารถในการปรับขนาด ความทนทานต่อข้อผิดพลาด และความสอดคล้องในการสนับสนุน Big Data
การสำรองและกู้คืนฐานข้อมูลของ Cassandra
คุณสามารถใช้ยูทิลิตีต่อไปนี้เพื่อถ่ายภาพสแน็ปช็อตของฐานข้อมูล Cassandra และกู้คืนได้เมื่อจำเป็น:
nodetool
(หากต้องการถ่ายภาพนิ่ง)sstableloader
(ในการกู้คืนข้อมูลสำรองสแน็ปช็อต)
รูปภาพต่อไปนี้แสดงการย้ายจากคลัสเตอร์ระบบคลาวด์ไปยัง Cassandracluster โดยใช้ sstableloader
:
ที่มาของรูปภาพ :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)
- ฐานข้อมูล
- อีเมลโฮสติ้งและประสิทธิภาพการทำงาน
เราจัดส่ง:
- ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
- ประสบการณ์สุดคลั่ง ™:เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
- ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
- ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ
แชทเลยเพื่อเริ่มต้น