अमेज़ॅन रिलेशनल डेटाबेस सर्विस (एडब्ल्यूएस आरडीएस) एक पूरी तरह से प्रबंधित डेटाबेस सेवा है जो कई डेटाबेस इंजनों का समर्थन कर सकती है। समर्थित लोगों में PostgreSQL, MySQL और MariaDB हैं। दूसरी ओर, ClusterControl, एक डेटाबेस प्रबंधन और स्वचालन सॉफ्टवेयर है जो PostgreSQL, MySQL और MariaDB ओपन सोर्स डेटाबेस के लिए बैकअप हैंडलिंग का भी समर्थन करता है।
जबकि कई कंपनियों द्वारा आरडीएस को व्यापक रूप से अपनाया गया है, कुछ को यह पता नहीं हो सकता है कि उनकी पॉइंट-इन-टाइम रिकवरी (पीआईटीआर) कैसे काम करती है और इसका उपयोग कैसे किया जा सकता है।
अमेज़ॅन आरडीएस द्वारा उपयोग किए जाने वाले कई डेटाबेस इंजनों में विशिष्ट समय से पुनर्स्थापित करते समय विशेष विचार होते हैं, और इस ब्लॉग में हम कवर करेंगे कि यह पोस्टग्रेएसक्यूएल, माईएसक्यूएल और मारियाडीबी के लिए कैसे काम करता है। हम यह भी तुलना करेंगे कि यह ClusterControl में PITR फ़ंक्शन के साथ कैसे भिन्न है।
प्वाइंट-इन-टाइम रिकवरी (PITR) क्या है
यदि आप अभी तक डिजास्टर रिकवरी प्लानिंग (DRP) या बिजनेस कंटीन्यूटी प्लानिंग (BCP) से परिचित नहीं हैं, तो आपको पता होना चाहिए कि PITR डेटाबेस प्रबंधन के लिए महत्वपूर्ण मानक प्रथाओं में से एक है। जैसा कि हमारे पिछले ब्लॉग में बताया गया है, प्वाइंट इन टाइम रिकवरी (PITR) में अतीत में किसी भी क्षण डेटाबेस को पुनर्स्थापित करना शामिल है। ऐसा करने में सक्षम होने के लिए, हमें एक पूर्ण बैकअप को पुनर्स्थापित करने की आवश्यकता होगी और फिर पीआईटीआर उन सभी परिवर्तनों को लागू करके होता है जो एक विशिष्ट बिंदु पर आप पुनर्प्राप्त करना चाहते हैं।
एडब्ल्यूएस आरडीएस के साथ प्वाइंट-इन-टाइम रिकवरी (पीआईटीआर)
एडब्ल्यूएस आरडीएस पीआईटीआर को पारंपरिक तरीके से अलग-अलग तरीके से संभालता है जो एक ऑन-प्रिमाइसेस डेटाबेस में आम है। अंतिम परिणाम एक ही अवधारणा साझा करता है, लेकिन एडब्ल्यूएस आरडीएस के साथ पूर्ण बैकअप एक स्नैपशॉट है, फिर यह पीआईटीआर (जो एस 3 में संग्रहीत है) को लागू करता है, और फिर एक नया (अलग) डेटाबेस इंस्टेंस लॉन्च करता है।
सामान्य तरीके से आपको PITR लागू करने से पहले अपने पूर्ण बैकअप के लिए या तो एक तार्किक (pg_dump, mysqldump, mydumper का उपयोग करके) या एक भौतिक (Percona Xtrabackup, Mariabackup, pg_basebackup, pg_backrest) का उपयोग करना होगा।
AWS RDS के लिए आपको एक नया DB इंस्टेंस लॉन्च करने की आवश्यकता होगी, जबकि पारंपरिक दृष्टिकोण आपको PITR को उसी डेटाबेस नोड पर लचीले ढंग से स्टोर करने की अनुमति देता है जहां बैकअप लिया गया था या एक अलग (मौजूदा) DB इंस्टेंस को लक्षित करता है। पुनर्प्राप्ति या एक नए DB उदाहरण की आवश्यकता है।
आपके AWS RDS इंस्टेंस के बनने पर स्वचालित बैकअप चालू हो जाएगा। अमेज़ॅन आरडीएस स्वचालित रूप से आपके डेटा का पूर्ण दैनिक स्नैपशॉट करता है। स्नैपशॉट शेड्यूल को निर्माण के दौरान आपकी पसंदीदा बैकअप विंडो पर सेट किया जा सकता है। जबकि स्वचालित बैकअप चालू होते हैं, AWS आपके सभी DB अपडेट को रिकॉर्ड करते हुए हर 5 मिनट में Amazon S3 में लेनदेन लॉग को भी कैप्चर करता है। एक बार जब आप पॉइंट-इन-टाइम रिकवरी शुरू करते हैं, तो आपके डीबी इंस्टेंस को विशिष्ट अनुरोधित समय पर पुनर्स्थापित करने के लिए लेनदेन लॉग सबसे उपयुक्त दैनिक बैकअप पर लागू होते हैं।
AWS RDS के साथ PITR कैसे लागू करें
PITR को तीन अलग-अलग तरीकों से लगाया जा सकता है। डीबी इंस्टेंस उपलब्ध होने के बाद आप एडब्ल्यूएस प्रबंधन कंसोल, एडब्ल्यूएस सीएलआई, या अमेज़ॅन आरडीएस एपीआई का उपयोग कर सकते हैं। आपको यह भी ध्यान रखना चाहिए कि लेन-देन लॉग हर पांच मिनट में कैप्चर किए जाते हैं जो तब AWS S3 में संग्रहीत होते हैं।
एक बार जब आप एक डीबी इंस्टेंस को पुनर्स्थापित करते हैं, तो डिफ़ॉल्ट डीबी सुरक्षा समूह (एसजी) नए डीबी इंस्टेंस पर लागू होता है। यदि आपको कस्टम db SG की आवश्यकता है, तो आप इसे स्पष्ट रूप से AWS प्रबंधन कंसोल, AWS CLI संशोधित-डीबी-इंस्टेंस कमांड, या Amazon RDS API ModifyDBInstance ऑपरेशन का उपयोग करके DB इंस्टेंस उपलब्ध होने के बाद स्पष्ट रूप से परिभाषित कर सकते हैं।
PITR के लिए आवश्यक है कि आपको DB इंस्टेंस के लिए सबसे नवीनतम रीस्टोरेबल समय की पहचान करने की आवश्यकता है। ऐसा करने के लिए, आप एडब्ल्यूएस सीएलआई वर्णन-डीबी-इंस्टेंस कमांड का उपयोग कर सकते हैं और डीबी इंस्टेंस के लिए नवीनतम रीस्टोरेबलटाइम फ़ील्ड में दिए गए मान को देख सकते हैं। उदाहरण के लिए,
[[email protected] ~]# aws rds describe-db-instances --db-instance-identifier database-s9s-mysql|grep LatestRestorableTime
"LatestRestorableTime": "2020-05-08T07:25:00+00:00",
एडब्ल्यूएस कंसोल के साथ पीआईटीआर लागू करना
एडब्ल्यूएस कंसोल में पीआईटीआर लागू करने के लिए, एडब्ल्यूएस कंसोल में लॉगिन करें → अमेज़ॅन आरडीएस पर जाएं → डेटाबेस → अपने वांछित डीबी इंस्टेंस का चयन करें (या क्लिक करें), फिर क्रिया पर क्लिक करें। नीचे देखें,
एक बार जब आप PITR के माध्यम से पुनर्स्थापित करने का प्रयास करते हैं, तो कंसोल UI आपको सूचित करेगा कि क्या है सबसे नवीनतम आराम करने योग्य समय जिसे आप सेट कर सकते हैं। आप नवीनतम पुनर्स्थापना योग्य समय का उपयोग कर सकते हैं या अपनी इच्छित लक्ष्य तिथि और समय निर्दिष्ट कर सकते हैं। नीचे देखें:
इसे फॉलो करना काफी आसान है लेकिन इसके लिए आपको ध्यान देना होगा और इसे भरना होगा। नए इंस्टेंस को लॉन्च करने के लिए आपको वांछित विशिष्टताओं की आवश्यकता है।
एडब्ल्यूएस सीएलआई के साथ पीआईटीआर लागू करना
एडब्ल्यूएस सीएलआई का उपयोग करना काफी आसान हो सकता है, खासकर यदि आपको इसे अपने सीआई/सीडी पाइपलाइन के लिए अपने ऑटोमेशन टूल्स के साथ शामिल करने की आवश्यकता है। ऐसा करने के लिए, आप बस से शुरू कर सकते हैं,
[[email protected] ~]# aws rds restore-db-instance-to-point-in-time \
> --source-db-instance-identifier database-s9s-mysql \
> --target-db-instance-identifier database-s9s-mysql-pitr \
> --restore-time 2020-05-08T07:30:00+00:00
{
"DBInstance": {
"DBInstanceIdentifier": "database-s9s-mysql-pitr",
"DBInstanceClass": "db.t2.micro",
"Engine": "mysql",
"DBInstanceStatus": "creating",
"MasterUsername": "admin",
"DBName": "s9s",
"AllocatedStorage": 18,
"PreferredBackupWindow": "00:00-00:30",
"BackupRetentionPeriod": 7,
"DBSecurityGroups": [],
"VpcSecurityGroups": [
{
"VpcSecurityGroupId": "sg-xxxxx",
"Status": "active"
}
],
"DBParameterGroups": [
{
"DBParameterGroupName": "default.mysql5.7",
"ParameterApplyStatus": "in-sync"
}
],
"DBSubnetGroup": {
"DBSubnetGroupName": "default",
"DBSubnetGroupDescription": "default",
"VpcId": "vpc-f91bdf90",
"SubnetGroupStatus": "Complete",
"Subnets": [
{
"SubnetIdentifier": "subnet-exxxxx",
"SubnetAvailabilityZone": {
"Name": "us-east-2a"
},
"SubnetStatus": "Active"
},
{
"SubnetIdentifier": "subnet-xxxxx",
"SubnetAvailabilityZone": {
"Name": "us-east-2c"
},
"SubnetStatus": "Active"
},
{
"SubnetIdentifier": "subnet-xxxxxx",
"SubnetAvailabilityZone": {
"Name": "us-east-2b"
},
"SubnetStatus": "Active"
}
]
},
"PreferredMaintenanceWindow": "fri:06:01-fri:06:31",
"PendingModifiedValues": {},
"MultiAZ": false,
"EngineVersion": "5.7.22",
"AutoMinorVersionUpgrade": true,
"ReadReplicaDBInstanceIdentifiers": [],
"LicenseModel": "general-public-license",
"OptionGroupMemberships": [
{
"OptionGroupName": "default:mysql-5-7",
"Status": "pending-apply"
}
],
"PubliclyAccessible": true,
"StorageType": "gp2",
"DbInstancePort": 0,
"StorageEncrypted": false,
"DbiResourceId": "db-XXXXXXXXXXXXXXXXX",
"CACertificateIdentifier": "rds-ca-2019",
"DomainMemberships": [],
"CopyTagsToSnapshot": false,
"MonitoringInterval": 0,
"DBInstanceArn": "arn:aws:rds:us-east-2:042171833148:db:database-s9s-mysql-pitr",
"IAMDatabaseAuthenticationEnabled": false,
"PerformanceInsightsEnabled": false,
"DeletionProtection": false,
"AssociatedRoles": []
}
}
इन दोनों दृष्टिकोणों को डेटाबेस इंस्टेंस बनाने या तैयार करने में समय लगता है जब तक कि यह आपके AWS RDS कंसोल में डेटाबेस इंस्टेंस की सूची में उपलब्ध और देखने योग्य नहीं होगा।
एडब्ल्यूएस आरडीएस पीआईटीआर सीमाएं
AWS RDS का उपयोग करते समय आप एक विक्रेता के रूप में उनसे जुड़े होते हैं। अपने कार्यों को उनके सिस्टम से बाहर ले जाना परेशानी भरा हो सकता है। यहां कुछ चीजें हैं जिन पर आपको विचार करना है:
- AWS RDS का उपयोग करते समय वेंडर-लॉक इन का स्तर
- PITR के माध्यम से पुनर्प्राप्त करने के लिए आपके एकमात्र विकल्प के लिए आपको RDS पर चलने वाला एक नया इंस्टेंस लॉन्च करना होगा
- किसी भी तरह से आप PITR प्रक्रिया का उपयोग करके किसी ऐसे बाहरी नोड को पुनर्प्राप्त नहीं कर सकते हैं जो RDS में नहीं है
- आपको उनके टूल और सुरक्षा ढांचे के बारे में जानने और उनसे परिचित होने की आवश्यकता है।
ClusterControl के साथ PITR कैसे लागू करें
ClusterControl PITR को एक सरल, फिर भी सीधे, फैशन में निष्पादित करता है (लेकिन इसके लिए आपको पूर्वापेक्षाएँ सक्षम या सेट करनी होंगी ताकि PITR का उपयोग किया जा सके)। जैसा कि पहले चर्चा की गई है, क्लस्टर कंट्रोल के लिए PITR AWS RDS से अलग तरीके से काम करता है। यहाँ एक सूची है जहाँ PITR को ClusterControl का उपयोग करके लागू किया जा सकता है (संस्करण 1.7.6 के अनुसार):
- उपलब्ध बैकअप विधि समाधानों के आधार पर पूर्ण बैकअप के बाद लागू होता है जो हम PostgreSQL, MySQL और MariaDB डेटाबेस के लिए समर्थन करते हैं।
- PostgreSQL के लिए, केवल pg_basebackup बैकअप विधि समर्थित है और PITR के साथ काम करने के लिए संगत है
- MySQL या MariaDB के लिए, केवल xtrabackup/mariabackup बैकअप विधि समर्थित है और PITR के साथ काम करने के लिए संगत है
- MySQL या MariaDB डेटाबेस के लिए लागू, PITR तभी लागू होता है जब पूर्ण बैकअप का स्रोत नोड पुनर्प्राप्त किया जाने वाला लक्ष्य नोड हो।
- MySQL या MariaDB डेटाबेस के लिए आवश्यक है कि आपके पास बाइनरी लॉगिंग सक्षम हो
- PostgreSQL डेटाबेस के लिए लागू, PITR केवल सक्रिय मास्टर/प्राथमिक पर लागू होता है और इसके लिए आवश्यक है कि आपको WAL संग्रह को सक्षम करना होगा।
- PITR केवल मौजूदा पूर्ण बैकअप को पुनर्स्थापित करते समय ही लागू किया जा सकता है
ClusterControl के लिए बैकअप प्रबंधन उन वातावरणों के लिए लागू होता है जहां डेटाबेस पूरी तरह से प्रबंधित नहीं होते हैं और उन्हें SSH एक्सेस की आवश्यकता होती है जो AWS RDS से बिल्कुल अलग है। हालांकि वे एक ही परिणाम साझा करते हैं जो डेटा को पुनर्प्राप्त करना है, क्लस्टर नियंत्रण में मौजूद बैकअप समाधान एडब्ल्यूएस आरडीएस में लागू नहीं हो सकते हैं। ClusterControl प्रबंधन और निगरानी के लिए भी RDS का समर्थन नहीं करता है।
PostgreSQL में PITR के लिए ClusterControl का उपयोग करना
जैसा कि पहले उल्लेख किया गया है कि PITR का लाभ उठाने के लिए, आपको WAL संग्रह को सक्षम करना होगा। इसे नीचे दिखाए गए अनुसार गियर आइकन पर क्लिक करके प्राप्त किया जा सकता है:
चूंकि PITR पूर्ण बैकअप के ठीक बाद लागू किया जा सकता है, आप केवल चला सकते हैं इस सुविधा को बैकअप सूची के अंतर्गत ढूंढें जहां आप किसी मौजूदा बैकअप को पुनर्स्थापित करने का प्रयास कर सकते हैं। ऐसा करने के लिए, स्क्रीनशॉट का क्रम आपको दिखाएगा कि यह कैसे करना है:
फिर इसे उसी होस्ट पर पुनर्स्थापित करें जहां बैकअप का स्रोत लिया गया है ,
फिर बस तारीख और समय निर्दिष्ट करें,
एक बार जब आप सेट हो जाते हैं और दिनांक और समय निर्दिष्ट कर देते हैं, तो ClusterControl पुनर्स्थापित हो जाएगा बैकअप हो जाने के बाद बैकअप के बाद PITR लागू करें। आप नीचे की तरह ही कार्य गतिविधि लॉग का निरीक्षण करके भी इसे सत्यापित कर सकते हैं,
MySQL/MariaDB में PITR के लिए ClusterControl का उपयोग करना
MySQL या MariaDB के लिए PITR, PostgreSQL के लिए हमारे ऊपर दिए गए दृष्टिकोण से भिन्न नहीं है। हालाँकि, कोई WAL संग्रह तुल्यता नहीं है और न ही कोई बटन या विकल्प है जिसे आप सेट कर सकते हैं जो कि PITR कार्यक्षमता को सक्षम करने के लिए आवश्यक है। चूंकि MySQL और MariaDB की आवश्यकता है कि ClusterControl में बाइनरी लॉग का उपयोग करके एक PITR लागू किया जा सकता है, इसे मैनेज टैब के तहत नियंत्रित किया जा सकता है। नीचे देखें:
फिर संबंधित बूलियन मान के साथ log_bin वैरिएबल निर्दिष्ट करें। उदाहरण के लिए,
एक बार जब log_bin नोड पर सेट हो जाए, तो सुनिश्चित करें कि आपके पास पूर्ण बैकअप उसी नोड पर लिया जाता है जहां आप PITR की प्रक्रिया भी लागू करेंगे। यह पूर्वापेक्षाओं में पहले कहा गया है। वैकल्पिक रूप से, आप केवल कॉन्फ़िगरेशन फ़ाइलों (/etc/my.cnf या /etc/mysql/my.cnf) को संपादित कर सकते हैं और [mysqld] अनुभाग के अंतर्गत log_bin=ON जोड़ सकते हैं, उदाहरण के लिए।
जब बाइनरी लॉग सक्षम होते हैं और एक पूर्ण बैकअप उपलब्ध होता है, तो आप PITR प्रक्रिया को उसी तरह कर सकते हैं जैसे PostgreSQL UI लेकिन विभिन्न क्षेत्रों के साथ जिन्हें आप भर सकते हैं। आप दिनांक और समय निर्दिष्ट कर सकते हैं या बिनलॉग की फ़ाइल और स्थिति (या x और y स्थिति) के आधार पर निर्दिष्ट करें। नीचे देखें:
ClusterControl PITR सीमाएं
यदि आप सोच रहे हैं कि आप ClusterControl में PITR के लिए क्या कर सकते हैं और क्या नहीं, तो नीचे दी गई सूची है:
- कोई मौजूदा s9s CLI टूल नहीं है जो PITR प्रक्रिया का समर्थन करता है, इसलिए आपकी CI/CD पाइपलाइन को स्वचालित या एकीकृत करना संभव नहीं है।
- बाहरी नोड्स के लिए कोई PITR समर्थन नहीं
- कोई PITR समर्थन नहीं जब बैकअप का स्रोत लक्ष्य नोड से भिन्न होता है
- इस तरह की कोई आवधिक अधिसूचना नहीं है कि आप PITR के लिए आवेदन करने की सबसे नवीनतम अवधि क्या है
निष्कर्ष
दोनों टूल में लक्षित परिवेश के लिए अलग-अलग दृष्टिकोण और अलग-अलग समाधान हैं। मुख्य बात यह है कि एडब्ल्यूएस आरडीएस का अपना पीआईटीआर है जो तेज है, लेकिन यह तभी लागू होता है जब आपका डेटाबेस आरडीएस के तहत होस्ट किया जाता है और आप एक विक्रेता लॉक इन से बंधे होते हैं।
ClusterControl आपको किसी भी डेटा सेंटर या ऑन-प्रिमाइसेस पर PITR प्रक्रिया को स्वतंत्र रूप से लागू करने की अनुमति देता है, जब तक कि किसी और चीज को ध्यान में रखा जाता है। इसका लक्ष्य डेटा को पुनर्प्राप्त करना है। इसकी सीमाओं के बावजूद, यह इस बात पर आधारित है कि आप जिस वास्तुशिल्प वातावरण का उपयोग कर रहे हैं, उसके अनुसार आप समाधान का उपयोग कैसे करेंगे।