Как настроить репликацию mysql master-slave в centos 7

Политкорректный Python

Из кода языка Python будут изъяты слова master и slave, поскольку они расцениваются как неполиткорректные. Напомним, master переводится с английского как «господин», а slave — как «раб». Часть разработчиков Python полагает, что эти слова в коде напоминают о рабстве (как об общественном и историческом явлении) и неравенстве людей (если говорить о правах и свободах).

Вопрос о замене терминов был поднят сотрудником Red Hat и одним из ключевых разработчиков Python Виктором Штиннером (Victor Stinner). В ходе обсуждения проблемы мнения разработчиков разделились. Часть сообщества выступила против политизированного истолкования устоявшихся терминов программирования, и, соответственно, против их замены.

По их мнению, раб и господин даже не могут считаться оскорбительными в политическом смысле, это всего лишь общеупотребительные слова английского языка — такого мнения, в частности, придерживается разработчик Раймонд Хеттингер (Raymond Hettinger). Высказывались также соображения, что замена терминов будет сбивать с толку разработчиков и отрицательно скажется на обратной совместимости.

Те разработчики, которые поддержали идею замены терминов, предложили заменить master на parent, main и server, а slave — на child и worker. Четыре из пяти вариантов были предложены Штиннером. Окончательное решение о замене было принято лично создателем Python Гвидо ван Россумом (Guido van Rossum), несмотря на его намерение сложить с себя полномочия великодушного пожизненного диктатора. Из пяти предложенных вариантов были утверждены четыре, поскольку пятый имеет отношение к терминологии UNIX ptys, от которой зависят сторонние проекты. Изменения вступят в силу в Python 3.8.

Шаг 2. Права на репликацию

Далее необходимо создать профиль пользователя, из под которого будет происходить репликация. Для этого запускаем консоль:

mysql -u root -p

Далее создаем и назначаем права пользователю для реплики:

  • REPLICATION SLAVE — привилегия позволяющая подключиться к серверу т запросить обновлённые на мастере данные;
  • REPLICATION CLIENT — привилегия, позволяющая использовать статистику:

    1. SHOW MASTER STATUS

    2. SHOW SLAVE STATUS

    3. SHOW BINARY LOGS

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_user'@'10.1.%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

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

USE newdatabase;
FLUSH TABLES WITH READ LOCK;

Проверяем статус Мастер-сервера:

SHOW MASTER STATUS;

Мы увидим что-то похожее на:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 | newdatabase  |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Причины изменений

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

Беспорядки в США из-за смерти Джорджа Флойда тоже могли стать причиной «антирасистских» изменений в Go

Об этом сообщил руководитель отдела криптографии и безопасности в отделе разработки языка Go в Google Филиппо Валсорда (Filippo Valsorda). Он подчеркнул, что слова allowlist и blocklist более понятны в сравнении whitelist и blacklist, и добавил, что внесенные изменения в целом окажут положительный эффект.

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

Политически корректный язык

Авторы языка программирования Go внесли в него «антирасистские» изменения. Они заключаются в полном удалении из документации к языку, а также из исходных текстов любых потенциально оскорбительных и политически некорректных терминов.

Модерации подверглись такие слова, как master (хозяин), slave (раб), blacklist (черный список) и whitelist (белый список). Так, master и slave были заменены на нейтральные process, pty, proc и control (в зависимости от контекста), тогда как термин blacklist превратился в blocklist (блоклист), а whitelist – в allowlist (список разрешений).

Go, также известный как Golang – это разработанный специалистами Google компилируемый многопоточный язык программирования. Работа над ним началась в сентябре 2007 г., а первая финальная версия языка вышла в ноябре 2009 г.

Удобства во дворе

Сами декорации сделаны очень профессионально и качественно, некоторые домики полностью оборудованы и забрендированы спонсорами: есть и «Сбербанк», и «Азбука вкуса» (пожалуй, самое популярное место у девочек), скоро откроется «Шоколадница». Компаниям такие детские игры позволяют в разы увеличивать лояльность подрастающего поколения.

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

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

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

Именно поэтому цена билета для взрослого, сопровождающего ребенка старше 7 лет, специально завышена: родители бывают слишком активны в этом детском городе. Поэтому было решено, что чем меньше взрослых будет в «Мастерславле», тем лучше.

Комната отдыха для родителей

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

Мастерславль. Что это?

Город Мастерславль – это первый в Москве и самый крупный в России семейный тематический парк, в котором дети знакомятся с профессиями. Он расположен в Афи-молле и занимает целых два этажа.

Мастерславль

