![如何将多主 Microsoft SQL 数据库部署为 IaaS 或 AWS RDS](https://linux22.com/image/770978/%E5%A6%82%E4%BD%95%E5%B0%86%E5%A4%9A%E4%B8%BB%20Microsoft%20SQL%20%E6%95%B0%E6%8D%AE%E5%BA%93%E9%83%A8%E7%BD%B2%E4%B8%BA%20IaaS%20%E6%88%96%20AWS%20RDS.png)
我们有一个供应商产品,它仅支持关系数据库(Oracle 和 MS SQL)。由于运营效率和成本,我们计划使用 MS SQL。但是,我们在两个不同的 AWS 区域(东部和西部)以主动-主动模式部署产品时遇到了挑战。因为(据我所知)AWS RDS MS SQL 或 IaaS MS SQL 始终在线可用性组不允许多区域写入。此外,由于延迟问题,我们无法将产品配置到其他区域的数据库。
我们希望拥有本地可用的数据库实例,产品可以在其中读取和写入。有没有办法在多区域、多主服务器中部署 MS SQL 服务器,让两个区域的数据库服务器都可以接受写入事务?
PS- 本产品面向最终用户,拥有大量交易。本产品根据用户的交易数据做出决策。
答案1
我的答案是……MS SQL Server 和 Oracle 不允许多个主服务器,此外,当数据库相距 10,000 英里时,MS SQL Server 的“合并复制”中使用的事务复制速度慢至每秒 1-2 行数据。深入研究“订阅者 - 分销商 - 发布者”模型表明,分销商通过本机客户端 11 连接远程打开数据集。这样做是为了 LAN 条件,而不是 WAN。相信我,我已经看到了,我已经设置好了,我已经与 Premier Support 谈过了。这是有史以来最糟糕的复制,即使您使用端点优化器(例如 Riverbed)调整线路条件,您最终也会每秒复制 300 行数据。必须重复 - 它是逐行读取,SQL 原始文本传输,带有移动转发光标。还有一点 - 我们的应用程序有一些复制数据的功能,例如插入表...从表中选择 *,其中 ID=a 和 key=b;但是 MS SQÖ Server 的复制添加了一个 rowguid 列,并且禁止有两个相同的 rowguid。如果分发服务器从客户端复制此类数据,则会停止分发服务器...许多应用程序都这样做,但我不得不说忘掉它。具有低延迟的多个主服务器是仅使用 MySQL 引擎(或部分使用 Postgres 引擎)的 Aurora。“合并复制”中的复制周期基本上允许多个同步数据库,为 60 秒,理论上它可以更小,但会带来更多开销,例如建立连接、交换证书...如果是简单的 Web 内容,您可以在其脚本语言中更改 SQL 客户端,例如 PHP 允许 MS SQL、MySQL、Postgres 等。如果这是一项需要数十亿美元周转的大事 - 考虑使用适当的引擎升级/转移到 AWS 和 Aurora。MS SQL Server 尚未为此而设计,至少不适用于实时同步或大量数据。 Ingres 也具有将单个数据集检出到另一个 Ingres 引擎的功能,但这不符合您的需求。