Настройка Manticore Galera Cluster

Добрый вечер!
OS: Centos 6 (Первый сервер), Centos 7 (Второй сервер)
Software: Manticore-3.3.0
Index: RT
Имеется одиночный сервер Manticore с наполненными индексами. Хочу превратить его в кластер. В настройке manticore.conf добавил:
#replication block
listen = 9312
listen = 172.16.250.1:9360-9370:replication
data_dir = /var/lib/manticore
server_id = 1
Второй сервер пустой, установил Manticore аналогичной версии, перенес настройки. Отличаются только:
#replication block
listen = 9312
listen = 172.16.250.2:9370-9380:replication
data_dir = /var/lib/manticore
server_id = 2
Далее на первом сервере создал кластера:
CREATE CLUSTER test
Запустил на втором сервере Manticore и прицепил к кластеру:
JOIN CLUSTER test AT ‘172.16.250.1:9312’
Однако синхронизации данных с первым сервером не происходит, хотя обе машины в кластере, в состоянии “Synced” и “Primary”. При полной остановке кластера новый кластер c параметрами --new-cluster и --new-cluster-force не поднимается.

Просьба помочь разобраться в данном вопросе.

Здравствуйте. Какого типа индексы? RT? Делали ли ALTER CLUSTER ... ADD ?

Прошли ли вы этот курс https://play.manticoresearch.com/replication/ ?

1 Like

Большое спасибо за столь оперативный ответ. Да, RT. Нет, не делал. Спасибо за ссылку на курс, обязательно ознакомлюсь. Извините за столь простые вопросы, впервые собираю кластер Galera для Manticore.
P.S.: Опыт в администрировании MariaDB Galera Cluster вообще не помог)

Мы всё, что касается внутренностей Галеры попытались как можно глубже спрятать, чтобы сделать всё максимально просто для пользователя. Надеюсь, что вы просто не сделали ALTER CLUSTER ... ADD и этого будет достаточно. Но если будут проблемы после просмотра курса - пишите, будем разбираться.

Спасибо вам за помощь. Да, нужно было переместить индексы в кластер. Второй сервер синхронизировался с первым.
Есть вопросы (не столь существенные):

  1. По умолчанию для репликации необходимо 2 порта. Наличие 2 и более портов необходимо при использовании многопоточности?
  2. Предусмотрен ли Galera Arbitrator (в случае наличия в кластере 2 серверов + защита от SplitBrain)?

нет, порты нужны если вы создаёте несколько кластеров на ноде \ на одном боксе

garb может работать так же как и с родной galera node, тк он не завязан на специфичные особенности репликации Manticore

При добавлении ноды к кластеру (JOIN CLUSTER esz AT ‘172.16.250.1:9312’) возникает следующая ошибка:
ERROR 1064 (42000): (null)

MySQL [(none)]> SHOW STATUS LIKE ‘%node%’;
±-----------------------±--------------------+
| Counter | Value |
±-----------------------±--------------------+
| cluster_esz_node_state | destroyed |

Подскажите, пожалуйста, в чем может быть проблема.

нужно рестартовать демон с опцией --logreplication
повторить одбавление ноды и выложить конфиг демона, чтобы можно было посмотреть последовательность команд и почему возникает ошибка.

А на ноде 172.16.250.1 что показывает show status для кластера?

Снял логи с без данной опции (с сервера, пытающегося присоединиться к кластеру)

searchd.log

[Tue Mar 17 22:50:30.698 2020] [12429] watchdog: main process 12430 forked ok
[Tue Mar 17 22:50:30.699 2020] [12430] listening on all interfaces, port=9306
[Tue Mar 17 22:50:30.699 2020] [12430] listening on all interfaces, port=9312
[Tue Mar 17 22:50:30.704 2020] [12430] WARNING: ‘binlog_max_log_size = 2147483648’ clamped to 2147483647(INT_MAX)
[Tue Mar 17 22:50:30.705 2020] [12430] accepting connections
[Tue Mar 17 22:50:30.705 2020] [12432] prereading 5 indexes
[Tue Mar 17 22:50:30.705 2020] [12432] prereaded 5 indexes in 0.000 sec
[Tue Mar 17 22:51:56.174 2020] [12471] WARNING: Could not open state file for reading: ‘/var/lib/manticore/grastate.dat’
[Tue Mar 17 22:51:56.174 2020] [12471] WARNING: No persistent state found. Bootstraping with default state
[Tue Mar 17 22:51:56.197 2020] [12471] WARNING: Fail to access the file (/var/lib/manticore/gvwstate.dat) error (No such file or directory). It is possible if node is booting for first time or re-booting after a graceful shutdown
[Tue Mar 17 22:57:14.609 2020] [15234] FATAL: invalid GTID, (null)

