我想问AG听众在故障转移过程中的行为.当故障转移发生时,我意识到主进程和次进程上的所有连接都是关闭的。
如果客户端应用程序使用的客户端库(如microsoft > 6.0),它们将立即开始尝试重新连接到与侦听器关联的ip地址。但是,在完成故障转移的10秒期间(或任何情况下)会发生什么呢?客户端是否可以成功地获得连接,但在尝试使用它时却得到了致命的错误消息?还是为了确保在故障转移期间没有任何客户端成功地获得连接,以便当客户端成功地获得连接时,它实际上是可用的?
(FYI关于microsoft驱动程序的行为,从源代码at:https://github.com/microsoft/mssql-jdbc/blob/dev/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerConnection.java判断,它将配置的loginTimeout除以8,因此在超时之前进行8次尝试。)
发布于 2020-12-21 05:10:02
我的理解是,在故障转移完成之前,没有任何客户端能够连接到侦听器并获得数据库连接。请参阅下面链接中的“自动故障转移如何工作”一节。看这里
发布于 2020-12-22 17:56:53
在完成故障转移的10秒期间(或任何情况下)发生了什么?
这就是"loginTimeout“的意义所在:
驱动程序在超时失败连接之前应等待的秒数。零值表示超时是默认的系统超时,默认为15秒。非零值是驱动程序在超时失败连接之前应该等待的秒数。
客户端可能成功地获得连接,但在尝试使用它时只会得到致命的错误消息。
这是可能的,因为网络连接在AG联机之前就可用了,这发生在数据库恢复之前,如果这两者之间有异常的延迟,您可以在数据库恢复之前连接。
https://dba.stackexchange.com/questions/281906
复制相似问题