Статьи

Как автоматически масштабировать MySQL на Amazon EC2

Автоматическое масштабирование уровня вашего веб-сервера обычно не вызывает затруднений. Создайте образ вашего сервера Apache с исходным кодом или без него, затем синхронизируйте файлы с S3 при раскрутке. Сверните это изображение в конфигурацию автомасштабирования, и все готово. С уровнем базы данных все может быть немного сложнее. Типичная конфигурация, которую мы видим, это иметь одну основную базу данных, в которую пишет ваше приложение. Но горизонтальное или горизонтальное масштабирование в Amazon EC2 должно быть таким же простым, как и добавление дополнительных рабов, верно? Почему бы не автоматизировать этот процесс?

автомасштабирование MySQL

Ниже мы решили ответить на некоторые вопросы, с которыми вы, вероятно, столкнетесь, когда настраиваете рабов против своего хозяина. Мы включили инструкции по созданию AMI, который автоматически раскручивается как раб. Необычные!

  1. Как я могу автоматически масштабировать свой уровень базы данных?
    1. Создайте автоматически запускающийся MySQL slave против вашего мастера.
    2. Настройте их для раскрутки. Автоматическое масштабирование балансировки нагрузки Amazon — это один из вариантов, другой — использовать решение по принципу «сворачивай сам», отслеживая пороговые значения на серверах, а также раскручивая или сбрасывая подчиненных по мере необходимости.
  2. Захватывает ли снимок AWS вложенные данные или только РАЗМЕР присоединенного тома?
  3. Фактически, если у вас есть подключенный том EBS, и вы создаете новый AMI из этого, вы захватите весь корневой том плюс данные подключенного тома. На самом деле мы находим это отличным способом создать автоматически созданного ведомого в облаке.

  4. Как заморозить MySQL во время снимка AWS?
mysql> flush tables with read lock;mysql> system xfs_freeze -f /data

На этом этапе вы можете использовать API-интерфейс веб-консоли Amazon, ylastic или ec2-create-image, чтобы сделать это из командной строки. Когда сервер, с которого вы создаете образы, перезагружается — как это будет сделано по умолчанию — он начнёт с разморозки раздела / data и снова разблокирует таблицы mysql. Вуаля!

Если вы не используете xfs для вашей файловой системы / data, вам следует. Это быстро! Документы xfsprogs, кажется, указывают, что это может также работать с иностранными файловыми системами. Проверьте документы для деталей.

  1. Как мне создать подчиненный AMI MySQL, который автоматически подключается к мастеру?
  2. Установите скрипт mysql_serverid ниже.

    1. Сконфигурируйте mysql для использования вашего / data EBS mount.
    2. Установите все ваши настройки my.cnf, включая server_id
    3. Настройте экземпляр в качестве ведомого обычным способом.
    4. При использовании GRANT для создания пользователя ‘rep’ на главном сервере укажите хост с подстановочным знаком подсети. Например, «10 .20.%». Это впоследствии позволит любым серверам 10.20.xy подключаться и реплицироваться.
    5. Направьте раба на хозяина.
    6. Когда все работает правильно, отредактируйте файл my.cnf и удалите server_id. Не перезапускай MySQL.
    7. Заморозьте файловую систему, как описано выше.
    8. Используйте консоль Amazon, ylastic или вызов API для создания нового изображения.
    9. Протестируйте его, конечно, чтобы убедиться, что он раскручивается, устанавливает server_id и подключается к master.
    10. Внесите изменения в схему тестирования и убедитесь, что она распространяется на все подчиненные устройства.
  3. Как мне установить server_id уникально?
  4. Как вы, наверное, уже знаете, в среде репликации MySQL каждому узлу требуется уникальный параметр server_id. В моих изображениях с машины Amazon я хочу, чтобы сервер запускался, и если он не находит server_id в файле /etc/my.cnf, добавьте его туда, правильно! Это так много, чтобы спросить?

    Вот что я сделал. Запустите выбранный вами редактор и вставьте этот фрагмент кода:

#!/bin/shif grep -q “server_id” /etc/my.cnf

then

: # do nothing – it’s already set

else

# extract numeric component from hostname – should be internet IP in Amazon environment

export server_id=`echo $HOSTNAME | sed ‘s/[^0-9]*//g’`

echo “server_id=$server_id” >> /etc/my.cnf

# restart mysql

/etc/init.d/mysql restart

fi

Сохраните этот фрагмент в / root / mysql_serverid. Также не забудьте сделать его исполняемым:

$ chmod +x /root/mysql_serverid

Затем просто добавьте его в файл /etc/rc.local с помощью редактора или echo:

$ echo "/root/mysql_serverid" >> /etc/rc.local

