在多台服务器上使用 mysql-server docker 容器创建 MySQL 集群

Posted

技术标签:

【中文标题】在多台服务器上使用 mysql-server docker 容器创建 MySQL 集群【英文标题】:Creating a MySQL cluster, using mysql-server docker containers, on multiple servers 【发布时间】:2020-07-10 15:03:08 【问题描述】:

我正在尝试使用mysql-server docker 容器创建一个包含 3 个节点的 MySQL 集群。

我有 3 个单独的云实例,并且在所有 3 个实例上都设置了 docker。 每台服务器将仅运行 1 个容器 - 以在集群中实现高可用性。

我使用命令分别在所有 3 台服务器上启动容器

docker run --name=db -p 3301:3306 -v db:/var/lib/mysql -d mysql/mysql-server

我正在将容器的 3306 端口映射到我的服务器的 3301 端口。我还为远程访问创建了一个新用户“clusteradmin”。

接下来,我从 mysql-shell 运行以下命令 - 用于所有 3 台服务器

dba.configureInstance('clusteradmin@serverIp:3301')

我收到了类似的消息-

注意它说“这个实例报告它自己的地址为 39xxxxxxxxxx:3306”。

接下来我在其中一台服务器上成功创建了一个集群。但是,将其他 2 台服务器添加到此集群时,我收到以下错误

在检查该特定服务器的日志时,我看到以下几行

它说“对等地址 a9yyyyyyyyyy:33061 无效”。这是因为,由于容器运行在不同的服务器上,容器 ID 不被其他服务器上的其他容器识别。

我尝试了很多选择,但无济于事。一种方法是在启动容器时使用 report-hostreport-port 选项,就像这样

docker run --name=db2 -p 3301:3306 -v db2:/var/lib/mysql -d mysql/mysql-server --report-host=139.59.11.215 --report-port=3301

但是,这种方法的问题在于,在 dba.configureInstance() 期间,它想将端口更新为默认值并像这样抛出错误

任何成功创建在不同服务器上运行的 mysql-server 容器集群的人,我都非常感谢这方面的指点。

【问题讨论】:

您使用的是 NDB 集群、InnoDB 集群还是其他集群? 我正在使用 InnoDB 集群 【参考方案1】:

我查看了文档和源代码,但没有找到一个解释为什么监听和通告不同的端口是有问题的。

我在调用mysql-server时使用--port 3301解决了这个问题:

docker run --name=db2 -p 3301:3301 -v db2:/var/lib/mysql -d mysql/mysql-server --report-host=139.59.11.215 --port 3301

【讨论】:

以上是关于在多台服务器上使用 mysql-server docker 容器创建 MySQL 集群的主要内容,如果未能解决你的问题,请参考以下文章

无法在 WSL 上安装 mysql-server

linux mysql-server找不到mysql_config

mysql给root开启远程访问权限,修改root密码

mysql给root开启远程访问权限,修改root密码(转)

如何在单台机器上管理/组合多台服务器?

全新的 mysql-server 安装不要求输入密码