База данных MemSQL недоступна для чтения, пока конечный узел находится в режиме репликации - PullRequest
1 голос
/ 22 апреля 2019

У меня на сервере CentOS работает локальный кластер memsql (агрегатор и лист на одной машине).У меня есть база данных с именем offers. По какой-то причине я не могу выполнить какие-либо запросы к таблицам в моей базе данных.

Все работало нормально, пока я не попытался добавить другую машину в кластер.У меня была ИТ-команда на моем месте, чтобы скопировать сервер, на котором я работал (полностью).Я перешел на реплицированный сервер, удалил соответствующую базу данных, а затем зарегистрировал сервер с помощью команды memsql-toolbox-config register-node.Затем база данных показала, что она находится в переходном состоянии.Я перезапустил memsql с помощью memsql-ops и попал в эту ситуацию.

Выполнение простого запроса приводит к:

memsql> select * from table;
ERROR 2261 (HY000): Query `select * from table` couldn't be executed because of an in progress failover operation.  Check the status of the leaf nodes in the cluster (error 1049:'Leaf Error (172.26.32.20:3307): Unknown database 'offers_5'')

Выходные данные для команды состояния кластера:

memsql> show cluster status;
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
| Node ID | Host         | Port | Database | Role        | State       | Position | Master Host  | Master Port | Metadata Master Node ID | Metadata Master Host | Metadata Master Port | Metadata Role | Details                                         |
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
|       1 | 172.26.32.20 | 3306 | cluster  | master      | online      | 0:181    | NULL         |        NULL |                    NULL | NULL                 |                 NULL | Reference     |                                                 |
|       1 | 172.26.32.20 | 3306 | offers   | master      | online      | 0:156505 | NULL         |        NULL |                    NULL | NULL                 |                 NULL | Reference     |                                                 |
|       2 | 172.26.32.20 | 3307 | cluster  | async slave | replicating | 0:180    | 172.26.32.20 |        3306 |                       1 | 172.26.32.20         |                 3306 | Reference     | stage: packet wait, state: x_streaming, err: no |
|       2 | 172.26.32.20 | 3307 | offers   | sync slave  | replicating | 0:156505 | 172.26.32.20 |        3306 |                       1 | 172.26.32.20         |                 3306 | Reference     |                                                 |
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
4 rows in set (0.00 sec)

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

stage: packet wait, state: x_streaming, err: no

Запуск команды состояния репликации дает:

memsql> show replication status;
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
| Role   | Database | Master_URI | Master_State | Master_CommitLSN | Master_HardenedLSN | Master_ReplayLSN | Master_TailLSN | Master_Commits | Connected | Slave_URI                 | Slave_State | Slave_CommitLSN | Slave_HardenedLSN | Slave_ReplayLSN | Slave_TailLSN | Slave_Commits |
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
| master | cluster  | NULL       | online       | 0:181            | 0:181              | 0:177            | 0:181          |             86 | yes       | 172.26.32.20:3307/cluster | replicating | 0:180           | 0:181             | 0:180           | 0:181         |            84 |
| master | offers   | NULL       | online       | 0:156505         | 0:156505           | 0:156505         | 0:156505       |            183 | yes       | 172.26.32.20:3307/offers  | replicating | 0:156505        | 0:156505          | 0:156505        | 0:156505      |           183 |
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
2 rows in set (0.00 sec)

Я никогда не инициировал отработки отказа или репликации.Кто-нибудь знает, почему это происходит?Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ:

Используя memsql-ops Я получаю:

[me@memsql ~]$ memsql-ops memsql-list
 ID       Agent Id  Process State  Cluster State  Role    Host          Port  Version
 33829AF  Af13af7   RUNNING        CONNECTED      MASTER  172.26.32.20  3306  6.5.18
 BBA1B61  Af13af7   RUNNING        CONNECTED      LEAF    172.26.32.20  3307  6.5.18

Но с memsql-admin, с новыми инструментами memsql:

[me@memsql ~]$ memsql-admin list-nodes
✘ Failed to list nodes on all hosts: failed to list nodes on 1 host: 
172.26.32.20
No nodes found

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

