ОСНОВНОЕ

WORDPRESS

Операционные системы

Базы данных

Я знаю, что я ничего не знаю (Сократ).

Как настроить группу репликации MySQL на Ubuntu 16.04

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 17 апреля 2017

Как настроить группу репликации MySQL на Ubuntu 16.04

Введение

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

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

В этой статье мы создадим группу репликации MySQL с помощью набора из трех Ubuntu 16,04 серверов. Конфигурация будет охватывать работу одного первичного или несколько первичных групп репликации.

Предпосылки

Для того, чтобы следовать этой статьи, вы будете нуждаться в группе из трех серверов на Ubuntu 16,04. На каждом из этих серверов, вам нужно будет создать не суперпользователя с правами sudo и настроить основной брандмауэр. Мы будем использовать начальное руководство по настройке сервера для Ubuntu 16.04, чтобы удовлетворить эти требования и получить каждый сервер в состояние готовности.

Версия MySQL в репозиториях Ubuntu по умолчанию не включает плагин группы репликации, который нам нужен. К счастью, проект MySQL поддерживает свои собственные репозитории для последней версии MySQL, которая включает в себя этот компонент. Следуйте нашему руководство по установке MySQL на Ubuntu 16.04 для установки репликации, версии рупповой MySQL на каждом сервере.

Генерирование UUID для идентификации группы MySQL

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

На mysqlmember1 , используйте команду uuidgen, чтобы создать действительный UUID для группы:

  • uuidgen
Вывод
 

Скопируйте значение, которое вы получите. Мы будем ссылаться на его в тот момент, при настройки имени группы для нашего пула серверов.

Настройка группы репликации в файле конфигурации MySQL

Теперь мы готовы изменить файл конфигурации для MySQL. Откройте конфигурационный файл MySQL на каждом сервере MySQL:

 

По умолчанию этот файл используется только для источника дополнительных файлов из подкаталогов. Мы должны добавить нашу собственную конфигурацию под линиями!includedir. Это позволяет легко изменить все настройки из включенных файлов.

Для начала, откройте раздел для серверных компонентов MySQL, включив заголовок [mysqld]. Под ним мы вставим настройки, которые нужны для группы репликации. Префикс loose-позволяет MySQL корректно обрабатывать параметры без сбоев. Нам нужно будет заполнить и настроить многие из этих параметров в данный момент:

/etc/mysql/my.cnf

 

Мы разделили конфигурацию выше на четыре секции. Давайте рассмотрим их сейчас.

Шаблонные параметры групповой репликации

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

/etc/mysql/my.cnf
 

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

Общие параметры групповой репликации

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

Установите loose-group_replication_group_name на UUID, который вы создали ранее с командой uuidgen. Вставьте UUID скопированный в качестве значения этой переменной.

Затем установите loose-group_replication_ip_whitelist в список всех ваших MySQL IP – адресов серверов, разделенных запятыми. Настройка loose-group_replication_group_seeds должна быть почти такой же, как белый список, но следует добавить порт группы репликации, который мы будем использовать в конце каждого элемента. В этом руководстве мы будем использовать рекомендуемый порт 33061 для репликации группы:

/etc/mysql/my.cnf
 

Этот раздел должен быть одинаковым на каждом из серверов MySQL, поэтому убедитесь, что тщательно скопировали его.

Выбор между Single Primary или Multi-Primary

Далее, вы должны решить, следует ли настроить группы single-primary или multi-primary. В некоторых частях официальной документации MySQL, это различие также упоминается как репликации “single” против “multi-master”. В одной первичной конфигурации, MySQL обозначает один первичный сервер (почти всегда первый участник группы) для обработки операций записи. Мульти-основная группа позволяет писать любого из участников группы.

Если вы хотите настроить несколько первичных групп, раскомментируйте директивы loose-group_replication_single_primary_mode и loose-group_replication_enforce_update_everywhere_checks. Это позволит создать несколько основных групп. Для одной основной группы просто оставьте эти две строки закомментироваными:

/etc/mysql/my.cnf
 

Эти параметры должны быть одинаковыми на каждом из серверов MySQL.

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

Хост-специфические параметры конфигурации

Четвертый раздел содержит параметры, которые будут отличаться на каждом из серверов, в том числе:

  • ID сервера
  • Адрес для связывания
  • Адрес, чтобы сообщить другим участникам
  • Локальный адрес репликации и порт прослушивания

