假设我在3个节点群集的ANY
中的FIRST
或synchronous_standby_names
中使用了quorum based synchronous replication个2个节点名称。
我正试图从postgres jdbc doc中讨论的奴隶中读取。
jdbc:postgresql://node1,node2,node3/accounting?targetServerType=preferSlave&loadBalanceHosts=true
有人能告诉我吗
版
答案 0 :(得分:0)
这已在this主题的postgres邮件列表中得到解答。
不,我猜没有这样的选择。如果可以的话,也许你会提出PR:)
在infra级别可以执行的操作是将数据库放在Load之后 平衡器(如haproxy或nginx)并根据滞后进行健康检查 等等,然后将连接路由到备用节点,否则采取 它离开了负载均衡器。
问候,维杰
来自:Debraj Manna发送:2018年6月17日,星期日 下午2:42:46致:Vijaykumar Jain Cc:pgsql-admin主题:回复:[外部] 使用基于仲裁的同步复制的JDBC Postgres故障转移
是的,Vijaykumar你是对的,这只是一个随机的随机洗牌 奴隶。
我有没有办法在连接参数中指定选择a 零滞后的奴隶还会回归主人?
On Sun,2018年6月17日下午2:11,Vijaykumar Jain >中写道: 我猜主逻辑和辅助逻辑之间的区别可以是 抬头看这里(isMaster) https://github.com/pgjdbc/pgjdbc/blob/f78a639d1ed3c64e80e1fa107691b4af5945cb84/pgjdbc/src/main/java/org/postgresql/core/v3/ConnectionFactoryImpl.java 从奴隶中我们确实检查了代码并且它是随机的 shuffle并不支持任何自定义逻辑来挑选任何奴隶。一世 可能是错的,但我记得在源头查找:)
问候,维杰
来自:Debraj Manna> 发送时间:2018年6月17日星期日上午11:31:32致:pgsql-admin主题: [外部] JDBC Postgres基于仲裁同步的故障转移 复制
您好
让我们说我正在使用基于仲裁的同步 复制https://wiki.postgresql.org/wiki/New_in_postgres_10#Quorum_Commit_for_Synchronous_Replication 在synchronous_standby_names中的ANY或FIRST
我正试图从奴隶那里读到 这里https://jdbc.postgresql.org/documentation/head/connect.html
JDBC:在PostgreSQL:// node1上,节点2,节点3 /计费targetServerType = preferSlave&安培; loadBalanceHosts =真
有人能告诉我吗
- 如何选择奴隶?是随机选择的从站还是首选具有零滞后或最小滞后的从站?
- jdbc url中是否有任何设置只会选择零复制的slave,如果不存在这样的slave,那么read将 被送到主人?
醇>
答案 1 :(得分:0)
以下内容自2018年7月12日起生效(pgjdbc 42.2.3)
pgjdbc
仅连接到一台服务器,因此它“选择要连接的主机”仅一次(建立连接时)。
仅在网络连接失败和/或连接池出现close()
的情况下(例如,在某些时候连接验证失败),它才会重新连接。
也就是说,如果辅助服务器的“滞后”随着时间而变化,那么即使在创建连接时它是“最佳”主机,连接也可能指向“陈旧”主机。
如果您确实需要“最佳延迟”类型的逻辑,那么您可能应该在应用程序级别具有多个数据源(每个数据源都指向一个主机),然后获得两个连接,检查延迟并使用适当的连接为您的业务运作。 当然,您可能希望缓存数据源的延迟,以避免每秒多次请求它。
在org.postgresql.Driver
级别实施“最佳从属”可能并非易事(当前逻辑仅假设单个连接点指向单个服务器,元数据被缓存等)。
也许可以实现DataSource
来提供基础数据源之外的“具有最佳延迟的连接”,但是从未请求/实现过。