2-е РЕДАКТИРОВАНИЕ:

Мне удалось решить эту проблему, удалив базу данных и данные кластера и настроив новую с помощью новых инструментов MemSQL, отбросив MemsqlOps.Прочитайте мой ответ .

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Мне удалось настроить рабочий кластер.

Как отметил Михахбхакти в своем ответе , я пытался использовать только новые инструменты MemSQL вместо устаревших MemSQL Ops. Это потребовало удаления агента MemSQL, существующего на обоих серверах, а затем следуя инструкциям в документации MemSQL. Вот шаги, которые я предпринял для тех, кто борется с этой проблемой, которая лучше описывается как: Мой MemSQL-Ops-managed-MemSQL-кластер не отвечает. Как я могу обновить его до рабочего MemSQL-tools-managed-cluster?

1. Сохранить, какие данные вы можете

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

SELECT * FROM important_data_containing_table INTO OUTFILE '/home/yourfolder/yourcsvfile.csv';

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

SHOW CREATE TABLE your_table_name

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

2. Удалите все, что связано с Memsql-Ops

Как сказано здесь о команде uninstall:

Останавливает локальный агент MemSQL Ops и удаляет все его данные.

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

И действительно, если есть запущенный узел (в моем случае это было), вам будет предложено запустить другую команду для удаления этих узлов: memsql-ops memsql-delete --all. Это удалит все данные в вашей базе данных, как указано в документации :

Удаляет все данные для узла MemSQL. Эта операция необратима и может привести к потере данных. Пользователям, которые хотят выполнить эту операцию, предлагается явно набрать «УДАЛИТЬ», чтобы быть уверенным в своем решении.

Вот почему я попросил вас сохранить то, что вам нужно:)

Это должно быть сделано для каждого хоста, который вы хотите включить в свой новый блестящий кластер.

3. Следуйте инструкциям по созданию нового кластера с использованием инструментов MemSQL

После очистки серверов от устаревшего агента и данных MemSQL вы можете следовать инструкциям здесь . Я решил настроить комплексную настройку нескольких хостов. Процесс попросит вас зарегистрировать хосты, а затем настроить роли узлов (главный агрегатор, аггрегаторы и листы), IP-адреса, пароли, порты и т. Д.

После этого вы можете попробовать протестировать кластер, внести изменения на одном компьютере и просмотреть их на другом. Кроме того, вывод для memsql-admin list-nodes на машине для моего кластера был:

+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
| MemSQL ID  |    Role    |     Host     | Port | Process State | Connectable? | Version | Recovery State | Availability Group |
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
| AAAAAAAAAA | Master     | 172.26.32.20 | 3306 | Running       | True         | 6.7.16  | Online         |                    |
| BBBBBBBBBB | Aggregator | 172.26.32.22 | 3306 | Running       | True         | 6.7.16  | Online         |                    |
| CCCCCCCCCC | Leaf       | 172.26.32.20 | 3307 | Running       | True         | 6.7.16  | Online         | 1                  |
| DDDDDDDDDD | Leaf       | 172.26.32.22 | 3307 | Running       | True         | 6.7.16  | Online         | 1                  |
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+

4. Восстановить данные

Повторно выполнить все запросы на создание таблиц, сохраненные на шаге 1, и импортировать все данные, экспортированные в csv, используя этот синтаксис:

LOAD DATA INFILE '/home/yourfolder/yourcsvfile.csv' INTO TABLE your_table;

И это все! Теперь вы можете управлять кластером, используя новую студию MemSQL, которая работает по умолчанию http://your_deployment_machine:8080.

Наслаждайтесь:)

0 голосов
/ 22 апреля 2019

Похоже, есть пара вещей, которые могут вызывать проблемы. Вообще говоря, клонирование сервера memsql не является чем-то, что поддерживается и не является лучшим способом добавления узлов. Похоже, что вы можете использовать как более старый инструмент управления Ops, так и более новые инструменты MemSQL. Я бы порекомендовал не устанавливать и не использовать Ops, а вместо этого придерживаться только новых инструментов MemSQL.

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

...