如何为负载平衡群集配置Tomcat JDBC池(如PostgreSQL主从复制)

时间:2017-05-21 10:46:47

标签: postgresql load-balancing pgpool jdbc-pool tomcat-dbcp

假设有一个PostgreSQL集群,它由一个主节点和两个只读副本组成,通过流复制。

如何配置Tomcats DBCP以了解数据库集群中有多个不同的节点,从而将变异语句分配给主节点的连接和无副作用的语句(负载平衡)到任何从节点的连接?

作为PostgreSQL的JDBC驱动程序states的文档,可以在JDBC连接URL中声明多个节点: jdbc:postgresql://host1:port1,host2:port2/database

因此,想法是在Tomcats server.xml中配置两个连接池。一个用于读/写主数据源的JNDI资源和另一个用于只读副本的池:jdbc:postgresql://host1:port1/database?targetServerType=master和副本jdbc:postgresql://host1:port1,host2:port2/database?targetServerType=preferSlave&loadBalanceHosts=true

在这种情况下,在Tomcat上运行的应用程序需要知道有两个具有不同语义的数据库连接池,因此需要根据每个SQL语句决定从哪个池请求连接。这似乎是一个糟糕的模式,因为应用程序依赖于特定的数据库基础结构,JDBC池应该抽象底层数据库的实现。

在这种情况下,Tomcat DBCP和PostgreSQL集群之间的其他抽象层(如pgpool-II)是否有帮助? (特别是将来,基础架构增长到几个Tomcat服务器实例或者需要高可用性和PostgreSQL DB的故障转移)

0 个答案:

没有答案