Рубрики
Uncategorized

Amazon Aurora MySQL базы данных администратора администратора

Введение Aurora MySQL — это управляемый реляционный двигатель БД, совместимый с MySQL 5.6 … Теги с AWS, базой данных, DEVOPS.

Введение

Aurora MySQL — это управляемый реляционный двигатель БД, совместимый с MySQL 5,6 и 5,7. Вы все еще можете использовать драйверы, разъемы и инструменты, которые вы использовали с помощью MySQL с (почти) без заряда. Aurora Mysql DB Clusters предоставляет такие функции, как:

  • Один первичный экземпляр чтения/записи (RW), 15 реплик экземпляров только для чтения (RO)
  • Любой экземпляр RO может быть повышен до RW в случае отказа первичного экземпляра
  • Динамическая конечная точка кластера (I.E. URI или адрес) Всегда указывая на основной экземпляр даже в случае отказоугодателя
  • Конечная точка читателя, включая все реплики RO, обновления, когда реплики добавляются или удалены
  • Admin может создавать пользовательские конечные точки DNS, содержащие его собственную конфигурацию экземпляров БД в одном кластере
  • Улучшенная масштабируемость с использованием внутренних соединительных пулов и мультиплексирование резьбы для каждого сервера
  • Практически нулевое время перезагрузки/восстановления DB
  • Метаданные в реальном времени доступны разработчиками приложений, позволяющие им создавать умные драйверы и подключаться непосредственно к экземплярам, основанным на их ролях (RW — RO)

Но чтобы получить максимальную отдачу от этих льгот, DBAS нужно изучить лучшие практики, потому что любая суб оптимальная конфигурация для приложений, драйверов, разъема или прокси может привести к неожиданным временам простоя и производительности. И вы можете рассмотреть эту статью Конфигурация Aurora MySQL Best Recireds Cooking.

DNS конечные точки

Источник: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/images/AuroraArch001.png

Как вы можете видеть с диаграммы выше, Aurora DB имеет некоторые Вычислить Экземпляры, подключенные к мультиндарю (могут служить много кластеров), Multi-Attach (может иметь несколько экземпляров к нему) Хранение объем. Представления вычислений являются одним первичным экземпляром RW (M) и до 15 реплик (R) — на кластер. RO экземпляры могут взять на себя экземпляр RW в случае сбоя.

Но как оптимально подключиться к этим экземплярам? Здесь Aurora поддерживает 4 типа конечной точки DNS.

  • Кластерная конечная точка : После первичного примера даже в случае отказа
  • Конечная точка читателя : Включите все экземпляры RO под единственным CNAME DNS, поэтому может использоваться для балансировки нагрузки Round-Robin
  • Конечные точки экземпляра: Подключиться непосредственно к некотором экземпляре (RW или RO)
  • Пользовательские конечные точки: Определенные пользователем конечные точки DNS, содержащие выбранную группу, например, в одном кластере

Вы можете использовать любой из 4 типов, где вы видите подходящие для достижения оптимальной конфигурации.

Обработка подключения в Aurora Mysql и MySQL

MySQL Community Edition посвятил одну резьбу ОС из MySQLD Процесс для каждого соединения (одно нить на соединение). Это приводит к многим вопросам масштабируемости (в случае большого количества пользовательских соединений), таких как высокое использование памяти, даже если некоторые соединения являются простаистыми, а также огромные накладные переключения контекста между несколькими потоками.

В качестве решения Aurora MySQL поддерживает подход пула резьбы (в группу потоков, готовых для любого использования по требованию к требованию). Эти темы никогда не выделяются ни одному использованию соединения. Темы мультиплексируются, то есть, когда нить используется соединением, и он не активно выполняется (например, ждет IO), нить может переключаться на другое соединение, чтобы сделать полезную работу; таким образом набираем наилучшее использование и обслуживание многих соединений всего несколькими потоками. Пул резьбы также масштабируется вверх и вниз автоматически в соответствии с использованием, ручная конфигурация не требуется.

Хотя пул резьбы уменьшает стоимость обслуживания серверов, он поставляется с ограничением настройки и завершения соединений, особенно когда это соединение имеет конфигурацию уровня сеанса (например Set ). Этот процесс включает в себя обмен нескольких сетевых пакетов. Для занятых рабочих нагрузок с короткоживущими соединениями (например, онлайн-транзакционная обработка), рассмотрите возможность использования бассейна соединения на стороне приложений.