Но это не просто развлекательный центр, не просто место «тусовки» – это действительно целый мир, устроенный, продуманный и полезный. Устроители парка постарались создать в городе модель современного гражданского общества: здесь своя валюта и банки, свои пограничники, полицейские и врачи, свои законы и традиции. И все это – только для детей.

У входа, сразу за раздевалкой, посетителей ждет перрон, с которого отправляется «поезд» Москва-Сити – Мастерславль. Рядом с перроном – огромная доска с «Табелью о рангах», согласно которой в городе осуществляется движение по карьерной лестнице. Кондуктор проверяет ваши билеты и… «Добро пожаловать в Мастерславль». В вагоне, во время «дороги», детям вкратце рассказывают о законах и правилах поведения, действующих в городе.

1: Настройка базы данных Master

На master-сервере откройте конфигурационный файл mysql:

В данный файл нужно внести несколько изменений.

Для начала найдите раздел, который выглядит так (он связывает сервер с локальным хостом):

Замените стандартный IP-адрес IP-адресом сервера.

Следующее изменение касается директивы server-id, расположенной в разделе mysqld. Здесь можно задать любую переменную (возможно, проще всего начать с 1), но число должно быть уникальным и не совпадать ни с одним другим server-id в группе репликации.

Убедитесь, что строка раскомментирована:

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

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

Внеся все нужные изменения, сохраните их и закройте конфигурационный файл.

Перезапустите MySQL:

Остальные действия нужно выполнить в оболочке MySQL.

Откройте оболочку MySQL:

Передайте привилегии slave-серверу. Эту строку можно также использовать для того, чтобы указать имя и пароль slave-сервера. Команда имеет такой формат:

Затем введите:

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

В текущей вкладке откройте базу данных «newdatabase».

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

Затем введите:

Должна появиться подобная таблица:

С этой позиции slave БД начнет репликацию. Запишите эти числа, они пригодится позже.

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

База данных все еще должна оставаться заблокированной. Экспортируйте базу данных в новое окно с помощью mysqldump (следующую команду нужно выполнить в оболочке bash, а не MySQL).

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

Теперь master БД готова.

Настройка Master-Slave репликации в MariaDB

В данном варианте репликации один сервер выступает в роли Slave-сервера, на который постоянно передаются данные с Master. Все изменения, которые будут проводится на сервере Slave, передаваться на Master не будут. Это более отказоустойчивый тип репликации баз данных. Чаще всего используется именно такой вариант. В такой конфигурации у вас всегда будет backup-сервер с актуальными данными, а при сбое на Slave-серверах, информация на Master-сервере не будет потеряна. Так же можно распределить нагрузку на БД для вашего проекта, чтобы приложения осуществляли чтение со Slave серверов, а данные записывались только через Master сервер. Таким образом вы сводите к минимуму отклик БД.

При настройке реплики базы данных MariaDB по типу master + slave, мастер сервера (master1) настраивается как описано выше.

Переходим к slave серверу. Добавляем в my.cnf строки:

Перезапускаем mariadb. На первом сервере берем данные bin_log.

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 664 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

На slave сервер в консоли консоли mysql выполняем следующее:

Query OK, 0 rows affected, 1 warning (0.000 sec)
Query OK, 0 rows affected (0.014 sec)

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

При этом также нужно создать дамп базы данных и использовать его для инициальной загрузки данных в MariaDВ на slave сервере.

Проверка статуса Slave:

Создаем БД на Master:

Query OK, 1 row affected (0.001 sec)

Проверяем, что база данных создалась и на Slave сервер:

+--------------------+
| Database |
+--------------------+
| information_schema |
| master_hello |
| master_test |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.001 sec)

Создадим БД на Slave и проверим, передались ли данные на наш Master.

Как видите, базу мы создали, и она есть на Slave. Проверяем, появилась ли она на Master. Ее нет. Репликация со slave на master не идет.

То есть репликация MariaDB работает только в одну сторону. Сделаем еще одну проверку, удалив БД master_hello с Slave-сервера:

И проверим, не удалилась ли она на Master-сервере:

Как мы видим, все в порядке и база на месте.

P.S. При настройке реплики, вы можете столкнуться с некоторыми подводными камнями, самый частый из них — это firewall. По умолчанию на Centos 7 установлен брандмауэр firewalld, в котором закрыт порт 3306, который и использует MariaDB. Вы можете либо открыть данный порт через iptables, либо отключить ваш сетевой экран (плохой вариант).

По-умолчанию в конфигурации my.cnf в параметре bind-address указан IP адрес, на котором ожидаются подключения к базе (). Чтобы разрешить и локальные и внешние подключения, нужно раскомментировать эту строку и добавить правило iptables, разрешающее подключения с IP адреса мастер/слейв сервера порne 3306.

