我正在尝试使用Docker Swarm创建一个具有相同数据库的2个节点和2个容器的集群来练习。我首先创建了卷、网络并启动了集群:
docker volume create $service_volume
docker network create --driver overlay --scope global $network_name
docker swarm init
然后,我尝试创建数据库的副本,然后在集群中插入另一个节点,并通过NFS划分负载和同步文件。
我尝试使用一个docker组合文件如下:
version: '3.0'
services:
mysql_service:
image: mysql:latest
replicas: 2
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123
MYSQL_DATABASE: testdb
ports:
- '3306:3306'
expose:
- '3306'
networks:
- mysql_network
volumes:
- mysql_volume:/var/lib/mysql
但由于以下错误而无法创建服务:
ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.mysql_service: 'replicas'
然后我尝试直接通过以下方式创建服务:
docker service create --name mysql_service --replicas 2 --network mysql_network --env MYSQL_DATABASE=testdb --env MYSQL_ROOT_PASSWORD=123 --mount type=volume,src=mysql_volume,dst=/var/lib/mysql -p 3306:3306 mysql:latest
创建了服务,但没有在mysql_volume中创建新数据库,当尝试通过dbeaver连接sys.db(随图像提供)时,我收到一个错误:
null, message from server: "Host '10.0.0.2' is not allowed to connect to this MySQL server"
我真的不知道我想做的是不该做的还是有别的办法。
先谢谢你!
1条答案
按热度按时间gt0wga4j1#
尝试运行复制的
mysql
时会遇到一些问题。发布端口会将服务任务连接到群集入口网络,这将在副本之间负载平衡请求。现在我不熟悉mysql,但我认为您需要显式连接到一个或另一个示例来设置群集。处理此问题的一种方法是使用主机模式网络。
首先,标记两个docker群节点作为你要运行mysql示例的两个节点:
然后,使用compose.yml部署mysql,如下所示:
使用这种方法,您可以显式连接到Node1或Node2以访问两个不同的MySQL示例。
而且,由于运行mysql的主机都有标签,所以可以直接在节点上进行持久存储,我发现这比docker卷更安全,因为docker卷太容易修剪了。