Предполагая, что ваш файл my.cnf * NOT * содержит настройку server_id при переизображении, он будет автоматически устанавливаться каждый раз, когда вы подключаете новый сервер к этому AMI. Ницца!

  1. Можете ли вы легко раба от раба? Как?
  2. Это не сильно отличается от рабства нормального мастера.

    A. Сначала включите ведомые обновления. Настройка не является динамической, поэтому, если она еще не установлена, вам придется перезапустить подчиненное устройство.

    log_slave_updates=true

          B. Получите начальный снимок ваших ведомых данных. Вы можете сделать это путем блокировки:

mysql> flush tables with read lock;mysql> show master status\G;

mysql> system mysqldump -A > full_slave_dump.mysql

mysql> unlock tables;

    Вы также можете использовать отличную утилиту Percona xtrabackup для создания оперативных резервных копий без блокировки таблиц. Нам очень повезло, что в нашем распоряжении есть такой инструмент с открытым исходным кодом. MySQL Enterprise Backup от Oracle Corp также может сделать это.

    C. На ведомом устройстве заполните базу данных созданным выше дампом.

$ mysql < full_slave_dump.mysql

          D. Теперь наведите вашего раба на первоначального раба.

mysql> change master to master_user='rep', master_password='rep', master_host='192.168.0.1', master_log_file='server-bin-log.000004', master_log_pos=399;mysql> start slave;

mysql> show slave status\G;
  1. Ведомое устройство установлено как IP-адрес. Есть ли другой способ?

Можно использовать имена хостов в репликации MySQL, однако это не рекомендуется. Зачем? Из-за дурацкого мира DNS. Достаточно сказать, что MySQL должен проделать большую работу для преобразования этих имен в IP-адреса. Сбой в DNS может потенциально прервать все службы MySQL, так как сеансы не будут аутентифицироваться. Чтобы избежать этой проблемы, сделайте две вещи:
           A. Установите этот параметр в my.cnf

skip_name_resolve = true
  1. Удалите записи в таблице mysql.user, где имя хоста не является IP-адресом. Эти записи будут недействительными для аутентификации после установки вышеуказанного параметра.
  1. Разве RDS не позаботится обо всем этом для меня?
  2. RDS — это сервис реляционной базы данных Amazon, построенный на MySQL. Решение Amazon RDS представляет MySQL как сервис, который дает определенные преимущества администраторам и стартапам:

    • Упрощенное администрирование. Гайки и болты обрабатываются для вас.
    • Кнопочная репликация. Больше не нужно бороться с нюансами и проблемами управления репликацией MySQL.
    • Простота администрирования, конечно, имеет свои недостатки. В зависимости от вашей среды, они могут быть или не быть нарушителями.

    • Нет доступа к медленному журналу запросов.
    • Это огромно. Единственный лучший инструмент для устранения неполадок медленного ответа базы данных — это файл журнала. Запросы являются важной частью поддержания работоспособности и благополучия сервера реляционных баз данных, и без этой возможности вы серьезно ограничены.

    • Заблокировано в окне простоя
    • Когда вы регистрируетесь в RDS, вы должны определить 30-минутное окно обслуживания. Это еженедельное окно, в течение которого ваш экземпляр * МОЖЕТ * быть недоступным. Когда вы размещаете себя, вам может вообще не потребоваться столько простоев, особенно если вы используете master-master mysql и настройку без простоев.

    • Невозможно использовать Percona Server для размещения ваших данных MySQL.
    • Вы не сможете сделать это в RDS. Percona server — это высокопроизводительный дистрибутив MySQL, который обычно включает серьезные изменения производительности и обновления, прежде чем они добавятся в сообщество. Хорошо стоит усилий, чтобы рассмотреть это.

    • Нет доступа к файловой системе, метрикам сервера и командной строке.
    • Опять же, для устранения проблем, они имеют решающее значение. Сбор данных о том, что на самом деле происходит на сервере, — это то, как вы начинаете диагностировать и устранять неполадки в работе сервера или сбой в работе.

    • Вы обязаны обратиться в службу поддержки Amazon, если все пойдет не так.
    • Это потому, что у вас не будет доступа к сырому железу, чтобы самостоятельно диагностировать и устранять неисправности. Хотите вызвать внешнего консультанта, чтобы помочь вам отладить или устранить неполадки? Вы будете связаны без доступа к базовому серверу.

    • Вы не можете выполнить репликацию в базу данных без RDS.
    • Ваш собственный центр обработки данных подключен к Amazon через VPC? Хотите репликации на облачный сервер? RDS не отвечает всем требованиям. Вы должны будете катиться самостоятельно — как мы описали выше. И если вы хотите выполнить репликацию в альтернативного облачного провайдера, снова RDS не будет работать для вас.

Похожие сообщения:

  1. Развертывание MySQL на Amazon EC2 — 8 рекомендаций
  2. Обзор: разместите свой веб-сайт в облаке, веб-сервисы Amazon Made Easy
  3. 5 способов повысить масштабируемость MySQL
  4. Лучшие вопросы интервью с MySQL DBA (часть 2)
  5. MySQL Cluster In The Cloud — Руководство для менеджеров