Настройка MySQL Group Replication (Мастер-Мастер)

0

Я собираюсь начать тестирование мастер мастер установки с использованием MySQL Group Replication. Я настроил 2 (пока) машины, скорее всего, будет третьим. Они оба имеют 2 сетевых интерфейса, один для доступа к приложениям, а другой - только IP-адрес локальной сети для связи между узлами.

Я вижу в некоторых документах, где упоминается использование двух сетевых карт, одна для связи между узлами и одна для связи с приложениями. Я нахожусь в точке, где я редактирую файл /etc/mysql/my.cnf. Мне нужно понять эти настройки:

Скажем, у моего приложения ниц есть ip 10.3.0.4, а у сетевой карты только NIC 10.3.1.4. То же самое на машине 2.

bind-address = "10.3.0.4"
report_host = "10.3.??" ??
loose-group_replication_local_address = "10.3.1.4:33061"

К какому IP принадлежит хост отчета? Я понял, что свободный-group_replication_local_address - это, по сути, еще один связывающий адрес, но для связи между узлами, но я не могу найти никаких примеров многоканальных установок, которые также имеют дело с этими настройками. Все учебники, в которых есть эти строки, показывают одинаковый ip из-за единственного никеля.

Среда: Ubuntu 16.04 в Azure

Я следую этому руководству по установке: https://www.digitalocean.com/community/tutorials/how-to-configure-mysql-group-replication-on-ubuntu-16-04

Бит о двойных никсах происходит из фрагментов примерно 6 разных страниц.

РЕДАКТИРОВАТЬ: @roothann выпрямил меня на том, что должен делать хозяин отчета. Теперь у меня возникла новая проблема. После того, как mysql был перезапущен, порт 33061 не отображается в netstat, и я получаю эту ошибку в журналах: «Не удалось получить имя партнера при подключении к серверу 10.3.1.5 с ошибкой 111 - Отказ в соединении. [GCS] Ошибка при открытии соединения с 10.3.1.5:33061 на локальном порту: 33061. Ошибка = 0 "Есть идеи? Я добавил плагин group_replication, но когда я делаю эту команду: mysql> START GROUP_REPLICATION; ОШИБКА 3096 (HY000): Команда START GROUP_REPLICATION не выполнена, так как произошла ошибка при инициализации уровня групповой связи.

Вот что заставило меня проверить логи и посмотреть на netstat.

ДРУГОЕ РЕДАКТИРОВАНИЕ: Как отмечено ниже, по какой-то причине команда безопасной установки не удалила директиву, чтобы принимать соединения только локально. Это исправлено. Новая проблема заключается в том, что данные не синхронизируются. Второй узел вышел из группы, потому что не смог завершить восстановление.

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | f0bcfc98-4255-11e8-b39f-000d3a1db637 | 10.3.1.4    |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

Итак, по какой-то причине репликация пытается происходить на интерфейсах локальной сети, но на обычном порту mysql вместо 33061. Я попытался это исправить, и я получил это:

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PORT=33061, MASTER_PASSWORD='the password' FOR CHANNEL 'group_replication_recovery';

ERROR 3139 (HY000): CHANGE MASTER with the given parameters cannot be performed on channel 'group_replication_recovery'.

РЕДАКТИРОВАТЬ 17 мая: я перестроил кластер с нуля, на этот раз с 3 машинами. Все та же проблема. Первый узел подходит. Дополнительные два также появляются, но показывают только Восстановление, затем удаляются из кластера.

на первом узле я получаю это в журнале:

2018-05-17T14:37:21.859153Z 27 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''.

+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 38d4aa76-592f-11e8-814a-000d3a60e580 | 10.7.1.11   |       33061 | RECOVERING   | PRIMARY     | 8.0.11         |
| group_replication_applier | 3dbbb30f-592f-11e8-8fc7-000d3a603364 | 10.7.1.12   |       33061 | RECOVERING   | PRIMARY     | 8.0.11         |
| group_replication_applier | b0ff0148-592e-11e8-aa03-000d3a60e4cc | 10.7.1.10   |       33061 | ONLINE       | PRIMARY     | 8.0.11         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)

Я получаю это в журналах с одного из других серверов:

2018-05-17T14:57:17.970789Z 18 [ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.'
2018-05-17T14:58:18.023898Z 18 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='10.7.1.10', master_port= 33061, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='10.7.1.10', master_port= 33061, master_log_file='', master_log_pos= 4, master_bind=''.

Я замечаю, что на первом узле переменная master_host пуста, а на втором заполнена ip первичного. Теперь, поскольку все они должны быть хозяевами, разве у первички не должно быть чего-то также?

Заранее спасибо!

Брюс
источник
report_host - это строка, которую вы просто определяете как хотите. Вы говорите о InnoDB Cluster из GA 5.7? Если да, то используете ли вы mysqlsh для начальной загрузки?
roothahn
@roothahn Я не уверен, я просто следую этому уроку, он ничего не сказал о innodb специально. Кроме того, я не думаю, что report_host является случайным. Это должен быть либо ip для адреса привязки, либо локальный адрес представителя. Я пытаюсь выяснить, какой.
Брюс
Я не сказал, что это случайно (это не должно меняться, чтобы быть понятным), но это строка, которую вы определяете, обычно это имя хоста или IP-адрес ведомого (чтобы вы могли идентифицировать его с помощью SHOW SLAVE HOSTS на ведущем устройстве). Но если вы определили строку или псевдоним, который не является именем хоста, это тоже хорошо. Это не связано с bind_address
roothahn
@roothahn хорошо, это имело больше смысла. Я пошел с IP-адресом только для локальной сети, поскольку именно так узлы общаются друг с другом. Новая проблема, и я также отредактирую основной пост, состоит в том, что после перезапуска mysql порт 33061 не отображается в netstat, и я получаю эту ошибку: «Не удалось получить имя узла при подключении к серверу 10.3. 1.5 с ошибкой 111 - Отказ в соединении. [GCS] Ошибка при открытии соединения с 10.3.1.5:33061 на локальном порту: 33061. Ошибка = 0 "Есть идеи?
Брюс
может быть, в вашем my.cnf отсутствует значениеoose-group_replication_group_seeds. (разделенный запятыми список комбинаций ip: port всех узлов в кластере). это точка, где я определил 13306
roothahn