database - 带有 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 ,这意味着节点中的实例未与节点同步。db
manager
worker
mydocker
mydocker_user
mydocker_password
worker
manager
那么如果这里有人遇到过这种情况,请帮助我,并请与我分享您的想法,群模式的最佳实践是什么?我是否只需要为 db 放置一个节点,因为如果我扩展 db 并且它是否在worker
节点中运行,它是否有用并有助于负载 db 服务?manager
因为它在和worker
节点之间没有相同的数据。
问候。
解决方案
推荐阅读
- cypress - 如何处理cypress中的测试失败
- reactjs - 如何在反应导航 5 中将图像添加到抽屉中?
- powershell - 更改 Powershell 表中第一行的文本颜色
- python - 如何找到重叠的intervalIndex pandas
- postgresql - Zabbix 慢速磁盘请求响应
- r - 删除 R 中特定列中的所有零值
- azure - 将私有静态 IP 地址附加到 Azure 容器实例
- oauth - 让 Apigee 为客户端做身份验证(oauth)
- javascript - 如何在 JS 中返回两个连续异步函数的值?
- ios - 如何对 String 和 NSAttributedString 使用泛型类型?