2016-09-26 101 views
1

在包含多个可部署数据库的节点的Docker Swarm上运行Postgresql数据库。使用Docker版本1.12+。Docker Swarm JDBC连接

使用Data容器,Postgresql故障转移工作正常。现在我希望有一个Java客户端连接到数据库,并且还可以在故障转移后继续运行。应该如何在这里管理JDBC连接?连接字符串是否更改?还是应该通过像在其他地方运行的nginx容器那样进行管理?有没有一个可用于任何地方学习的例子?从概念上讲,我认为我将它转移到另一个(类似nginx的)容器,但不能完全理解细节!

回答

1

在swarm模式下,您可以通过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容器的多个副本,或者在故障转移时移动的单个容器 - 该服务将始终在该地址处可用。

但:我会谨慎使用数据容器进行故障转移。你有一个包含你的数据库状态的容器;即使您的状态处于音量状态,也不会在集群中移动。因此,如果包含数据的节点失败,那么您的数据容器将从其他地方启动,但数据不会与其一起使用。

+0

谢谢 - 我会试试这个! FWIW,至少目前来说,我已经在一个挂载在群集中所有物理主机上的NFS挂载上有一个状态。因此,所有失败的数据都在发生变化,但我仍在研究更好的方法来做到这一点 – JoeG

+0

很多人都在研究更好的方法......尽管NFS是一个可行的选择,但却是以性能为代价的。如果你可以在这里发布你的卷映射,这可能对未来的读者有用。 –

+0

Jdbc与循环式连接负载平衡可能会导致一些有趣的行为。恕我直言,一个更好的主意是启动一个独立的主服务,其中有1个节点,另一个有n个节点的从服务。如果需要,您可以为主 - 主设备类型设置添加其他主服务。 –