Рейтинг:0

Репликация AWS EC2 MySQL: конфигурация для запроса подчиненного устройства от главного

флаг us

Я успешно настроил ситуацию master-slave MySQL на отдельных экземплярах AWS EC2. Подчиненный сервер работает и успешно копирует ведущий.

Все идет нормально.

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

Ошибки, которые я получаю (в зависимости от настроек моего профиля безопасности AWS): «Отказано в подключении» или «Время ожидания подключения истекло».

На ведомом устройстве у меня было разрешение группы безопасности EC2 для основного IP-блока, который можно было использовать для подключения к порту 3306, и я использовал IP-адрес ведомого устройства в конфигурации соединения ведущего устройства.

Это привело к ошибке «Отказано в соединении», когда я попытался запросить ведомое устройство у ведущего.

На мастере я запустил «показать полный список процессов» и увидел, что подчиненный хост — это имя хоста AWS EC2, а не IP-адрес, а порт 44508 был добавлен в конец, поэтому я изменил информацию о соединении на мастере, чтобы использовать подчиненный хост. имя вместо IP-адреса и параметр группы безопасности на ведомом устройстве, чтобы разрешить трафик от ведущего устройства на порт 44508 вместо 3306.

Это привело к ошибке «Время ожидания подключения истекло».

Я пробовал комбинации IP/имени хоста/порта в группе безопасности ведомого устройства, но просто получил одну из этих двух ошибок с любой комбинацией.

Может ли кто-нибудь предложить советы о том, как настроить вещи, чтобы я мог выполнять запросы (только для чтения) на ведомом устройстве с этой главной машины и возвращать результаты обратно ведущему? ТИА.

Обе системы настроены одинаково, за исключением того, что на мастере также работает Codeigniter4, где я устанавливаю конфигурацию подключения:

Ubuntu 20.04.3 LTS и MySQL 8.0.26-0

Рейтинг:1
флаг la

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

Вы должны проверить:

  1. Если сервер MySQL прослушивает сеть на подчиненном сервере.
  2. Если группы безопасности разрешают вашим приложениям подключаться к подчиненному серверу.
  3. Ведомое устройство должно быть настроено только для чтения, чтобы предотвратить проблемы.
флаг us
Подчиненный сервер реплицируется правильно, данные передаются из главного двоичного журнала в подчиненный. 'show slave status' не показывает никаких ошибок, а обновления на ведущем устройстве почти сразу появляются на ведомом устройстве.«показать полный список процессов» на ведущем устройстве показывает ведомое устройство. Группа безопасности на ведущем устройстве разрешает доступ к ведомому устройству и от него. Группа безопасности на ведомом устройстве разрешает доступ к ведущему устройству и от него. Ведомый не настроен как доступный только для чтения, но я все равно должен иметь возможность запрашивать его, я думаю. Спасибо за Ваше внимание.
флаг us
Без сомнения, это связано с: На подчиненном сервере я не могу войти на подчиненный сервер как «подчиненный» пользователь. Таблица «mysql.user» показывает плагин для «подчиненного» пользователя как «cached_sha2_password» вместо «mysql_native_password», что может быть причиной того, что я не могу войти в систему как пользователь (даже как «root» ... я могу войти с 'судо mysql')
флаг us
Больше не пытаюсь войти в систему как «ведомый», как обычный пользователь, которого я использую на ведущем. Я определенно могу войти в подчиненную базу данных, используя обычные учетные данные пользователя. Однако никакого удовольствия от подключения с ведущего, поэтому я создал нового пользователя на ведущем с тем же именем и учетными данными, что и на ведущем, но с IP-адресом подчиненного узла, а затем с IP-адресом ведущего, а затем с именем узла, указанным в «показать полный список процессов», объединяющий те, что в строке подключения к базе данных, либо с портом 3306, либо с портом 44508, о котором сообщает «показать полный список процессов», но все равно без радости.
флаг la
Вы должны выполнять все команды, которые изменяют данные только на главном сервере, чтобы избежать проблем и создать пользователя с локальным хостом или 127.0.0.1 в качестве хоста, т.е. user@'127.0.0.1', если вы подключаетесь к MySQL с подчиненного сервера.
флаг us
Еще раз спасибо. Да, я выдаю все команды на мастере и позволяю им управлять тем, что происходит с слейвом. Проблем с репликацией нет. Это довольно зрелая база данных master со всеми пользователями localhost, указанными и доступными для использования на master. Я просто не могу понять, как запустить запрос на подчиненном устройстве от мастера. Я пытаюсь подключиться к ведомому устройству от ведущего устройства для выполнения своих запросов, и я ничего не запускаю ОТ ведомого устройства. Я хочу иметь возможность запускать запросы на ведомом устройстве ОТ мастера.
флаг la
Как вы подключаетесь с главного сервера к подчиненному серверу MySQL при попытке выполнить запрос?
флаг us
Спасибо, еще раз за внимание. Я использую типичную информацию о соединении с MySQL... хост, пользователь, пароль. Затем я просто проверяю, было ли установлено соединение с базой данных, но в каждом случае я не получаю никакого результата, кроме (а) сбоя соединения с базой данных и (б) ошибок «Соединение отклонено» или «Время ожидания соединения истекло». Я полностью открыл брандмауэр подчиненного сервера для любого TCP-трафика из любого источника, использующего любой порт, и получил сообщение об ошибке «Время ожидания подключения истекло». Я проверил, что сервер MySQL работает (и реплицирует мастер), и даже когда все открыто... Я сбит с толку.
флаг us
Когда я выдаю «показать реплики» на ведущем, я вижу ведомое устройство в результате, но запись не имеет значения «хост». Когда я выдаю «показать полный список процессов», я вижу в результате ведомое устройство с полным значением хоста. Возможно, это что-то значит?
флаг la
Покажите точную команду, которую вы используете для подключения, а также вы можете вставить my.cnf подчиненного устройства.
флаг us
ошибка_подключения) { die("Ошибка соединения: " . $conn->connect_error); } эхо "Подключено успешно"; ?>
флаг us
У вас есть конкретный вопрос о конфигурации MySQL? server_id=2, например.
флаг la
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/129860/discussion-between-martynas-saint-and-james-butler).
Рейтинг:0
флаг us

РЕШЕНО: В подчиненном файле /etc/mysql/mysql.conf.d/mysqld.cnf мне нужно было закомментировать строки «bind-address» и «mysqlx-bind-address», остановить подчиненное устройство, перезапустить mysqld и запустить подчиненное устройство.

Наличие «bind-address = 127.0.0.1» предотвратило подключения откуда-либо еще. Комментирование позволяет получить доступ из всех источников, а не только с локального хоста. Группа безопасности EC2 ограничивает доступ к порту 3306 только главным сервером.

Теперь все отлично работает. Еще раз спасибо за внимание.

флаг la
так что в основном это: вы должны проверить: Если сервер MySQL прослушивает сеть на подчиненном сервере. ;:) рад, что вы решили свою проблему.

Ответить или комментировать

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