Docker Swarm JDBC连接

时间:2016-09-26 13:51:39

标签: nginx docker docker-swarm

在Docker Swarm上运行Postgresql DB,其中包含可以部署数据库的多个节点。使用Docker版本1.12 +。

使用Data容器,Postgresql故障转移工作正常。现在我想让一个Java客户端连接到数据库,并且还可以在故障转移中存活。如何在这里管理JDBC连接?连接字符串是否会更改?或者它应该通过像其他地方运行的nginx容器来管理吗?有没有这样的例子可用于任何地方的研究?从概念上讲,我认为我会把它移到另一个(类似nginx的)容器,但不能完全了解细节!

1 个答案:

答案 0 :(得分:1)

在群集模式下,您可以通过DNS名称为同一覆盖网络中的服务获取服务发现,您无需自己添加代理层。 swam networking docs详细介绍,但实质上是:

docker network create -d overlay app-net
docker service create --name app-db --network app-net [etc.]
docker service create --name app-web --network app-net [etc.]

您的数据库服务器可由网络中的DNS app-db提供给同一app-net网络中的任何服务。因此app-db是您在JDBC连接字符串中使用的服务器名称。您可以拥有Postgres容器的多个副本,或者在故障转移时移动的单个容器 - 该服务将始终在该地址可用。

但是:我会谨慎使用您的数据容器进行故障转移。你有一个数据库状态的单个容器;即使您的状态在卷中,它也不会在群集中移动。因此,如果包含数据的节点出现故障,您的数据容器将从其他地方启动,但数据不会随之而来。