我有 2 个 MSSQL 数据库,它们不属于同一个集群,但它们是手动同步的(没有配置数据库镜像)
我希望我的客户端应用程序尝试连接到第一个 DB 主机。如果失败,它应该连接到第二个 DB 主机。
我创建了一个如下所示的连接字符串(用 Java 编写):
String connectionString = "jdbc:sqlserver://<IP_ADDRESS_SERVER_1>:1433;"
+ "database=<DB_NAME>;"
+ "user=<USERNAME>;"
+ "password=<PASSWORD>;"
+ "encrypt=true;"
+ "trustServerCertificate=true;"
+ "failoverPartner=<IP_ADDRESS_SERVER_2>:1433;";
它正确连接到主数据库实例。但是如果我关闭它并且连接重定向到第二个数据库实例,则连接将被阻止。(将此实例连接为主要工作)
重定向连接是否依赖于镜像?
是也不是。简而言之,驱动程序会进行各种检查,如果它没有从服务器获取正确的信息(因为镜像未设置或没有使用 AG 实现一些鲜为人知的功能),则驱动程序将抛出镜像未设置的错误。
您可以编辑 Java 驱动程序,因为它是开源的,并更改其行为,编译它,然后在您的环境中使用它……或者按照评论中的建议,使用已经可用且经过验证的架构来实现您的高可用性。