MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Сравняване на RDS срещу EC2 за управление на MySQL или MariaDB на AWS

RDS е база данни като услуга (DBaaS), която автоматично конфигурира и поддържа вашите бази данни в облака на AWS. Потребителят има ограничена власт над специфични конфигурации в сравнение с стартирането на MySQL директно в Elastic Compute Cloud (EC2). Но RDS е удобна услуга, стига да можете да живеете с екземплярите и конфигурациите, които предлага.

Amazon RDS в момента поддържа различни версии на MySQL и MariaDB, както и съвместимия с MySQL двигател Amazon Aurora DB. Поддържа репликация, но както може да очаквате от предварително дефинирана уеб конзола, има някои ограничения.

Amazon RDS услуги

Има някои компромиси при използване на RDS. Те може да повлияят не само на начина, по който управлявате и предоставяте екземпляри на вашата база данни, но и на ключови неща като производителност, сигурност и висока наличност.

В този блог ще разгледаме разликите между използването на RDS и изпълнението на MySQL на EC2, с акцент върху репликацията. Както ще видим, изборът между хостинг на MySQL на EC2 екземпляр или използване на Amazon RDS не е лесна задача.

Компенсации на платформата RDS

Най-големият размер на базата данни, която AWS може да хоства, зависи от вашата изходна среда, разпределението на данните във вашата изходна база данни и колко натоварена е вашата система.

Опции за среда на Amazon RDS Клас на екземпляра на Amazon RDS

AWS е разделен на региони. Всеки акаунт в AWS има ограничения по регион за броя на ресурсите на AWS, които могат да бъдат създадени. След като се достигне ограничението за ресурс, допълнителните извиквания за създаване на този ресурс ще бъдат неуспешни.

Региони на AWS

За екземпляри на Amazon RDS MySQL DB, максималното предоставено ограничение за съхранение ограничава размера на таблица до максимален размер от 6 TB, когато се използват пространства за таблици InnoDB файл на таблица.

Функцията InnoDB файл на таблица е нещо, което трябва да вземете предвид, дори ако не искате да мигрирате голяма база данни в облака. Може да забележите, че някои съществуващи DB екземпляри имат по-ниска граница. Например, MySQL DB екземпляри, създадени преди април 2014 г., имат ограничение за размера на файла и таблицата от 2 TB. Това ограничение за размер на файла от 2 TB важи и за DB екземпляри или реплики за четене, създадени от моментни снимки на DB, направени преди април 2014 г.

Една от ключовите разлики, която влияе върху начина, по който настройвате и поддържате репликация на база данни, е липсата на SUPER потребител. За да се справи с това ограничение, Amazon въведе съхранени процедури, които се грижат за различни DBA задачи. По-долу са основните процедури за управление на MySQL RDS репликация.

Грешка при пропускане на репликацията:

CALL mysql.rds_skip_repl_error;

Спиране на репликацията:

CALL mysql.rds_stop_replication;

Стартирайте репликацията

CALL mysql.rds_start_replication;

Конфигурира екземпляр на RDS като реплика за четене на екземпляр на MySQL, работещ извън AWS.

CALL mysql.rds_set_external_master;

Преконфигурира MySQL екземпляр, за да не бъде вече реплика за четене на екземпляр на MySQL, работещ извън AWS.

CALL mysql.rds_reset_external_master;

Импортира сертификат. Това е необходимо за активиране на SSL комуникация и криптирана репликация.

CALL mysql.rds_import_binlog_ssl_material;

Премахва сертификат.

CALL mysql.rds_remove_binlog_ssl_material;

Променя позицията на главния регистър на репликацията към началото на следващия двоичен регистрационен файл на главния регистър.

CALL mysql.rds_next_master_log;

Докато съхранените процедури се грижат за редица задачи, това е малко крива на обучение. Липсата на SUPER привилегия също може да създаде проблеми при използването на външно наблюдение на репликация.

Amazon RDS в момента не поддържа следното:

  • Идентификатори на глобални транзакции
  • Транспортируемо пространство за таблица
  • Приставка за удостоверяване
  • Приставка за сила на паролата
  • Филтри за репликация
  • Полусинхронна репликация

Не на последно място – достъп до обвивката. Amazon RDS не позволява директен достъп до хост до DB екземпляр чрез Telnet, Secure Shell (SSH) или връзка с отдалечен работен плот на Windows (RDP). Все още можете да използвате клиента на хост на приложение, за да се свържете с DB чрез стандартни инструменти като mysql клиент.