При первичной настройке я столкнулся с такой проблемой и она легко выявляется. Если запустить проверку статуса Slave «SHOW SLAVE STATUS\G;», вы увидите ошибку:

Также в заключении хотелось бы сказать, что можно к конфигурации блока #replication в файле my.cnf добавить некоторые параметры. Ниже я приведу примеры и краткое описание параметров, которые мы прописывали, а также приведу примеры других функций, полезных при настройке репликации.

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

— обычно прописывается хостнейм сервера, можно указать IP-адрес

— путь до журнала обновлений

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

— сами логи репликации

Какие параметры еще можно использовать? Если вам нужно настроить реплику только для конкретной базы или нескольких, добавляем функцию:

— если нужно несколько БД, перечисляем через запятую.

Исключение каких-либо БД из репликации:

Обычно исключаются служебные базы, такие как:

information_schema ,mysql и performance_schema

Время хранения bin_log:

— где 10 это количество дней которые будут храниться логи.

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

На этом все наши настройки закончены. Думаю, с помощью данной статьи вы без проблем сможете настроить репликацию БД MariaDB как в режиме Master + Master, так и Master + Slave.

Как добраться

«Мастерславль» находится на Пресненской набережной. Главный ориентир деловой район «Москва-Сити» и торговый центр «АФИМОЛЛ-Сити». Вход расположен рядом с мостом «Багратион». Доехать до него можно на общественном транспорте или такси.

Метро

Ближайшая станция метро «Выставочная» на отдельном ответвлении Филевской линии (голубой ветки). Пересадка на станциях «Киевская» Кольцевой линии, «Деловой центр» Калининско-Солнцевской линии и Московского центрального кольца. В «Мастерславль» можно попасть через торговую галерею моста либо через метро, причем следует пользоваться выходом № 3 и садится в последний вагон. Подземка самый быстрый способ передвижения. Если ехать от центра города, то время в пути занимает около 15–20 минут.

Автобус

Автобусные остановки расположены на Пресненской набережной и Кутузовском проспекте. На пункт «Мост Багратион» приходит рейс:

№ 243 (маршрут Силикатный завод — Силикатный завод).

В десяти минутах ходьбы на Кутузовском проспекте остановка «Улица Дунаевского» с маршрутами:

  • № 91 (маршрут 4-й Сетуньский проезд — Матвеевское);
  • № 116 (маршрут Новозаводская улица — Фили);
  • № 157 (маршрут Беловежская улица — Беловежская улица);
  • № 205 (маршрут улица Довженко — совхоз «Заречье»);
  • № 324 (маршрут 2-й Мосфильмовский переулок — метро «Парк Победы»);
  • № 454 (маршрут Киевский вокзал — ЖК «Одинцовский Парк»);
  • № 474 (маршрут Киевский вокзал — Матвеевское);
  • № 840 (маршрут 66-й квартал Кунцева — 66-й квартал Кунцева);
  • № H2 (маршрут Беловежская улица — Беловежская улица);
  • № м2 (маршрут Рижский вокзал — Фили);
  • № м27 (маршрут Карачаровский путепровод — метро «Парк Победы»);
  • № т39 (маршрут Фили — Фили).

Троллейбусы

Остановка «Улица Дунаевского» на Кутузовском проспекте:

  • № 7 (маршрут метро «Парк Победы» — метро «Парк Победы»);
  • № 7к (маршрут метро «Парк Победы» — метро «Парк Победы»).

Такси

До «Мастерславля» удобно добираться, пользуясь приложениями такси: Яндекс. Такси, Uber, Gett, Maxim.

Городская жизнь в Мастерславле

Работать

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

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

Например, целая команда мусорщиков весело вываливает из центра по переработке мусора.

Как ни странно, эта профессия привлекает внимание многих. За стеклом мы видим, как мальчишки и девчонки выстроились вдоль сортировочной ленты

Наставница высыпает на ленту кучу мусора – банки, пластиковые бутылочки, бумажки. «Все знают, как выглядит железо? Правильно! Оно тяжелое и блестит! Итак, сюда железо, сюда – пластик, сюда – бумага», – раздает она последние инструкции и включает транспортер. Мусорная куча движется по кругу, и ребята, вопя от восторга, сортируют мусор, швыряя его в разные бачки.

Кстати, во всем городе стоят урны для раздельного сбора мусора, и гостям Города настоятельно рекомендуется не путать их.

Получив профессию, можно пойти работать и в архитектурное бюро,

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

Скоро заработает станция МЧС.

Кроме того, в Мастерславле есть свой театр и цирк, где дети сами готовят представление, рисуют афиши и дают представление.

Чему научатся дети?

