ClusterJ не может подключиться к докеризованному кластеру Mysql извне контейнера - PullRequest
0 голосов
/ 10 мая 2018

Я установил кластер MySQL на моем компьютере, используя образ mysql / mysql-cluster на док-концентраторе, и он нормально запускается.Однако, когда я пытаюсь подключиться к кластеру из внешнего докера (через хост-компьютер) с использованием clusterJ, он не подключается.

Изначально я получал следующую ошибку: Не удалось выделить идентификатор узла на порту 127.0.0.11186: Не найден свободный идентификатор узла для mysqld (API)

Поэтому я создал собственный mysql-cluster.cnf, очень похожий на тот, который распространяется с образом докера, но с новой конечной точкой API:

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M


[ndb_mgmd]
NodeId=1
hostname=192.168.0.2
datadir=/var/lib/mysql

[ndbd]
NodeId=2
hostname=192.168.0.3
datadir=/var/lib/mysql

[ndbd]
NodeId=3
hostname=192.168.0.4
datadir=/var/lib/mysql

[mysqld]
NodeId=4
hostname=192.168.0.10

[api]

Это конфигурация, используемая для настройки clusterJ:

com.mysql.clusterj.connect:
    host: 127.0.0.1:1186
    database: my_db

Вот конфигурация docker-compose:

version: '3'

services:
    #Sets up the MySQL cluster ndb_mgmd process
    database-manager:
        image: mysql/mysql-cluster
        networks:
            database_net:
                ipv4_address: 192.168.0.2
        command: ndb_mgmd
        ports:
            - "1186:1186"
        volumes:
            - /c/Users/myuser/conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf

#  Sets up the first MySQL cluster data node
database-node-1:
    image: mysql/mysql-cluster
    networks:
        database_net:
            ipv4_address: 192.168.0.3
    command: ndbd
    depends_on:
        - database-manager

#  Sets up the second MySQL cluster data node
database-node-2:
    image: mysql/mysql-cluster
    networks:
        database_net:
            ipv4_address: 192.168.0.4
    command: ndbd
    depends_on:
        - database-manager

#Sets up the first MySQL server process
database-server:
    image: mysql/mysql-cluster
    networks:
        database_net:
            ipv4_address: 192.168.0.10
    environment:
        - MYSQL_ALLOW_EMPTY_PASSWORD=true
        - MYSQL_DATABASE=my_db
        - MYSQL_USER=my_user
    command: mysqld

networks:
    database_net:
        ipam:
            config:
                - subnet: 192.168.0.0/16

Когда я пытаюсь подключиться к кластеру Iполучить следующую ошибку: «127.0.0.1:1186» nodeId 0;Код возврата: -1 код ошибки: 0 сообщение:.

Я вижу, что приложение под управлением ClusterJ зарегистрировано в кластере, но затем оно отключается.Вот выдержка из журналов диспетчера mysql менеджера:

database-manager_1  | 2018-05-10 11:18:43 [MgmtSrvr] INFO     -- Node 3: Communication to Node 4 opened
database-manager_1  | 2018-05-10 11:22:16 [MgmtSrvr] INFO     -- Alloc node id 6 succeeded
database-manager_1  | 2018-05-10 11:22:16 [MgmtSrvr] INFO     -- Nodeid 6 allocated for API at 10.0.2.2

Любая помощь в решении этой проблемы будет принята с благодарностью.

1 Ответ

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

Вот как ndb_mgmd обрабатывает запрос на запуск приложения ClusterJ. Вы подключаетесь к серверу MGM через порт 1186. В связи с этим вы получит конфигурацию. Эта конфигурация содержит IP-адреса узлов данных. Для подключения к узлам данных ClusterJ попытается подключиться к 192.168.0.3 и 192.168.0.4. Поскольку ClusterJ находится за пределами Docker, Я предполагаю, что эти адреса указывают на другое место.

Сервер управления также предоставит динамический порт для использования при подключение к узлу данных NDB. Намного легче управлять этим путем установки ServerPort для узлов данных NDB. Я обычно использую 11860 как ServerPort, 2202 также популярен для использования.

Я не уверен, как вы смешиваете среду Docker с внешней среда. Я предполагаю, что можно как-то решить, установив правильные таблицы перевода IP в правильных местах.

...