RDS je databáze jako služba (DBaaS), která automaticky konfiguruje a udržuje vaše databáze v cloudu AWS. Uživatel má omezenou moc nad konkrétními konfiguracemi ve srovnání s provozováním MySQL přímo na Elastic Compute Cloud (EC2). Ale RDS je pohodlná služba, pokud můžete žít s instancemi a konfiguracemi, které nabízí.
Amazon RDS v současné době podporuje různé verze MySQL a MariaDB a také engine Amazon Aurora DB kompatibilní s MySQL. Podporuje replikaci, ale jak můžete očekávat od předdefinované webové konzole, existují určitá omezení.
Služby Amazon RDSPři používání RDS existují určité kompromisy. Ty mohou ovlivnit nejen způsob správy a poskytování instancí databáze, ale také klíčové věci, jako je výkon, zabezpečení a vysoká dostupnost.
V tomto blogu se podíváme na rozdíly mezi používáním RDS a provozováním MySQL na EC2, se zaměřením na replikaci. Jak uvidíme, rozhodnout se mezi hostováním MySQL na instanci EC2 nebo použitím Amazon RDS není snadný úkol.
Výměny platformy RDS
Největší velikost databáze, kterou může AWS hostovat, závisí na vašem zdrojovém prostředí, alokaci dat ve zdrojové databázi a na vytíženosti vašeho systému.
Možnosti prostředí Amazon RDS Třída instance Amazon RDSAWS je rozděleno do regionů. Každý účet AWS má pro každou oblast omezení počtu prostředků AWS, které lze vytvořit. Jakmile je dosaženo limitu pro zdroj, další volání k vytvoření tohoto zdroje selžou.
Oblasti AWSU instancí Amazon RDS MySQL DB limit maximálního zřízeného úložiště omezuje velikost tabulky na maximální velikost 6 TB při použití tabulkových prostorů InnoDB file-per-table.
Funkce InnoDB file-per-table je něco, co byste měli zvážit, i když nechcete migrovat velkou databázi do cloudu. Můžete si všimnout, že některé existující instance DB mají nižší limit. Například instance databáze MySQL vytvořené před dubnem 2014 mají limit velikosti souboru a tabulky 2 TB. Tento limit velikosti souboru 2 TB platí také pro instance DB nebo repliky čtení vytvořené ze snímků DB pořízených před dubnem 2014.
Jedním z klíčových rozdílů, který ovlivňuje způsob, jakým nastavujete a udržujete replikaci databáze, je nedostatek SUPER uživatele. Aby Amazon vyřešil toto omezení, zavedl uložené procedury, které se starají o různé úlohy DBA. Níže jsou uvedeny klíčové postupy pro správu replikace MySQL RDS.
Chyba přeskočení replikace:
CALL mysql.rds_skip_repl_error;
Zastavit replikaci:
CALL mysql.rds_stop_replication;
Spusťte replikaci
CALL mysql.rds_start_replication;
Nakonfiguruje instanci RDS jako Read Replica instance MySQL běžící mimo AWS.
CALL mysql.rds_set_external_master;
Překonfiguruje instanci MySQL tak, aby již nebyla Read Replica instance MySQL běžící mimo AWS.
CALL mysql.rds_reset_external_master;
Importuje certifikát. To je nutné k povolení komunikace SSL a šifrované replikace.
CALL mysql.rds_import_binlog_ssl_material;
Odebere certifikát.
CALL mysql.rds_remove_binlog_ssl_material;
Změní pozici hlavního protokolu replikace na začátek dalšího binárního protokolu na hlavním serveru.
CALL mysql.rds_next_master_log;
Zatímco uložené procedury se postarají o řadu úkolů, je to trochu křivka učení. Nedostatek oprávnění SUPER může také způsobit problémy při používání externího monitorování replikace.
Amazon RDS aktuálně nepodporuje následující:
- Globální ID transakcí
- Přenosný stolní prostor
- Plugin pro ověřování
- Plugin síly hesla
- Filtry replikace
- Semisynchronní replikace
V neposlední řadě - přístup k shellu. Amazon RDS neumožňuje přímý přístup hostitele k instanci DB přes Telnet, Secure Shell (SSH) nebo Windows Remote Desktop Connection (RDP). Stále můžete používat klienta na hostiteli aplikace pro připojení k DB prostřednictvím standardních nástrojů, jako je mysql klient.
Existují další omezení, jak je popsáno v dokumentaci RDS.
Vysoká dostupnost s MySQL na EC2
Pro automatizaci úloh nasazení a správy/údržby (při zachování kontroly) je možné použít ClusterControl. Stejně jako u RDS máte pohodlí nasazení nastavení databáze během několika minut prostřednictvím GUI. Přidávání uzlů, plánování zálohování, provádění přepnutí při selhání atd. lze také pohodlně provést prostřednictvím grafického uživatelského rozhraní. Existují možnosti provozovat MySQL přímo na EC2, a tím si zachovat kontrolu nad možnostmi vysoké dostupnosti. Když se vydáte touto cestou, je důležité pochopit, jak využít různé funkce AWS, které máte k dispozici. Ujistěte se, že jste si prohlédli naši bílou knihu ‚DIY Cloud Database‘.
Nasazení
ClusterControl dokáže automatizovat nasazení různých nastavení databází s vysokou dostupností – od replikace master-slave až po multi-master clustery. Podporovány jsou všechny hlavní varianty MySQL – Oracle MySQL, MariaDB a Percona Server. Je vyžadováno určité počáteční nastavení VPC/bezpečnostní skupiny, které je dobře popsáno v dokumentu DIY Cloud Database. Všimněte si, že platí podobné koncepty, ať už jde o AWS nebo Google Cloud nebo Azure
Nasazení ClusterControl v EC2Galera Cluster je dobrou alternativou, kterou je třeba zvážit při nasazování vysoce dostupné služby MySQL. Prosadil se jako důvěryhodná náhrada tradičních architektur MySQL master-slave, i když to není náhrada typu drop-in. Většinu aplikací lze stále přizpůsobit tak, aby na něm běžely. Je možné definovat různé segmenty pro databáze, které pokrývají více oblastí AWS.
Rozbalovací cluster ClusterControl v EC2Je možné nastavit ‚hybridní replikaci‘ kombinací synchronní replikace v rámci klastru Galera a asynchronní replikace mezi klastrem a jedním nebo více podřízenými zařízeními. Možnosti, jako je zpoždění podřízeného zařízení, poskytují další úroveň ochrany dat.
ClusterControl Přidat replikaci v EC2Vrstva proxy
K dosažení vysoké dostupnosti nestačí nasazení vysoce dostupného nastavení. Aplikace musí nějak vědět, které uzly fungují a které ne. Změny topologie, např. Přesunutí masteru na jiného hostitele musí být také nějak propagováno, aby se předešlo chybám v aplikační vrstvě. ClusterControl podporuje nasazení proxy, jako je HAProxy, MaxScale a ProxySQL. Pro HAProxy a ProxySQL existují další možnosti nasazení redundantních instancí s Keepalived a VirtualIP.
Vyrovnávání zatížení správce ClusterControl na uzlech EC2Replika napříč oblastmi
Amazon RDS poskytuje služby repliky pro čtení. Mezioblastní repliky vám dávají možnost škálovat čtení, protože AWS má své služby v řadě datových center po celém světě. Všechny čtené repliky jsou přístupné a lze je použít pro čtení v maximálním počtu pěti oblastí. Tyto uzly jsou nezávislé a lze je použít ve vaší cestě upgradu nebo je lze povýšit na samostatné databáze.
Kromě toho Amazon nabízí nasazení Multi-AZ založené na DRBD, synchronní replikaci disku. Jak se liší od čtení replik? Hlavní rozdíl je v tom, že aktivní je pouze databázový stroj na primární instanci, což vede k dalším architektonickým variantám.
Na rozdíl od čtení replik dochází k upgradům verzí databázového stroje na primární. Dalším rozdílem je, že AWS RDS automaticky přejde při selhání s DRBD, zatímco čtení replik (pomocí asynchronní replikace) bude vyžadovat ruční operace.
Multi-AZ failover na RDS používá změnu DNS, která ukazuje na pohotovostní instanci, podle Amazonu by k tomu mělo dojít během 60-120 sekund během převzetí služeb při selhání. Protože pohotovostní režim používá stejná data úložiště jako primární, pravděpodobně dojde k obnovení transakcí/protokolů. Větší databáze mohou strávit značné množství času obnovou InnoDB, takže to prosím zvažte ve svém plánu DR a výpočtu RTO.
S tím jsou samozřejmě spojeny dodatečné náklady. Podívejme se na základní příklad. Cena hostitele db.t2.medium s 2vCPU, 4GB ram je 185,98 USD za měsíc, cena se zdvojnásobí, když povolíte repliku Multizone (MZ) na 370,98 UDB. Cena se bude lišit podle regionu, ale v MZ se zdvojnásobí.
Porovnání nákladůAbyste toho dosáhli s EC2, můžete nasadit své virtuální stroje v různých oblastech. Každá oblast AWS je zcela nezávislá. Nastavení regionu AWS lze změnit v konzole nastavením proměnné prostředí EC2_REGION nebo jej lze přepsat pomocí parametru --region s rozhraním příkazového řádku AWS. Až bude vaše sada serverů připravena, můžete použít ClusterControl k nasazení a monitorování replikace. Můžete také ručně nastavit replikaci prostřednictvím konzoly pomocí standardních příkazů.
Replikace napříč technologiemi
Je možné nastavit replikaci mezi instancí Amazon RDS MySQL nebo MariaDB DB a instancí MySQL nebo MariaDB, která je externí vůči Amazon RDS. To se provádí pomocí standardní replikační metody v mysql, prostřednictvím binárních protokolů. Chcete-li povolit binární protokoly, musíte upravit konfiguraci my.cnf. Bez přístupu k shellu se tento úkol v RDS stal nemožným. Dělá se to ne tak zřejmým způsobem. Máte dvě možnosti. Jedním z nich je povolit zálohování – nastavit automatické zálohování na vaší instanci Amazon RDS DB se zachováním vyšší než 0. Nebo povolit replikaci na předem sestavený podřízený server. Obě úlohy povolí binární protokoly, které můžete později použít pro svou replikaci.
Povolit binární protokoly prostřednictvím zálohy RDSUchovávejte binární protokoly ve své hlavní instanci, dokud neověříte, že byly použity na repliku. Tato údržba zajišťuje, že v případě selhání můžete obnovit svou hlavní instanci.
Další překážkou mohou být oprávnění. Oprávnění potřebná ke spuštění replikace v instanci Amazon RDS DB jsou omezená a nejsou dostupná pro vašeho hlavního uživatele Amazon RDS. Z tohoto důvodu musíte k nastavení replikace mezi vaší živou databází a vaší databází Amazon RDS použít příkazy Amazon RDS mysql.rds_set_external_master a mysql.rds_start_replication.
Monitorujte události převzetí služeb při selhání pro instanci Amazon RDS, která je vaší replikou. Pokud dojde k převzetí služeb při selhání, může být instance DB, která je vaší replikou, znovu vytvořena na novém hostiteli s jinou síťovou adresou. Informace o tom, jak monitorovat události převzetí služeb při selhání, naleznete v části Používání upozornění na události Amazon RDS.
V níže uvedeném příkladu uvidíme, jak povolit replikaci z RDS do externí databáze umístěné na instanci EC2.
Měli byste mít povolené binární protokoly, zde používáme slave RDS.
Zadejte počet hodin pro uchování binárních protokolů.
mysql -h RDS_MASTER -u<username> -u<password>
call mysql.rds_set_configuration('binlog retention hours', 7);
V RDS MASTER vytvořte uživatele replikace pomocí následujících příkazů:
CREATE USER 'repl'@'ec2DBslave' IDENTIFIED BY 's3cr3tp4SSw0rd';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'ec2DBslave';
Na RDS SLAVE spusťte příkazy:
mysql -u<username> -u<password> -h RDS_SLAVE
call mysql.rds_stop_replication;
SHOW SLAVE STATUS; Exec_Master_Log_Pos, Relay_Master_Log_File.
Na RDS SLAVE spusťte mysqldump v následujícím formátu:
mysqldump -u<username> -u<password> -h RDS_SLAVE --routines --triggers --single-transaction --databases DB1 DB2 DB3 > mysqldump.sql
Importujte výpis DB do externí databáze:
mysql -u<username> -u<password> -h ec2DBslave
tee import_database.log;
source mysqldump.sql;
CHANGE MASTER TO
MASTER_HOST='RDS_MASTER',
MASTER_USER='repl',
MASTER_PASSWORD='s3cr3tp4SSw0rd',
MASTER_LOG_FILE='<Relay_Master_Log_File>',
MASTER_LOG_POS=<Exec_Master_Log_Pos>;
Vytvořte replikační filtr, který bude ignorovat tabulky vytvořené AWS pouze na RDS
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('mysql.rds\_%');
Spusťte replikaci
START SLAVE;
Ověřte stav replikace
SHOW SLAVE STATUS;
To je pro tuto chvíli vše. Správa MySQL na AWS je velké téma. Dejte nám vědět své myšlenky v sekci komentářů níže.