使用 docker swarm 的高可用性数据库 ( postgresql )

vid*_*mes 5 database postgresql docker docker-swarm devops

我是 docker 新手,有时只是学习 docker,因为我正在使用 LAPP(Linux、Apache、PHP 和 PostreSQL)堆栈,并且始终使用整体架构,其中所有内容都放在一个服务器/vps 中。

在了解了 docker 之后,我的想法发生了很大的变化,现在我将尝试如何将堆栈容器化。当我进入数据库时​​,我想如果我在群模式下实现了 docker,当我扩展它时,数据库可以在我的工作节点中自动复制或同步..但事实上它没有。这是我用来重现场景的 .yml 文件。

version: "3"
services:
  db:
    image: postgres:9.5
    container_name: db
    restart: always
    tty: true
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: mydocker_pass
      POSTGRES_USER: mydocker_user
      POSTGRES_DB: mydocker
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:
Run Code Online (Sandbox Code Playgroud)

第一次我只是在我的内部创建一个容器swarm-manager,但后来我用这个命令扩展了这个服务,docker service scale db_stack_db=2它工作得很好,现在新的容器正在我的工作节点中运行。在我的worker节点中,我也有与我的manager节点中已有的相同的卷,但遗憾的是,当我在db节点中写入某些内容时manager,它不会显示在我的worker节点中,反之亦然,尽管它们具有相同的卷名称,并且预-创建的数据库:mydocker并且还具有相同的数据库用户:mydocker_user和db_password mydocker_password,这意味着节点中的实例worker不与manager节点同步。

那么如果这里有人经历过这种情况,请帮助我,请与我分享你的想法,群体模式的最佳实践是什么?我是否只需为数据库放置一个节点,因为如果我扩展数据库并且它在该worker节点中运行,它是否有用并有助于数据库服务的负载?manager因为它和节点之间没有相同的数据worker

问候。