Има и други ограничения, както е описано в документацията на RDS.

Висока наличност с MySQL на EC2


За автоматизиране на задачите по внедряване и управление/поддръжка (при запазване на контрола), е възможно да се използва ClusterControl. Точно както при RDS, имате удобството да разположите настройка на база данни за няколко минути чрез GUI. Добавянето на възли, планирането на архивиране, извършването на откази и т.н. също може да се извършва удобно чрез графичния интерфейс. Има опции за работа с MySQL директно на EC2 и по този начин запазване контрола върху нечии опции за висока наличност. Когато вървите по този път, е важно да разберете как да използвате различните функции на AWS, които са на ваше разположение. Уверете се, че сте разгледали нашата бяла книга „Направи си облачна база данни“.

Внедряване

ClusterControl може да автоматизира внедряването на различни настройки на база данни с висока наличност - от репликация главен-подчинен до клъстер с множество главни. Поддържат се всички основни разновидности на MySQL - Oracle MySQL, MariaDB и Percona Server. Изисква се известна първоначална настройка на VPC/група за сигурност и те са добре описани в бялата книга за облачната база данни „Направи си сам“. Имайте предвид, че се прилагат подобни концепции, независимо дали е AWS, Google Cloud или Azure

Разгръщане на ClusterControl в EC2

Galera Cluster е добра алтернатива, която трябва да имате предвид при внедряването на високодостъпна MySQL услуга. Той се утвърди като надежден заместител на традиционните MySQL master-slave архитектури, въпреки че не е заместващ. Повечето приложения все още могат да бъдат адаптирани да работят върху него. Възможно е да се дефинират различни сегменти за бази данни, които обхващат множество региони на AWS.

Разширен клъстер на ClusterControl в EC2

Възможно е да се настрои „хибридна репликация“ чрез комбиниране на синхронна репликация в рамките на клъстер Galera и асинхронна репликация между клъстера и един или повече подчинени устройства. Опции като забавяне на подчинения дават допълнително ниво на защита на данните.

ClusterControl Добавяне на репликация в EC2

Прокси слой

За да се постигне висока наличност, внедряването на високодостъпна настройка не е достатъчно. Приложенията трябва по някакъв начин да знаят кои възли работят и кои не. Промени в топологията, напр. преместване на главен към друг хост, също трябва да се разпространява по някакъв начин, за да се избегнат грешки в слоя на приложението. ClusterControl поддържа внедряване на прокси сървъри като HAProxy, MaxScale и ProxySQL. За HAProxy и ProxySQL има допълнителни опции за разгръщане на излишни екземпляри с Keepalived и VirtualIP.

Балансиране на натоварването на мениджъра на ClusterControl на EC2 възли

Межрегионално копие

Amazon RDS предоставя услуги за четене на реплика. Междурегионалните реплики ви дават възможност за мащабиране на четенията, тъй като AWS има своите услуги в редица центрове за данни по целия свят. Всички реплики за четене са достъпни и могат да се използват за четене в максимален брой от пет региона. Тези възли са независими и могат да се използват във вашия път за надграждане или могат да бъдат повишени в самостоятелни бази данни.

В допълнение към това, Amazon предлага внедряване в няколко AZ, базирано на DRBD, синхронно репликация на диск. Как се различава от Read Replicas? Основната разлика е, че само механизмът на базата данни на първичния екземпляр е активен, което води до други архитектурни вариации.

За разлика от репликите за четене, надстройките на версията на двигателя на базата данни се случват на първичния. Друга разлика е, че AWS RDS ще премине автоматично при отказ с DRBD, докато четенето на реплики (използвайки асинхронна репликация) ще изисква ръчни операции от вас.

Multi-AZ failover на RDS използва промяна на DNS, за да посочи екземпляр в режим на готовност, според Amazon това трябва да се случи в рамките на 60-120 секунди по време на отказ. Тъй като режимът на готовност използва същите данни за съхранение като основния, вероятно ще има възстановяване на транзакции/регистрационни файлове. По-големите бази данни може да отделят значително време за възстановяване на InnoDB, така че, моля, имайте предвид това във вашия план за DR и изчисляване на RTO.

Разбира се, това е с допълнителни разходи. Нека да разгледаме някои основни примери. Цената на db.t2.medium хост с 2vCPU, 4GB ram е 185,98 USD на месец, цената ще се удвои, когато активирате Multizone (MZ) реплика до 370,98 UDB. Цената ще варира в зависимост от региона, но ще се удвои в MZ.

