我已经在我的PC上使用docker hub上的MySQL /mysql-mysql镜像设置了集群,它启动得很好。但是,当我尝试使用clusterJ从外部docker (通过主机)连接到集群时,它不能连接。
最初我得到以下错误:无法在127.0.0.1端口1186分配节点id :找不到mysqld(API)的空闲节点id
因此,我创建了一个自定义的mysql-cluster.cnf,它非常类似于与docker镜像一起分发的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当我尝试连接到集群时,我得到以下错误:'127.0.0.1:1186‘nodeId 0;返回代码:-1错误代码:0消息:。
我可以看到运行ClusterJ的应用程序已注册到集群,但随后它断开了连接。以下是docker 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任何帮助解决这个问题的人都将不胜感激。
发布于 2018-05-15 18:29:48
下面是ndb_mgmd如何处理启动ClusterJ应用程序的请求。您通过端口1186连接到MGM服务器。在这个连接中,您将获得配置。此配置包含数据节点的IP地址。为了连接到数据节点,ClusterJ将尝试连接到192.168.0.3和192.168.0.4。由于ClusterJ在Docker之外,我假设这些地址指向某个不同的地方。
管理服务器还将提供在连接到NDB数据节点时使用的动态端口。通过为NDB数据节点设置ServerPort,管理这一点要容易得多。我通常使用11860作为ServerPort,2202也很流行。
我不确定如何将Docker环境与外部环境混合。我假设可以通过在正确的位置设置适当的IP转换表来以某种方式解决问题。
https://stackoverflow.com/questions/50272730
复制相似问题