Директива server_id должна быть установлена на уникальный номер. Для первого элемента, просто установите «1» и увеличиваем количество на каждом дополнительном узле. Установите bind-address и report_host на IP – адрес текущего сервера, так чтобы экземпляр MySQL слушал внешние подключения и правильно сообщал свой адрес другим хостам. loose-group_replication_local_address также должен быть установлен IP – адрес текущего сервера с портом группы репликации (33061), приложенном к IP – адресу:

/etc/mysql/my.cnf
 

Завершите этот процесс на каждом из серверов MySQL.

Когда вы закончите, дважды проверьте, что общие настройки репликаций одинаковы на каждом хосте, и что настройки хоста-специфичный настроены для каждого хоста. Сохраните и закройте файл на каждом хосте, когда вы закончите.

Перезагрузите MySQL и включите удаленный доступ

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

 

В файле конфигурации MySQL, мы настроили службу для прослушивания внешних соединений на порту 3306 по умолчанию. Мы также определили порт 33061 в качестве порта, который участники должны использовать для координации репликации.

Нам нужно открыть доступ к этим двум портам в нашем брандмауэре, выполнив:

 

Имея доступ к открытым портам MySQL, мы можем создать пользователя репликации и включить плагин группы репликации.

Настройка репликации пользователя и включить плагин группы репликации

На каждом из серверов MySQL, необходимо войти в экземпляр MySQL с правами администратора и начать интерактивный сеанс:

 

Вам будет предложено ввести пароль администратора MySQL. После этого вы попадёте в сессию MySQL. Первое, что нам нужно сделать, это создать пользователя репликации.

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

Мы будем требовать SSL для пользователя репликации, предоставим ему привилегии репликации на сервере, а затем удалим привилегии для осуществления изменений. После этого мы снова включим двоичную регистрацию для возобновления нормальной работы. Убедитесь в том, что используете безопасный пароль при создании пользователя для репликации:

 

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

 

При пользователя репликации, мы можем включить плагин репликации группы и подготовить для инициализации группу. Так как мы используем последнюю версию MySQL, мы можем включить плагин, набрав:

 

Убедитесь в том, что плагин активен, введите команду:

 

Вывод
 

Строка group_replication подтверждает, что плагин был загружен и в данный момент активен.

Начало репликации группы

Теперь, когда у каждого сервера MySQL настроен пользователь репликации и включена репликация группы, мы можем начать привлекать участников в нашу группу.

Загрузка первого узла

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

Участники групп полагаются на существующих участниках для передачи данных репликации, уточненных списков участников, а также другой информации, когда первоначально соединяется с группой. Из-за этого нам нужно использовать несколько иную процедуру для запуска начального участника группы, так что он знает, что не следует ожидать эту информацию от других участников в своем списке.

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

 

Группа должна быть запущена с этим сервером в качестве единственного участника. Мы можем проверить это путем проверки записей внутри таблицы replication_group_members в базе данных performance_schema:

 

Вы должны увидеть одну строку, представляющую текущий хост:

Вывод
 

Значение ONLINE – MEMBER_STATE указывает на то, что этот узел полностью функционирует в пределах группы.

Затем создайте тестовую базу данных и таблицу для проверки нашей репликации:

 

Проверьте содержимое, чтобы убедиться, что оно был введено правильно:

  • SELECT * FROM playground.equipment;
Вывод
 

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

Запуск остальных узлов

Далее, на втором сервере, запустим репликацию группы. Так как у нас уже есть активный элемент, мы не должны грузить группу и можем просто присоединиться к ней:

 

На третьем сервере, запустите группу репликации таким же образом:

 

Проверьте список участников вновь. Вы должны увидеть три сервера в настоящее время:

 

Вывод
 

Все участники должны иметь MEMBER_STATE значение ONLINE. Для свежей группы, если какой – либо из узлов, перечисленный как RECOVERING в течение более чем одной или двух секунд, это обычно признак того, что произошла ошибка или что – то было неправильно настроено. Проверьте журнал в /var/log/mysql/error.log чтобы получить дополнительную информацию о том, что пошло не так.

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

 

Вывод
 

Если имеются данные о новых участниках, то это означает, что группа репликация работает правильно.