Мастерская «Скорая помощь». Здесь дети узнают, чем «скорая» отличается от обычной больницы, кто там работает, и даже о том, чем отличаются открытый и закрытый переломы. В игровой форме ребята запоминают номера 112 и 03 и учатся оказывать первую медицинскую помощь.

Мастерская «Кондитерская». Наставники учат раскатывать готовое тесто, выпекать, украшать своё печенье, оформлять его в конверты. И забирают с собой.

Мастерская «Ростелеком». Детям рассказывают об устройствах умного дома. Например, о датчике протечки воды, который передаёт данные на ваш смартфон и автоматически вызывает сантехника. Или о датчике розетки, который оповестит, если вы забыли отключить, например, утюг, и поможет обесточить устройства удалённо через приложение.

Мастерская «Автошкола». Здесь тоже всё как в реальной жизни. Детям нужно выучить билеты, сдать теоретический экзамен, пройти медосмотр. Только после этого жителя города мастеров допускают к изучению автомобиля на автодроме. Итогом станет практический экзамен и получение прав. Кстати, налог в местной валюте тоже придётся заплатить.

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

Мастерская «Метеостанция». Наставники объясняют детям, зачем нужна профессия метеоролога, и как эти знания делают нашу жизнь удобнее. И, конечно же, гостей научат определять направление и скорость ветра и другие погодные условия.

Setup Master-slave Replication

Now, when we have two MySQL instances running on the same machine, we will setup the first instance as a master, and the second as a slave.

One part of the configuration was already performed in the chapter “Setting up mysqld_multi”. The only remaining change in the file is to set binary logging on the master. To do this, edit file with the following changes and additions in the group:

Restart the master MySQL instance in order for these changes to take effect:

In order for the slave to connect to the master with the correct replication privileges, a new user should be created on the master. Connect to the master instance using the MySQL client with the appropriate host and port:

Create a new user for replication:

Exit from the MySQL client.

Execute the following command in order to create a dump of the master data:

Here we use the option in order to have a comment containing a statement inside the backup file. That comment indicates the replication coordinates at the time of the backup, and we will need those coordinates later for the update of master information in the slave instance. Here is the example of that comment:

Import the dump you created in the previous step into the slave instance:

Finally, in order for slave instance to connect to the master instance, the master information on the slave needs to be updated with the appropriate connection parameters.

Connect to the slave instance using the MySQL client with the appropriate host and port:

Execute the following command in order to update the master information (take the replication coordinates from the dump file , as explained above):

Execute the following command in order to start the slave:

Execute the following command in order to verify the replication is up and running:

Congratulations. Your MySQL master-slave replication on the same machine is now successfully set up.

Шаг 2. Права на репликацию

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

GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;
даем права пользователю slave_user с паролем password

USE newdatabase;
FLUSH TABLES WITH READ LOCK;

Проверяем статус Мастер-сервера:

Мы увидим что-то похожее на:

mysql> SHOW MASTER STATUS;
+——————+———-+—————+——————+
| File                            | Position  | Binlog_Do_DB | Binlog_Ignore_DB     |
+——————+———-+—————+——————+
| mysql-bin.000001 | 107      | newdatabase   |                  |
+——————+———-+—————+——————+
1 row in set (0.00 sec)

Выделенные значения мы будем использовать для запуска Слейва

Шаг 1. Настройка Мастера

На сервере, который будет выступать мастером, необходимо внести правки в my.cnf :

  • server-id — идентификатор сервера, должен быть уникален. Лучше не использовать 1;
  • log_bin — путь к бинарному логу;
  • binlog_do_db — позволяет перечислить отдельные базы, для которых будет использоваться реплика.Если не инициализирована, то реплицируются все.
mysqld
# предлагаю указать последний октет IP-адреса
server-id = 11
log_bin = varlibmysqlmysql-bin.log
 
# название Вашей базы данных, которая будет реплицироваться
binlog_do_db = newdatabase

Перезагружаем MySQL:

# В зависимости от системы и ПО:
etcinit.dmysql restart
# или 
systemctl restart mysqld.service
# или 
systemctl restart mariadb.service

Шаг 6. Запуск Слейва

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

CHANGE MASTER TO MASTER_HOST=’10.10.0.1′, MASTER_USER=’slave_user’,
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE = ‘mysql-bin.000001’, MASTER_LOG_POS = 107;

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

Статус репликации

Проверить работу репликации на Слейве можно запросом:

mysql> SHOW SLAVE STATUS\G
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: gbichot-bin.005
Read_Master_Log_Pos: 79
Relay_Log_File: gbichot-relay-bin.005
Relay_Log_Pos: 548
Relay_Master_Log_File: gbichot-bin.005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 79
Relay_Log_Space: 552
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 8

vote

Article Rating

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

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

Adblock
detector