ডেটাবেস ব্যাকআপ এবং রিকভারি হলো একটি ডেটাবেস অ্যাডমিনিস্ট্রেটর (DBA) যে দৈনন্দিন গুরুত্বপূর্ণ কাজগুলো করে তার মধ্যে একটি। একটি ডেটাবেস ব্যাকআপ হলো আপনার ডেটার একটি কপি যা ডেটা লস হলে ডেটা রিকভার করতে ব্যবহার করা যেতে পারে।
এই ব্লগে দেখানো হয়েছে কীভাবে Apache® Cassandra® ডেটাবেস ব্যাকআপ করতে হয় এবং ব্যর্থতার পর সেগুলো কীভাবে পুনরুদ্ধার করতে হয়।
ভূমিকা
যদিও Apache Cassandra ডিসেন্ট্রালাইজড, এটি একক এবং মাল্টি-নোড ব্যর্থতা সহন করতে পারে কোনো ব্যবসায়িক ডেটা হারানো ছাড়া, যতক্ষণ না ক্লাস্টারের নোডগুলোর মধ্যে অন্তত একটি নোডে ডেটা থাকে। যাইহোক, সেরা অনুশীলন হিসেবে, আপনার ডেটাবেসের জন্য ব্যাকআপ কনফিগার করা উচিত।
যেকোনো ব্যর্থতার ক্ষেত্রে, যেমন সম্পূর্ণ ক্লাস্টার রিবিল্ড, ডেটা ক্ষতিগ্রস্ততা, অকস্মাত ডেটা ডিলিশন, ইত্যাদি, আপনি ব্যাকআপ থেকে ডেটা রিকভার করতে পারেন এবং ন্যূনতম বা শূন্য প্রভাবের সাথে ব্যবসায়িক অপারেশন চালিয়ে যেতে পারেন।
আরো বেশি কোম্পানি বড় পরিমাণের ব্যবসায়িক ডেটা যেটাকে বড় ডেটা বলা হয় সেটি সফলভাবে ম্যানেজ করতে NoSQL ডেটাবেস যেমন Cassandra ব্যবহার করছে। Cassandra, যা অনেক বড় প্রতিষ্ঠান দ্বারা ব্যাপকভাবে ব্যবহৃত হয়, বড় ডেটা সাপোর্ট করার জন্য স্কেলেবিলিটি, ফল্ট-টলারেন্স, এবং কনসিস্টেন্সি নিশ্চিত করে।
Cassandra ডেটাবেস ব্যাকআপ এবং রিস্টোর
আপনি নিচের ইউটিলিটিগুলো ব্যবহার করে Cassandra ডেটাবেসের একটি স্ন্যাপশট নিতে পারেন এবং প্রয়োজনে সেটি রিস্টোর করতে পারেন:
nodetool(স্ন্যাপশট নেওয়ার জন্য)sstableloader(স্ন্যাপশট ব্যাকআপ রিস্টোর করার জন্য)
নিচের ছবিটি sstableloader ব্যবহার করে একটি ক্লাউড ক্লাস্টার থেকে Cassandra ক্লাস্টারে যাওয়ার প্রক্রিয়া ব্যাখ্যা করে:
ছবির উৎস: https://dzone.com/articles/using-casandras-sstable-bulk
ব্যাকআপ
নিচের উদাহরণে nodetool ব্যবহার করে Cassandra ডেটাবেস keyspace(users) এর একটি স্ন্যাপশট নেওয়া হয়েছে যার একটি টেবিল আছে employee নামের।
সোর্স 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
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
এটি নিচের উদাহরণের মতো একটি ব্যাকআপ স্ন্যাপশট তৈরি করে:
/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 ব্যাকআপ ডিরেক্টরির ফাইলগুলো আর্কাইভ করুন এবং টার ফাইলটি /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
ব্যাকআপ টার ফাইলটি নন-ডিফল্ট লোকেশনে কপি করার পর, employee টেবিলটি ড্রপ করুন।
নোট: Cassandra ডেটা সংজ্ঞায়িত পার্টিশন কী এবং রিপ্লিকেশন ফ্যাক্টর অনুযায়ী ক্লাস্টার জুড়ে বিতরণ করে, তাই আপনাকে এই ব্যাকআপ কমান্ডটি আপনার সকল নোড থেকে চালাতে হবে। এই উদাহরণে লিনাক্স® শেল স্ক্রিপ্ট 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 (users) স্ন্যাপশট ব্যাকআপ থেকে employee টেবিল রিস্টোর করতে, আপনাকে sstableloader ইউটিলিটি ব্যবহার করতে হবে। sstableloader ইউটিলিটি শুধু sstables-এর সেটকে প্রতিটি নোডে কপি করে না, বরং ক্লাস্টারের জন্য সংজ্ঞায়িত রিপ্লিকেশন কৌশল অনুযায়ী ডেটার উপযুক্ত অংশকে প্রতিটি নোডে ট্রান্সফারও করে। নোট করুন যে ডেটা রিস্টোর করার জন্য একটি খালি টেবিল থাকা প্রয়োজন নেই।
টার ফাইলটি 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
আপনি যে টেবিলটি রিস্টোর করতে যাচ্ছেন তার নাম দিয়ে ইউজার ডিরেক্টরির জন্য একটি সফ্ট লিংক তৈরি করুন।
$ 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-- 2 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-- 2 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db -rw-r--r-- 2 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32 -rw-r--r-- 2 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db -rw-r--r-- 2 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 ফাইল ব্যবহার করে টেবিল কাঠামো তৈরি করুন।
যখন আপনি keyspace-এর জন্য ব্যাকআপ এক্সিকিউট করেন, এটি schema.cql নামে একটি ফাইল জেনারেট করে যাতে keyspace-এ থাকা অবজেক্টগুলোর ডেটা ডেফিনিশন ল্যাঙ্গুয়েজ (DDL) থাকে।
schema.cql ব্যবহার করে একটি employee অবজেক্ট তৈরি করুন, যা ভুলে ড্রপ করা হয়েছিল।
$ 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 -pw passwrod -d
ডেটা রিস্টোর করতে নিচের কমান্ড ব্যবহার করুন:
$ 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
প্রতিটি নোডের জন্য এই ধাপগুলো পুনরাবৃত্তি করুন যাতে তাদের sstables থেকে ডেটা রিট্রিভ করা যায়।
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
employee টেবিলে ডেটা যাচাই করুন, যা আমরা ড্রপ করেছিলাম। পূর্বের কমান্ডটি পূর্বে নেওয়া ব্যাকআপ থেকে ডেটা রিস্টোর করেছিল। এখন আপনাকে ডেটা যাচাই করতে হবে সেটি সঠিকভাবে রিস্টোর হয়েছে কিনা।
$ 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 ডেটাবেসে একটি টেবিল ব্যাকআপ এবং রিস্টোর করতে হয়। যাইহোক, আপনার যদি একটি ফুল keyspace/ডেটাবেস রিস্টোর করতে হয়, তবে টেবিল রিস্টোর অংশ বাদ দিয়ে উপরের ধাপগুলো অনুসরণ করুন। আপনাকে keyspace পুনরায় তৈরি করতে হবে এবং sstableloader ব্যবহার করে ডেটা লোড করতে হবে।
সোর্স এবং টার্গেট ডেটাবেস ক্লাস্টারের নোডের সংখ্যা sstableloader-এর সাথে ম_entries নেই কারণ এটি ব্যাকআপ থেকে প্রতিটি sstables পড়ে। তারপর এটি ডেটাকে ক্লাস্টারে স্ট্রিম করে যখন ক্লাস্টারে সংজ্ঞায়িত রিপ্লিকেশন কৌশল অনুযায়ী ডেটা প্লেস করা হয়।
কোনো মন্তব্য বা প্রশ্ন করার জন্য ফিডব্যাক ট্যাব ব্যবহার করুন।
বিশেষজ্ঞ প্রশাসন, ব্যবস্থাপনা, এবং কনফিগারেশন দিয়ে আপনার এনভায়রনমেন্ট অপ্টিমাইজ করুন
Rackspace-এর অ্যাপ্লিকেশন সার্ভিসেস (RAS) বিশেষজ্ঞরা অ্যাপ্লিকেশনের একটি ব্যাপক পোর্টফোলিও জুড়ে নিচের প্রফেশনাল এবং ম্যানেজড সার্ভিসেস প্রদান করে:
- ই-কমার্স এবং ডিজিটাল অভিজ্ঞতা প্ল্যাটফর্ম
- এন্টারপ্রাইজ রিসোর্স প্ল্যানিং (ERP)
- বিজনেস ইন্টেলিজেন্স
- Salesforce কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট (CRM)
- ডেটাবেস
- ইমেইল হোস্টিং এবং প্রোডাক্টিভিটি
আমরা সরবরাহ করি:
- পক্ষপাতমুক্ত দক্ষতা: আমরা আপনার আধুনিকরণ যাত্রাকে সরল ও নির্দেশিত করি, তাৎক্ষণিক মান প্রদানকারী ক্ষমতাগুলোর ওপর ফোকাস করে।
- Fanatical Experience™: আমরা একটি প্রক্রিয়া-প্রথম, প্রযুক্তি-দ্বিতীয়® পদ্ধতিকে নিখুঁত প্রযুক্তিগত সহায়তার সাথে মিলিয়ে ব্যাপক সমাধান প্রদান করি।
- অতুলনীয় পোর্টফোলিও: আমরা ব্যাপক ক্লাউড অভিজ্ঞতা প্রয়োগ করে আপনাকে সঠিক প্রযুক্তি সঠিক ক্লাউডে বেছে নেওয়া এবং ডিপ্লয় করতে সাহায্য করি।
- চঞ্চল ডেলিভারি: আমরা আপনার যাত্রায় আপনি যেখানে আছেন সেখানে আপনাকে পেয়ে যাই এবং আমাদের সাফল্যকে আপনার সাথে সানجلة করি।
এখন চ্যাট করুন শুরু করতে।