Služba Amazon Relational Database Service (AWS RDS) je plně spravovaná databázová služba, která může podporovat více databázových strojů. Mezi podporované patří PostgreSQL, MySQL a MariaDB. ClusterControl je na druhé straně software pro správu a automatizaci databází, který také podporuje zpracování záloh pro databáze s otevřeným zdrojovým kódem PostgreSQL, MySQL a MariaDB.
I když RDS široce přijalo mnoho společností, některé nemusí být obeznámeny s tím, jak funguje jejich Point-in-time Recovery (PITR) a jak jej lze používat.
Několik databázových strojů, které používá Amazon RDS, má zvláštní ohledy při obnově z určitého okamžiku a v tomto blogu se budeme zabývat tím, jak to funguje pro PostgreSQL, MySQL a MariaDB. Také porovnáme, jak se liší od funkce PITR v ClusterControl.
Co je bodová obnova (PITR)
Pokud ještě neznáte plánování obnovy po havárii (DRP) nebo plánování kontinuity podnikání (BCP), měli byste vědět, že PITR je jedním z důležitých standardních postupů pro správu databází. Jak již bylo zmíněno v našem předchozím blogu, Point In Time Recovery (PITR) zahrnuje obnovu databáze kdykoli v minulosti. Abychom to mohli udělat, budeme muset obnovit plnou zálohu a poté proběhne PITR použitím všech změn, ke kterým došlo v určitém okamžiku, který chcete obnovit.
Obnova bodu v čase (PITR) s AWS RDS
AWS RDS zpracovává PITR jinak než tradičním způsobem běžným u místní databáze. Konečný výsledek sdílí stejný koncept, ale u AWS RDS je úplná záloha snímek, pak se použije PITR (který je uložen v S3) a poté se spustí nová (jiná) instance databáze.
Běžný způsob vyžaduje, abyste před použitím PITR použili pro úplnou zálohu buď logickou (pomocí pg_dump, mysqldump, mydump) nebo fyzickou (Percona Xtrabackup, Mariabackup, pg_basebackup, pg_backrest).
AWS RDS bude vyžadovat, abyste spustili novou instanci DB, zatímco tradiční přístup vám umožňuje flexibilně uložit PITR na stejný databázový uzel, kde byla provedena záloha, nebo cílit na jinou (existující) instanci DB, která potřebuje obnovu nebo do nové instance DB.
Po vytvoření vaší instance AWS RDS bude zapnuto automatické zálohování. Amazon RDS automaticky provádí úplný denní snímek vašich dat. Plány snímků lze nastavit během vytváření v preferovaném okně zálohování. Zatímco je automatické zálohování zapnuto, AWS také každých 5 minut zaznamenává protokoly transakcí do Amazon S3 a zaznamenává všechny aktualizace vaší databáze. Jakmile zahájíte obnovu k určitému časovému bodu, transakční protokoly se aplikují na nejvhodnější denní zálohu, aby se obnovila instance DB do konkrétního požadovaného času.
Jak použít PITR s AWS RDS
Aplikaci PITR lze provést třemi různými způsoby. Jakmile bude instance DB k dispozici, můžete použít AWS Management Console, AWS CLI nebo Amazon RDS API. Musíte také vzít v úvahu, že protokoly transakcí jsou zaznamenávány každých pět minut, které jsou poté uloženy v AWS S3.
Jakmile obnovíte instanci DB, použije se na novou instanci DB výchozí skupina zabezpečení DB (SG). Pokud potřebujete vlastní db SG, můžete to explicitně definovat pomocí konzoly pro správu AWS, příkazu AWS CLI upravit-db-instance nebo operace Amazon RDS API ModifyDBInstance poté, co bude instance DB k dispozici.
PITR vyžaduje, abyste pro instanci DB určili poslední obnovitelný čas. Chcete-li to provést, můžete použít příkaz AWS CLI description-db-instances a podívat se na hodnotu vrácenou v poli LatestRestorableTime pro instanci DB. Například,
[[email protected] ~]# aws rds describe-db-instances --db-instance-identifier database-s9s-mysql|grep LatestRestorableTime
"LatestRestorableTime": "2020-05-08T07:25:00+00:00",
Použití PITR s konzolou AWS
Chcete-li použít PITR v AWS Console, přihlaste se do AWS Console → přejděte na Amazon RDS → Databáze → Vyberte (nebo klikněte) na požadovanou instanci DB a poté klikněte na Akce. Viz níže,
Jakmile se pokusíte obnovit pomocí PITR, uživatelské rozhraní konzoly vás upozorní, poslední obnovitelný čas, který můžete nastavit. Můžete použít poslední obnovitelný čas nebo zadat požadované cílové datum a čas. Viz níže:
Je docela snadné jej sledovat, ale vyžaduje, abyste věnovali pozornost a vyplnili požadované specifikace, které potřebujete pro spuštění nové instance.
Použití PITR s AWS CLI
Použití rozhraní AWS CLI může být docela užitečné, zejména pokud jej potřebujete začlenit do svých automatizačních nástrojů pro váš kanál CI/CD. Chcete-li to provést, můžete začít jednoduše s
[[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": []
}
}
Oba tyto přístupy nějakou dobu vyžadují vytvoření nebo přípravu instance databáze, dokud nebude dostupná a viditelná v seznamu instancí databáze ve vaší konzoli AWS RDS.
Omezení AWS RDS PITR
Při používání AWS RDS jste s nimi svázáni jako s dodavatelem. Přesunutí vašich operací z jejich systému může být problematické. Zde je několik věcí, které musíte zvážit:
- Úroveň uzamčení dodavatele při používání AWS RDS
- Vaše jediná možnost obnovení přes PITR vyžaduje, abyste spustili novou instanci běžící na RDS
- Žádný způsob, jak se pomocí procesu PITR obnovit do externího uzlu, který není v RDS
- Vyžaduje, abyste se naučili a byli obeznámeni s jejich nástroji a bezpečnostním rámcem.
Jak použít PITR pomocí ClusterControl
ClusterControl provádí PITR jednoduchým, ale přímočarým způsobem (ale vyžaduje, abyste povolili nebo nastavili předpoklady, aby bylo možné PITR použít). Jak již bylo zmíněno dříve, PITR pro ClusterControl funguje jinak než AWS RDS. Zde je seznam míst, kde lze PITR použít pomocí ClusterControl (od verze 1.7.6):
- Platí po úplné záloze na základě dostupných řešení metod zálohování, která podporujeme pro databáze PostgreSQL, MySQL a MariaDB.
- Pro PostgreSQL je podporována pouze metoda zálohování pg_basebackup a kompatibilní pro práci s PITR
- Pro MySQL nebo MariaDB je podporována pouze metoda zálohování xtrabackup/mariabackup a kompatibilní pro práci s PITR
- Platí pro databáze MySQL nebo MariaDB, PITR se použije pouze v případě, že zdrojový uzel plné zálohy je cílovým uzlem, který má být obnoven.
- Databáze MySQL nebo MariaDB vyžadují, abyste měli povolené binární protokolování
- Platí pro databáze PostgreSQL, PITR se vztahuje pouze na aktivní hlavní/primární a vyžaduje, abyste povolili archivaci WAL.
- PITR lze použít pouze při obnově existující plné zálohy
Správa zálohování pro ClusterControl je použitelná pro prostředí, kde databáze nejsou plně spravovány a vyžadují přístup SSH, který je zcela odlišný od AWS RDS. Přestože sdílejí stejný výsledek, kterým je obnova dat, řešení zálohování, která jsou přítomná v ClusterControl, nelze použít v AWS RDS. ClusterControl také nepodporuje RDS pro správu a monitorování.
Použití ClusterControl pro PITR v PostgreSQL
Jak již bylo zmíněno dříve o předpokladech pro využití PITR, musíte mít povolenou archivaci WAL. Toho lze dosáhnout kliknutím na ikonu ozubeného kola, jak je znázorněno níže:
Protože PITR lze použít hned po úplné záloze, můžete spustit pouze tuto funkci najdete v seznamu záloh, kde se můžete pokusit obnovit stávající zálohu. Chcete-li to provést, sekvence snímků obrazovky vám ukáže, jak to udělat:
Potom jej obnovte na stejném hostiteli jako zdroj zálohy. ,
Potom stačí zadat datum a čas,
Jakmile nastavíte a určíte datum a čas, ClusterControl se obnoví záloha a poté aplikujte PITR, jakmile je záloha hotová. Můžete to také ověřit kontrolou protokolů činnosti úlohy, jak je uvedeno níže,
Použití ClusterControl pro PITR v MySQL/MariaDB
PITR pro MySQL nebo MariaDB se neliší od přístupu, který máme výše pro PostgreSQL. Neexistuje však žádná ekvivalence archivace WAL ani tlačítko nebo možnost, kterou můžete nastavit a která je vyžadována pro aktivaci funkce PITR. Protože MySQL a MariaDB vyžadují, aby bylo možné použít PITR pomocí binárních protokolů, v ClusterControl to lze zpracovat na kartě Spravovat. Viz níže:
Poté zadejte proměnnou log_bin s odpovídající booleovskou hodnotou. Například,
Jakmile je log_bin nastaven v uzlu, ujistěte se, že máte úplné záloha pořízená na stejném uzlu, kde také použijete proces PITR. To je uvedeno dříve v předpokladech. Případně můžete také upravit konfigurační soubory (/etc/my.cnf nebo /etc/mysql/my.cnf) a přidat log_bin=ON například do sekce [mysqld].
Když jsou povoleny binární protokoly a je k dispozici úplná záloha, můžete provést proces PITR stejně jako v uživatelském rozhraní PostgreSQL, ale s jinými poli, která můžete vyplnit. Můžete zadat datum a čas nebo specifikovat na základě souboru binlog a pozice (nebo pozice x &y). Viz níže:
Omezení ClusterControl PITR
Pokud vás zajímá, co můžete a co nemůžete udělat pro PITR v ClusterControl, zde je seznam níže:
- Neexistuje žádný aktuální nástroj CLI s9s, který by podporoval proces PITR, takže jej není možné automatizovat ani integrovat do vašeho kanálu CI/CD.
- Žádná podpora PITR pro externí uzly
- Žádná podpora PITR, pokud se zdroj zálohy liší od cílového uzlu
- Neexistuje žádné pravidelné upozornění na nejzazší dobu, kdy můžete požádat o PITR
Závěr
Oba nástroje mají různé přístupy a různá řešení pro cílové prostředí. Klíčové je, že AWS RDS má svůj vlastní PITR, který je rychlejší, ale lze jej použít pouze v případě, že je vaše databáze hostována pod RDS a jste vázáni na uzamčení dodavatele.
ClusterControl vám umožňuje volně aplikovat proces PITR na jakékoli datové centrum nebo on-premise, pokud jsou zohledněny předpoklady. Jeho cílem je obnovit data. Bez ohledu na jeho omezení je založeno na tom, jak budete řešení používat v souladu s architektonickým prostředím, které používáte.