Тестирование возможности записи новых участников группы

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

Тестирование записи в одной первичной среде

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

 

Вывод
 

Значение запроса будет, MEMBER_ID что вы можете сопоставить с хостом, запрашивая список участников группы, как мы делали раньше:

 

Вывод
 

В этом примере мы можем видеть , что хозяин в 114.0.50.5настоящее время является основным сервером. Если попытаться записать в базу данных из другого участника, следует ожидать , что к сбою операции:

 

Вывод
 

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

Тестирование Пишет в нескольких первичной среде

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

Вы можете перепроверить , что ваша группа работает в нескольких первичном режиме, проверяя значение group_replication_primary_memberснова переменный:

 

Вывод
 

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

Проверьте это на втором сервере , введите команду:

 

Вывод
 

Второй сервер совершил операцию записи без каких-либо ошибок.

На третьем сервере , запрос , чтобы увидеть , что новый элемент был добавлен:

 

Вывод
 

Это подтверждает, что запись второго сервера была успешно реплицирована.

Теперь тест возможности записи на третий сервер, вводим:

 

Вывод
 

Назад на первый сервер, проверьте, что операции записи из обоих новых участников были скопированы обратно:

 

Вывод
 

Это подтверждает, что репликация работает в каждом направлении, и что каждый элемент способен выполнять операции записи.

Приведение группы

После того, как группа загрузилась, отдельные участники могут присоединиться и оставить без влияния на доступность, до тех пор, пока имеется достаточно участников, чтобы избрать первичные сервера. Однако, если некоторые изменения конфигурации сделаны (например, переключение между одним и несколькими первичными серверами), или все участникы группы уходят, возможно, потребуется повторная начальная загрузка группы. Вы можете сделать это точно так же, как вы делали изначально.

На вашем первом сервере, установите переменную group_replciation_bootstrap_group, а затем начните инициализацию группы:

  • SET GLOBAL GROUP_REPLICATION_BOOTSTRAP_GROUP=ON;
  • START GROUP_REPLICATION;
  • SET GLOBAL GROUP_REPLICATION_BOOTSTRAP_GROUP=OFF;

После того, как первый участник вступил в группу, другие участники могут присоединиться:

  • START GROUP_REPLICATION;

Выполните этот процесс для дополнительных участников:

  • START GROUP_REPLICATION;

Теперь группа должна быть доступной в Интернете со всеми участниками:

 

Вывод
 

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

Присоединение автоматически к группе при запуске MySQL

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

Настройте, если вы хотите, чтобы участники автоматически присоединиться при загрузке. Тем не менее, есть некоторые вещи, которые вы должны знать:

  • Во-первых, этот параметр влияет только тогда, когда сам экземпляр MySQL запускается. Если элемент удаляется из группы из-за проблем тайм-аута, но экземпляр MySQL остается в Интернете, участник не будет автоматически подключаться.
  • Во-вторых, имея этот параметр включенным, для первичной развернутой группы это может быть вредным. Когда есть несуществующая группа, при присоединении, процесс MySQL займет много времени, для запуска, потому что он будет пытаться связаться с другими, несуществующими участниками для инициализации. Только после длительного тайм-аута он прекращает процесс присоединения и запускается нормально. После этого вы должны будете использовать процедуру, описанную выше, для начальной загрузки группы.

С учетом указанных выше предостережений, если вы хотите настроить узлы автоматически присоединять к группе при запуске MySQL, откройте основной файл конфигурации MySQL:

  • sudo nano /etc/mysql/my.cnf

Внутри, найдите переменную loose-group_replication_start_on_boot, и установите ее в положение «ON»:

/etc/mysql/my.cnf
 

Сохраните и закройте файл, когда вы закончите. Участник должен автоматически пытаться присоединиться к группе в следующий раз при запуске его экземпляра в MySQL.

Вывод

В этой статье мы рассмотрели, как настроить репликацию группы MySQL между тремя серверами на Ubuntu 16,04. Для отдельных первичных установок, участники автоматически избирают первичный для записи, когда это необходимо. Для многих первичных групп, любой участник может выполнять операции записи и обновления.

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


Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Простая логическая игра "Поймай кота". Задача игры окружить кота точками так, чтобы он не смог убежать с поля. Постигла неудача - начни игру снова!

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close