MariaDB galera кластер 10.2 второй узел "Не удалось открыть канал" - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь запустить mariadb:10.2.14 как кластер galera на моем компьютере с Windows локально, используя docker compose. Запуск исходного узла boot работает нормально, но второй узел не может присоединиться к кластеру с ошибкой:

узел_1 | 2018-05-04 3:13:46 140187778701184 [Примечание] WSREP: представление ((пусто))

node_1 | 2018-05-04 3:13:46 140187778701184 [ОШИБКА] WSREP: не удалось открыть внутреннее соединение gcomm: 110: не удалось достичь основного представления: 110 (тайм-аут соединения) в gcomm / src / pc.cpp: connect (): 158

node_1 | 2018-05-04 3:13:46 140187778701184 [ОШИБКА] WSREP: gcs / src / gcs_core.cpp: gcs_core_open (): 208: Не удалось открыть внутреннее соединение: -110 (истекло время ожидания соединения)

узел_1 | 2018-05-04 3:13:46 140187778701184 [ОШИБКА] WSREP: gcs / src / gcs.cpp: gcs_open (): 1458: не удалось открыть канал 'galera' в 'gcomm: // boot': -110 (соединение тайм-аут)

узел_1 | 2018-05-04 3:13:46 140187778701184 [ОШИБКА] WSREP: сбой подключения gcs: истекло время ожидания соединения

узел_1 | 2018-05-04 3:13:46 140187778701184 [ОШИБКА] WSREP: wsrep :: connect (gcomm: // boot) не удалось: 7

узел_1 | 2018-05-04 3:13:46 140187778701184 [ОШИБКА] Отмена

Я запустил ping boot в контейнере, чтобы убедиться, что имя хоста разрешено правильно, не уверен, почему он не может подключиться. Я попытался создать конфигурацию для различных файлов докера, которые я вижу для mariadb:10.1, таких как https://gist.github.com/lucidfrontier45/497341c4b848dfbd6dfb

Мой файл создания докера:

# Docker compose file for running a local MySQL server
version: '2.2'
services:
  boot:
    image: mariadb:10.2.14
    command: mysqld --user=mysql --wsrep_new_cluster
    environment:
      MYSQL_DATABASE: "db"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      # Needed because galera doesn't support MyISAM, which tzinfo uses
      MYSQL_INITDB_SKIP_TZINFO: "yes"
    ports:
      - ${SQL_PORT}:3306
      - 4444:4444
      - 4567:4567
      - 4568:4568
    networks:
      - sql
    volumes:
      - ./kubernetes/mariadb.conf.d:/etc/mysql/mariadb.conf.d
      - /var/lib/mysql
  node:
    image: mariadb:10.2.14
    command: mysqld --user=mysql --wsrep_cluster_address=gcomm://boot
    environment:
      MYSQL_DATABASE: "db"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      # Needed because galera doesn't support MyISAM, which tzinfo uses
      MYSQL_INITDB_SKIP_TZINFO: "yes"
    networks:
      - sql
    volumes:
      - ./kubernetes/mariadb.conf.d:/etc/mysql/mariadb.conf.d
      - /var/lib/mysql
networks:
  sql:

Мой конфигурационный файл в maraidb.conf.d:

# This will be passed to all mysql clients
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

# The MySQL server
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default_storage_engine=innodb
binlog_format=row
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0

# Allow server to accept connections on all interfaces.
bind-address=0.0.0.0

#
# * Galera-related settings
#
# https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/
#
[galera]
wsrep_on=ON
wsrep_log_conflicts=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# TODO: is rsync the best option?
wsrep_sst_method=rsync

wsrep_cluster_name=galera
#wsrep_slave_threads=1

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Спасибо @ Николай, ваш ответ в основном работает, но я столкнулся с другой проблемой. Это действительно поставило меня на правильный путь, чтобы найти решение.

Так что, похоже, основная проблема заключалась в том, что --wsrep_new_cluster само по себе недостаточно для начальной загрузки узла, вам нужно установить переменную wsrep_cluster_address. Установка его с помощью --wsrep_cluster_address=gcomm:// сделала мой трюк.

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

Мой последний файл составления докера:

# Docker compose file for running a local mariadb galera cluster
version: '3.6'
services:
  boot:
    image: mariadb:10.2.14
    command: mysqld --user=mysql --wsrep_cluster_address=gcomm://
    environment:
      MYSQL_DATABASE: "db"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      # Needed because galera doesn't support MyISAM, which tzinfo uses
      MYSQL_INITDB_SKIP_TZINFO: "yes"
    ports:
      - ${SQL_PORT}:3306
      - 4444:4444
      - 4567:4567
      - 4568:4568
    volumes:
      - ./kubernetes/mariadb.conf.d:/etc/mysql/mariadb.conf.d
      - /var/lib/mysql
  node:
    image: mariadb:10.2.14
    command: bash -c "sleep 10; mysqld --user=mysql --wsrep_cluster_address=gcomm://boot"
    environment:
      MYSQL_DATABASE: "db"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      # Needed because galera doesn't support MyISAM, which tzinfo uses
      MYSQL_INITDB_SKIP_TZINFO: "yes"
    volumes:
      - ./kubernetes/mariadb.conf.d:/etc/mysql/mariadb.conf.d
      - /var/lib/mysql
0 голосов
/ 04 мая 2018

wsrep_cluster_address параметр должен быть определен с самого начала создания кластера galera.

Вот почему вам нужно сделать следующее:

1. Добавьте wsrep_cluster_address в файл конфигурации в maraidb.conf.d, и все узлы получат его:

wsrep_cluster_address="gcomm://boot,node"

2. Удалить флаг --wsrep_cluster_address из команды mysqld, когда мы запускаем mysql в node контейнере, потому что он уже есть в конфигурации:

version: '2.2'
services:
  boot:
    image: mariadb:10.2.14
    command: mysqld --user=mysql --wsrep_new_cluster
    environment:
      MYSQL_DATABASE: "db"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      # Needed because galera doesn't support MyISAM, which tzinfo uses
      MYSQL_INITDB_SKIP_TZINFO: "yes"
    ports:
      - ${SQL_PORT}:3306
      - 4444:4444
      - 4567:4567
      - 4568:4568
    networks:
      - sql
    volumes:
      - ./kubernetes/mariadb.conf.d:/etc/mysql/mariadb.conf.d
      - /var/lib/mysql
  node:
    image: mariadb:10.2.14
    command: mysqld --user=mysql
    environment:
      MYSQL_DATABASE: "db"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      # Needed because galera doesn't support MyISAM, which tzinfo uses
      MYSQL_INITDB_SKIP_TZINFO: "yes"
    networks:
      - sql
    volumes:
      - ./kubernetes/mariadb.conf.d:/etc/mysql/mariadb.conf.d
      - /var/lib/mysql
networks:
  sql:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...