Сравнение на разходите

За да постигнете същото с EC2, можете да разположите вашите виртуални машини в различни региони. Всеки регион на AWS е напълно независим. Настройката на AWS Region може да бъде променена в конзолата чрез задаване на променливата на средата EC2_REGION или може да бъде отменена чрез използване на параметъра --region с интерфейса на командния ред на AWS. Когато вашият набор от сървъри е готов, можете да използвате ClusterControl за внедряване и наблюдение на вашата репликация. Можете също така ръчно да настроите репликация през конзолата, като използвате стандартни команди.

Кръстосана технологична репликация

Възможно е да се настрои репликация между екземпляр на Amazon RDS MySQL или MariaDB DB и екземпляр на MySQL или MariaDB, който е външен за Amazon RDS. Това се прави с помощта на стандартен метод за репликация в mysql, чрез двоични регистрационни файлове. За да активирате двоични регистрационни файлове, трябва да промените конфигурацията на my.cnf. Без достъп до обвивката тази задача стана невъзможна в RDS. Прави се по не толкова очевиден начин. Имате две възможности. Единият е да активирате архивиране – задайте автоматизирано архивиране на вашия Amazon RDS DB екземпляр със задържане на по-високо от 0. Или активирайте репликация към предварително изграден подчинен сървър. И двете задачи ще активират двоични регистрационни файлове, които по-късно можете да използвате за вашата репликация.

Активиране на двоични регистрационни файлове чрез RDS архивиране

Поддържайте binlogs във вашия главен екземпляр, докато не проверите, че са приложени към репликата. Тази поддръжка гарантира, че можете да възстановите главния си екземпляр в случай на повреда.

Друго блокиране могат да бъдат разрешенията. Разрешенията, необходими за стартиране на репликация на екземпляр на Amazon RDS DB, са ограничени и не са достъпни за вашия главен потребител на Amazon RDS. Поради това трябва да използвате командите mysql.rds_set_external_master и mysql.rds_start_replication на Amazon RDS, за да настроите репликация между вашата жива база данни и вашата база данни Amazon RDS.

Наблюдавайте събитията за преодоляване на отказ за екземпляра на Amazon RDS, който е вашата реплика. Ако възникне отказ, тогава DB екземплярът, който е вашата реплика, може да бъде пресъздаден на нов хост с различен мрежов адрес. За информация как да наблюдавате събития при отказ, вижте Използване на Amazon RDS Event Notification.

В примера по-долу ще видим как да активирате репликация от RDS към външна DB, разположена на EC2 екземпляр.
Трябва да имате активирани двоични регистрационни файлове, тук използваме подчинен RDS.

Посочете броя часове за запазване на двоични регистрационни файлове.

mysql -h RDS_MASTER -u<username> -u<password>
call mysql.rds_set_configuration('binlog retention hours', 7);

На RDS MASTER създайте потребител за репликация със следните команди:

CREATE USER 'repl'@'ec2DBslave' IDENTIFIED BY 's3cr3tp4SSw0rd';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'ec2DBslave';

На RDS SLAVE изпълнете командите:

mysql -u<username> -u<password> -h RDS_SLAVE
call mysql.rds_stop_replication;
SHOW SLAVE STATUS;  Exec_Master_Log_Pos, Relay_Master_Log_File.

На RDS SLAVE стартирайте mysqldump със следния формат:

mysqldump -u<username> -u<password> -h RDS_SLAVE --routines --triggers --single-transaction --databases DB1 DB2 DB3 > mysqldump.sql

Импортирайте дъмпа на БД във външна база данни:

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>;

Създайте филтър за репликация, за да игнорирате таблици, създадени от AWS само на RDS

CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('mysql.rds\_%');

Стартирайте репликацията

START SLAVE;

Проверете състоянието на репликация

SHOW SLAVE STATUS;

Това е засега. Управлението на MySQL на AWS е голяма тема. Кажете ни вашите мисли в секцията за коментари по-долу.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи COS() в MariaDB

  2. Как SIGN() работи в MariaDB

  3. Какво е MariaDB ColumnStore?

  4. MariaDB JSON_EXISTS() Обяснено

  5. Превключване на база данни и отказ за уебсайтове на Drupal, използващи MySQL или PostgreSQL