Docker Swarm JDBC 连接
Docker Swarm JDBC connection
运行 Docker Swarm 上的 Postgresql 数据库,其中包含可以部署数据库的多个节点。使用 Docker 版本 1.12+.
使用数据容器,Postgresql 故障转移运行良好。现在我想让 Java 客户端连接到数据库并在故障转移中幸存下来。这里应该如何管理 JDBC 连接?连接字符串是否更改?还是应该通过其他地方的 nginx 容器 运行 之类的东西来管理它?是否有任何地方可供研究的示例?从概念上讲,我想我将它移到另一个(类似 nginx 的)容器中,但不能完全理解细节!
在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 容器的多个副本,或在故障转移时四处移动的单个容器 - 服务将始终在该地址可用。
但是: 我会谨慎对待您的数据容器的故障转移。您只有一个容器,其中包含您的数据库状态;即使你的状态在一个卷中,它也不会在集群中移动。因此,如果包含数据的节点出现故障,您的数据容器将在其他地方启动,但数据不会随之消失。
运行 Docker Swarm 上的 Postgresql 数据库,其中包含可以部署数据库的多个节点。使用 Docker 版本 1.12+.
使用数据容器,Postgresql 故障转移运行良好。现在我想让 Java 客户端连接到数据库并在故障转移中幸存下来。这里应该如何管理 JDBC 连接?连接字符串是否更改?还是应该通过其他地方的 nginx 容器 运行 之类的东西来管理它?是否有任何地方可供研究的示例?从概念上讲,我想我将它移到另一个(类似 nginx 的)容器中,但不能完全理解细节!
在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 容器的多个副本,或在故障转移时四处移动的单个容器 - 服务将始终在该地址可用。
但是: 我会谨慎对待您的数据容器的故障转移。您只有一个容器,其中包含您的数据库状态;即使你的状态在一个卷中,它也不会在集群中移动。因此,如果包含数据的节点出现故障,您的数据容器将在其他地方启动,但数据不会随之消失。