В этой статье мы рассмотрим, как настроить репликацию MySQL в Amazon EC2. Это довольно простое введение в репликацию, предназначенное для начинающих. Мы расскажем, как запустить экземпляр Amzon, установить лампу и настроить репликацию.
Что такое репликация
Репликация — это не что иное, как создание нескольких копий одного и того же сервера баз данных или выбранных баз данных или только выбранных таблиц. Прежний называется master, а позже — slave-серверы. Мы также можем иметь несколько главных серверов. Репликация может использоваться для обеспечения высокой доступности, масштабируемости, а также для повышения производительности приложений.
MySQL поддерживает одностороннюю репликацию, при которой обновления на главных серверах будут отправляться на подчиненные серверы, а не в обратном направлении. Если нам нужна двухсторонняя синхронизация, нам может потребоваться перейти на кластеры. Данные на главном сервере будут обновляться клиентскими приложениями. Наша цель — обновить эти изменения и на нашем подчиненном сервере. Чтобы репликация работала, мы должны включить двоичное ведение журнала на главном сервере. Основным механизмом репликации является передача журналов от главного к подчиненному. Когда на главном сервере выполняется операция DML, эта информация добавляется в двоичный журнал. Наши подчиненные серверы получат эту информацию и обновят подчиненные базы данных.
Запуск экземпляров EC2
Прежде чем перейти к репликации, нам нужно иметь два экземпляра EC2. Я обычно получаю доступ к aws через консоль управления AWS . Войдите в консоль управления. Перейдите на вкладку EC2 и нажмите кнопку Launch instance. В списке AMI сообщества выберите свежий образ Ubuntu 10.10 и запустите экземпляр.
Сделайте то же самое, чтобы запустить еще один экземпляр. Подключитесь к обоим экземплярам, используя ssh в двух терминалах.
ssh -i your_key.pem [email protected]
Теперь нам нужно установить mysql на обоих серверах. Я люблю устанавливать лампы, чем просто MySQL. Tasksel — хорошая утилита для установки многих приложений. Итак, первая интал тасксел
sudo apt-get install tasksel
Запустите утилиту tasksel, выберите лампу и установите. Он автоматически установит все нужные нам пакеты. Теперь наша среда готова. Перейдем к части репликации.
Важные параметры для репликации
идентификатор сервера — этот параметр используется в репликации для однозначной идентификации главного и подчиненных устройств. Каждому серверу будет присвоено уникальное значение этому параметру.
log_bin — этот параметр указывает базовое имя двоичного файла журнала.
binlog_do_db — Определяет имена базы данных для регистрации. Мы можем указать несколько баз данных или оставить этот параметр пустым для регистрации всех баз данных;
binlog_ignore_db — Определяет базы данных, которые должны быть исключены из журнала. Пропускная
сеть — Это еще один важный параметр, который вы должны прокомментировать. В противном случае ваш главный сервер не позволит работать в сети.
связывать-адрес— Адрес, к которому вы хотите привязать свой сервер. Оставьте его прокомментированным или укажите 0.0.0.0 (будет принимать запросы на подключение со всех адресов).
Теперь перейдем к реальной части репликации. Прежде всего мы настроим мастер-сервер. Я предполагаю, что ваши два сервера работают в одном регионе. Отредактируйте комментарий к файлу конфигурации mysql (my.cnf), если он есть, или добавьте следующую строку
server-id = 1
Удостоверьтесь, что пропускает сеть , прокомментирована.
Для bind-адреса либо укажите публичный IP-адрес первого экземпляра, либо прокомментируйте его. Прокомментируйте следующую строку или добавьте его, если он не существует.
log_bin = /var/log/mysql/mysql-bin.log
Хорошо, теперь наш главный сервер почти готов. Вы также можете указать binlog_do_db, если хотите выполнять репликацию только для выбранных баз данных.
binlog_do_db= my_database
Перезапустите mysql и войдите на сервер.
ubuntu@ip-10-117-45-207:~$ sudo service mysql restart ubuntu@ip-10-117-45-207:~$ mysql -u root -p
Создать пользователя репликации
Рекомендуется создать отдельного пользователя для репликации MySQL, к которому подчиненные могут проходить аутентификацию. Подчиненные будут подключаться к мастеру, используя учетные данные этого пользователя.
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repusername' IDENTIFIED BY 'password'; mysql> FLUSH PRIVILEGES; mysql> FLUSH TABLES WITH READ LOCK; mysql>SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000019 | 106 | | | +------------------+----------+--------------+------------------+
Мы почти закончили настройку нашего главного сервера. Теперь подключитесь ко второму экземпляру в другом терминале. Отредактируйте файл my.cnf, чтобы внести следующие изменения.
Server-id = 2 log_bin = /var/log/mysql/mysql-bin.log (Not mandatory)
Перезапустите MySQL здесь также
ubuntu@domU-12-31-39-04-55-CF:~$ sudo service mysql restart
Нам нужно сообщить нашему подчиненному серверу детали главного сервера, такие как имя хоста, имя пользователя и пароль репликации и т. Д. Здесь мы будем использовать amazon private dns в качестве основного имени хоста. Посмотрите скриншот ниже, чтобы найти свой личный DNS. Другие вещи, которые нужны подчиненному серверу, — это имя главного журнала и позиция журнала, которые мы получили, введя show master status на главном сервере. Теперь мы можем подключить подчиненное устройство к мастеру, введя следующую команду
mysql> CHANGE MASTER TO MASTER_HOST = 'domU-12-31-39-04-55-CF.compute-1.internal' MASTER_USER ='repusername', MASTER_PASSWORD='password', MASTER_LOG_FILE = 'mysql-bin.000019', MASTER_LOG_POS =106; mysql> START SLAVE;
Теперь на главном хосте выполните следующую команду, чтобы снять блокировку.
mysql> UNLOCK TABLES;
Теперь давайте создадим базу данных и таблицу в master для проверки репликации.
mysql> CREATE DATABASE replication_test;
на подчиненном сервере, когда вы вводите команду show database, она также перечислит нашу новую базу данных. Точно так же каждое изменение, которое мы вносим в master, будет перенесено и в slave.
Резюме
В этой статье я попытался продемонстрировать как можно более простые вещи. В любой момент, если вы не получили его, или я ошибаюсь, пожалуйста, не стесняйтесь добавлять их в качестве комментария.
КОНЕЦ