Общие заблуждения

  • Нет необходимости в бассейне для соединения на стороне приложения, когда используется пул соединения на стороне сервера

    Как уже упоминалось ранее, объединение на стороне сервера имеет ограничение о том, что он не устраняет накладные расходы на настройку и завершение соединения. Таким образом, если ваша заявка выполняет очень частые соединения открытия/закрытия, и несколько операторов выполнены на соединение; Тогда вам нужно объединение по борьбе с приложением. Даже если ваши соединения давно живут, вы можете воспользоваться объединением сторон приложений, чтобы избежать больших всплесков новых попыток подключения I.e. Вы можете использовать TCPDUMP Инструмент для мониторинга вашего соединения и сравнение накладных пакетов по сравнению с полезными пакетами обработки, которые помогут вам принять решение.

  • Простые соединения не используют память

    Неправильно! Процессы ОС и базы данных выделяют дескрипторы памяти для каждого соединения. Хотя Aurora MySQL обычно использует меньшее воспоминание, чем MySQL CE, этот накладной расход в Aurora MySQL не равен нулю. Таким образом, в основном избегайте открытия слишком большего соединения в вашем пуле приложения, чем вам нужно.

  • Простое время полностью зависит от стабильности и особенностей БД

    Неправильно! Ваше приложение дизайн и конфигурация также имеет значение. Для этого прочитайте следующий раздел, чтобы узнать, как ваши практики могут помочь пользователю трафик восстановиться быстрее после события БД.

    Лучшие практики

  • Используя умные драйверы

    Хотя Aurora Mysql Кластер и Читатель Тезисы конечных точек (скрываются) Топология кластера, принимая во внимание топологию при разработке вашего соединителя, значительно помогает в устранении задержек возникает из-за обновлений DNS. По этой причине Aurora Mysql предоставляет таблицу метаданных почти в реальном времени ( infoate_schema.replya_host_status ), несущая информацию о случаях в кластере и их ролях и может быть запрошена из любого экземпляра в кластере.

    Пример запроса против таблицы метаданных. Источник: оригинальная бумага

    Умные водители Драйверы/разъема, которые используют эту таблицу для улучшения запросов, не только в зависимости от высокого уровня DNS-конечной точки, а также балансировки только для чтения с круглыми роминчами. Пример для этого является разъем MariaDB/J для Java.

    Обратите внимание, что использование смарт-соединителя не компенсирует оставшуюся часть лучших практик, вам все равно нужно управлять другими другими материалами в статье — достичь оптимального соединения. Также обратите внимание, что разъем TESES, который имеет специфические функции Aurora, не могут быть официально подтверждены AWS и должны быть в курсе, когда они сталкиваются с гораздо большим количеством обновлений, чем разъемы Barebones.

  • DNS кэширование

    Правило большого пальца: кэширование DNS TTL конечных точек Aurora составляет 5 секунд. Ваша конфигурация никогда не должна превышать этот предел. Кэширование может произойти на сетевом слое, ОС или вашем приложении, поэтому убедитесь, что все слои кэширования не будут превышать предел TTL. Превышение пределов TTL означает, что имеющие устаревшие данные DNS, которые могут привести к достижению к демотешему первичному экземпляру, как если бы он все еще является основным экземпляром, отказом подключения к экземплянам читателей после масштабирования вверх/вниз из-за использования старых IPS или неравного использования трафик среди экземпляров читателей.

  • Управление подключением и объединением

    • Всегда держите соединения закрыты и не полагайтесь на языку/рамки разработки, чтобы закрыть их автоматически, так как могут быть сценарии, где это не так.
    • Если вы не можете полагаться на клиент-интерактивные приложения, чтобы закрыть IDLE Connection, используйте Interactive_Timeout и wait_timeout. MySQL переменные, чтобы сохранить время ожидания простоя подходящего.
    • Как уже упоминалось ранее, используйте объединение соединений, чтобы защитить свою БД против скачков, также, если вы зарабатываете тысячи краткосрочных соединений в секунду. Если ваша структура не поддерживает объединение соединений, ума с помощью соединения прокси, таких как ProxySQL.
    • Лучшие практики с управлением соединительными бассейнами и прокси:
      • Проверьте здоровье заимствованного соединения перед использованием. Это может быть так же просто, как Выберите 1 или показать ценность @innodb_read_only Переменные для дальнейшего знания роли экземпляра Aurora вы общаетесь с — истинный Если это экземпляр читателя.
      • Периодически здоровье — проверьте соединения
      • Перерабатывайте все соединения периодически, закрывая и открываем новые. Это помогает сохранить ресурсы и предотвратить Rowaway queries и зомби соединений (связь с заброшенными клиентами).
  • Соединение масштабирования

    Расширение, количество соединений увеличивается пропорционально количеству экземпляров сервера приложений, учитывая, что вы посвятили фиксированное количество соединений на сервер. Это может ограничить масштабируемость БД в некоторых экстремальных случаях, так как большая часть соединений, как правило, простаивает, но при приеме ресурсов сервера.

    Чтобы решить этот случай, вы можете уменьшить количество подключений на сервер до минимума применимого, хотя это решение не масштабируется, как ваше приложение увеличивается. Намного лучшее решение — использовать прокси между серверами приложений и БД. Он поставляется со многими функциями из коробки, как настраиваемое фиксированное число подключений, кэширования запросов, буферизации соединений и балансировки нагрузки. Прокси, такие как Proxysql, Scalearc и MaxScale, совместимы с протоколом MySQL. Для дальнейшей масштабируемости и доступности вы можете использовать несколько прокси-экземпляров позади одной и той же конечной точки DNS.

  • Управление транзакциями и автозомита

    Режим AutoCommit гарантирует, что каждое утверждение запускается в собственной транзакции, которая передается автоматически. Этот режим рекомендуется, потому что отключение этого режима означает, что транзакция открыта, и может оставаться открытыми для длительного времени, блокируя механизм сборки мусора и заполнить отставание сбора мусора, что приводит к чрезмерному употреблению хранилища и подшипнику.

    Рекомендуется всегда использовать режим AutoCommit и двойной проверки он включен в приложениях и бокам БД, особенно в приложениях, так как он не может быть включен по умолчанию. Вы также должны управлять транзакциями вручную, используя Запуск/начать транзакцию и Commit/Rotack Как только вы закончите. Эти рекомендации применяются всякий раз, когда вы используете InnoDB.

    Также вы можете контролировать время транзакции, используя information_schema.innodb_trx Таблица. trx_started Это время запуска транзакции, чтобы вы могли использовать его для расчета своего возраста и расследовать его, если возраст составляет порядка минут.

    Для мониторинга отказов сбора мусора, используйте trx_rseg_history_len счетчик в inform_schema.innodb_metrics Таблица. Если в порядке десяти тысяч, G.c. задерживается. Если миллионы, ситуация опасна и необходимо расследовать.

    Обратите внимание, что сборка мусора в Aurora широко зависит от кластера, что означает, что любая проблема производительности повлияет на все экземпляры, поэтому вам нужно отслеживать все экземпляры.

  • Соединение рукопожатия

    Обычно открытие нового сеанса БД включает в себя выполнение многих утверждений, таких как настройка переменных сеансов, что значительно влияет на приложения, чувствительные к задержке. Вы должны знать о внутренних операциях водителя, используя Aurora Advanced Audit, общий журнал запросов или трассировку пакетов на уровне сети, используя tcpdump. . Вы знаете цель каждого утверждения и его влияние на последующие запросы. Если вы обнаружите, что количество круглых подъемников, сделанных для операций рукопожатия, являются значительными относительно реальной работы, рассмотрите возможность отключения некоторых операторов рукопожатия или использование объединения соединения.

  • Балансировка нагрузки с конечной точкой читателя

    DNS Разрешение конечной точки считывателя нагрузки сбалансировано в Round Robin Fashion для каждой новой связи, это означает, что для того же соединения все запросы выполняются против того же экземпляра. Это может привести к неравному использованию репликов чтения, длительная начальная задержка для вновь добавленных экземпляров и приложений продолжает отправлять трафик для остановки экземпляров в случае кэширования DNS. Обязательно используйте лучшие практики кэширования DNS, упомянутые ранее.

  • Разработка для неисправностей и быстрого восстановления

    Когда вы масштабируете свое приложение вверх, вы, скорее всего, добавлю больше экземпляров (DB, приложений, …) также столкнуться с большими вопросами. Вы должны разработать ваше приложение, чтобы быть устойчивым к тому, чтобы они обращены с этими ситуациями. Вы должны сохранить актуальность вашего приложения с переключением первичных экземпляров Aurora (происходит в течение 30 секунд после отказа). Вы также должны быть в курсе новых экземпляров читателей, созданные для начать отправку трафика к ним, а также удаленные экземпляры, чтобы перестать отправлять их трафику. Не следуя лучшими практиками может привести к более длительным время простоя.

  • Конфигурация сервера

    • Переменная конфигурации max_connections.

      Эта переменная ограничивает количество соединений на экземпляр Aurora DB. Лучшая практика заключается в том, чтобы сохранить это немного выше, чем то, что вы ожидаете открыть, но остерегайтесь, если вы используете Performance_schema По мере увеличения использования его памяти пропорционально значению этой переменной, S может привести к тому, что OOM выходит на более мелкие экземпляры, такими как экземпляры T2 и T3 с более чем 8 ГБ памяти. В этом случае вам может понадобиться отключить Performance_schema или сохранить max_connections по умолчанию.

    • Переменная конфигурации max_connect_errors.

      Эта переменная контролирует количество последовательных неудачных запросов соединения для данного клиентского хоста. Клиент показан следующая ошибка при превышении этого предела

      Обычная неверная практика сохраняет эту переменную очень высокую, чтобы избежать проблем подключения к клиентам. Однако это опасно, так как он может скрыть серьезные проблемы с приложениями, которые нуждаются в действии разработчика или даже хуже, атаки DDOS пытаются снять систему.

      Если ваше клиентское приложение сталкивается с «хостом, заблокирована» проблема, используйте aborted_connects Диагностические счетчики вместе с host_cache Таблица к Определите и исправить проблему В вашем приложении.

      Обратите внимание, что эта переменная не влияет, если Skip_name_Resolve устанавливается на 1 (по умолчанию).

Вывод

Aurora действительно отлично ❤️, однако, вам все равно нужно применить лучшие практики для обеспечения плавной интеграции, сокращения простоя и масштабируемость. Эта статья поможет вам применить эти лучшие практики без особых усилий.

Оригинал: «https://dev.to/awsmenacommunity/amazon-aurora-mysql-database-administrator-s-handbook-146d»