使用 NHibernate 支持 AWS Aurora 故障转移功能的 .Net 应用程序的驱动程序



我正在将我的数据库从MSSQL迁移到Aurora(MYSQL(。该应用程序正在使用 .net 和 NHibernate。我们尝试了MYSQL"MySql.Data"的Nhibernate驱动程序,它适用于所有用例,但故障转移除外。发生故障转移时,连接不会重置,并且它不断尝试从写入器群集连接到旧IP,因此所有写入调用都失败,但异常"MySQL服务器正在使用--read-only选项运行,因此无法执行此语句"。只有在 Web 服务器上执行 IISRESET 后,才能解决此问题。

我知道对于Java,MariaDB连接器能够处理这个用例。是否有任何类似的驱动程序可用于 .net 应用程序? 处理此类用例的最佳实践是什么?

MariaDB java connector有一个针对Aurora的特定实现。对于 .net,我所知道的没有。 仍然正常的解决方案是使用集群 DNS:Aurora 提供不同的 DNS 链接:

  • 每个实例一个
  • 集群终端节点(如 xxx.cluster-yyy.zzz.rds.amazonaws.com(
  • 读取器终结点(负载平衡((如 xxx.cluster-ro-yyy.zzz.rds.amazonaws.com(

使用集群终端节点,您使用的是当前写入器实例。当发生故障转移时,此DNS将指向新的主服务器,但此更改需要一些时间(<60s(,因此在该间隔期间,您最终可能会指向以前的主服务器,如果可用,则现在将从属服务器指向新的粘贴器。

最好的解决方案是查询"显示全局变量,如'innodb_read_only'",检查结果是否为 OFF 以验证连接。