首页 > 解决方案 > 带有 docker swarm 的高可用性数据库 ( postgresql )

问题描述

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

在我了解 docker 之后,我的想法发生了很大变化,现在我将尝试如何将堆栈容器化。当我进入 db 时,我想如果我在 swarm 模式下实现 docker,当我扩大它时,db 可以在我的工作节点中自动复制或同步..但实际上它没有。这是我用来重现场景的 .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:

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

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

问候。

标签: databasepostgresqldockerdevopsdocker-swarm

解决方案


推荐阅读