query.log
/* Tue Mar 17 22:57:20.111 2020 conn 1 */ JOIN CLUSTER esz AT ‘172.16.250.1:9312’ # error=(null)

Логи с инициатора кластера.

searchd.log

[Tue Mar 17 22:57:14.608 2020] [7173] WARNING: read error in /var/lib/manticore/serviceclasses.4.spb (No such file or directory); 0 of -1569984198 bytes read
[Tue Mar 17 22:57:14.619 2020] [7173] WARNING: ‘172.16.250.2:9312’: remote error: invalid GTID, (null)
[Tue Mar 17 22:57:15.620 2020] [7172] WARNING: last message repeated 1 times
[Tue Mar 17 22:57:15.620 2020] [7172] WARNING: 1.0 (daemon_7169_esz): State transfer to 0.0 (daemon_12471_esz) failed: -125 (Operation canceled)
[Tue Mar 17 22:57:15.626 2020] [7172] WARNING: SYNC message from member 139758235811840 in non-primary configuration. Ignored.
[Tue Mar 17 22:57:19.277 2020] [7171] WARNING: discarding established (time wait) c1a671c4 (tcp://172.16.250.24:9363)

Любопытно, что файл /var/lib/manticore/serviceclasses.4.spb существует, права и владелец выставлены корректно

Чуть позже скину логи с опцией --logreplication

у вас нода к которой вы пытаетесь присоединится non primary

вам нужно или стартовать эту ноду как primary через bootstrap или через set statement сделать ее primary как написано в документации

Состояние инициатора кластера перед добавлением второй ноды (судя по состоянию нода в режиме primary):

MySQL [(none)]> SHOW STATUS LIKE ‘cluster%’;
±---------------------------------------±--------------------------------------------------------+
| Counter | Value |
±---------------------------------------±--------------------------------------------------------+
| cluster_name | esz |
| cluster_esz_state_uuid | 8a50868e-688c-11ea-a44e-17967339de39 |
| cluster_esz_conf_id | 5 |
| cluster_esz_status | primary |
| cluster_esz_size | 1 |
| cluster_esz_local_index | 0 |
| cluster_esz_node_state | synced |
| cluster_esz_nodes_set | 172.16.250.1:9312,172.16.250.2:9312 |
| cluster_esz_nodes_view | 172.16.250.1:9312,172.16.250.2:9360:replication |
| cluster_esz_indexes_count | 5 |
| cluster_esz_indexes | address,pupils,requestind_v2,serviceclasses,services_v2 |
| cluster_esz_local_state_uuid | 8a50868e-688c-11ea-a44e-17967339de39 |
| cluster_esz_protocol_version | 9 |
| cluster_esz_last_applied | 5 |
| cluster_esz_last_committed | 5 |
| cluster_esz_replicated | 5 |
| cluster_esz_replicated_bytes | 736 |
| cluster_esz_repl_keys | 5 |
| cluster_esz_repl_keys_bytes | 160 |
| cluster_esz_repl_data_bytes | 231 |
| cluster_esz_repl_other_bytes | 0 |
| cluster_esz_received | 12 |
| cluster_esz_received_bytes | 1215 |
| cluster_esz_local_commits | 0 |
| cluster_esz_local_cert_failures | 0 |
| cluster_esz_local_replays | 0 |
| cluster_esz_local_send_queue | 0 |
| cluster_esz_local_send_queue_max | 1 |
| cluster_esz_local_send_queue_min | 0 |
| cluster_esz_local_send_queue_avg | 0.000000 |
| cluster_esz_local_recv_queue | 0 |
| cluster_esz_local_recv_queue_max | 3 |
| cluster_esz_local_recv_queue_min | 0 |
| cluster_esz_local_recv_queue_avg | 0.333333 |
| cluster_esz_local_cached_downto | 1 |
| cluster_esz_flow_control_paused_ns | 0 |
| cluster_esz_flow_control_paused | 0.000000 |
| cluster_esz_flow_control_sent | 0 |
| cluster_esz_flow_control_recv | 0 |
| cluster_esz_flow_control_interval | [ 100, 100 ] |
| cluster_esz_flow_control_interval_low | 100 |
| cluster_esz_flow_control_interval_high | 100 |
| cluster_esz_flow_control_status | OFF |
| cluster_esz_cert_deps_distance | 1.000000 |
| cluster_esz_apply_oooe | 0.000000 |
| cluster_esz_apply_oool | 0.000000 |
| cluster_esz_apply_window | 1.000000 |
| cluster_esz_commit_oooe | 0.000000 |
| cluster_esz_commit_oool | 0.000000 |
| cluster_esz_commit_window | 1.000000 |
| cluster_esz_local_state | 4 |
| cluster_esz_local_state_comment | Synced |
| cluster_esz_cert_index_size | 5 |
| cluster_esz_cert_bucket_count | 22 |
| cluster_esz_gcache_pool_size | 2464 |
| cluster_esz_causal_reads | 0 |
| cluster_esz_cert_interval | 0.000000 |
| cluster_esz_open_transactions | 0 |
| cluster_esz_open_connections | 0 |
| cluster_esz_ist_receive_status | |
| cluster_esz_ist_receive_seqno_start | 0 |
| cluster_esz_ist_receive_seqno_current | 0 |
| cluster_esz_ist_receive_seqno_end | 0 |
| cluster_esz_incoming_addresses | 172.16.250.1:9312,172.16.250.2:9360:replication |
| cluster_esz_cluster_weight | 1 |
| cluster_esz_desync_count | 0 |
| cluster_esz_evs_delayed | |
| cluster_esz_evs_evict_list | |
| cluster_esz_evs_repl_latency | 0/0/0/0/0 |
| cluster_esz_evs_state | OPERATIONAL |
| cluster_esz_gcomm_uuid | 8a4fb079-688c-11ea-b428-ffe23ab715f8 |
±---------------------------------------±--------------------------------------------------------+
71 rows in set (0.001 sec)

Ссылка на логи с --logreplication

https://drive.google.com/open?id=1ntfVHelaH8hfUy99msCZyvlopmeI-dQg

У меня не открывается.

да ссылка не открывается и не понятно,

нужен логи с ноды где кластер сформирован и ноды которая присоединяется (с ip этих нод, чтобы было понятно кто где) и выводы SHOW STATUS LIKE ‘cluster%’; на обоих нодах

Вы можете загрузать логи на наш write only FTP

ftp: dev.manticoresearch.com
user: manticorebugs
pass: shithappens

нужно только создать папку вида github-issue-XXX

Открыл расширенный доступ.

как называется нода \ лог с кластером и как называется нода \ лог которая присоединяется?

1_search.log - инициатор кластера, к нему присоединяются
2_search.log - присоединяется к кластеру

Залил статусы нод после неудачного присоединения + файлы конфигураций manticore

нашел в логе демона1 - который делал SST ошибку

WARNING: ‘172.16.250.24:9312’: remote error: /var/lib/manticore/requestind_v2.5.spm sha1 does not matched, expected cf1b34199df4e6fb5156f261e8169f1e61659329, got 6e6bfedaf39d0379f514073b2ed111b941c4b66d

ну те передача файла не удалась почему-то. Можно посмотреть отличая в индексах requestind_v2.5 на обоих нодах, стереть файлы индекса и попытатся сделать JOIN еще раз.
Или предоставить воспроизводимый кейс \ несколько Docker контейнеров - который позволит воспроизвести такую ошибку локально.

Ошибка с присоединением ноды к кластеру. Новые логи залил в облако. Теперь логи ссылаются на ошибку в другом индексе. Может стоит понизить версию Manticore? Какая рекомендуемая версия galera плагина? В текущей конфигурации используется 25.3.28.