通过复制SQL数据库实现容错

时间:2011-07-21 06:49:18

标签: database distributed-system

假设中间层服务器以3方式复制,后端数据库(MySQL,PostgreSQL等)以3方式复制。用户请求最终会在中间层服务器中创建一些用户数据,我希望以一种能够抵御故障的方式将其提交给后端数据库。

候选尝试解决方案,例如,如果我将数据发送到一个SQL数据库并让它将数据复制到其他数据库,那么如果一个SQL数据库在复制数据之前硬盘崩溃,那么数据就是丢失。

在现实世界中使用的容错的最佳实践解决方案是什么。

1 个答案:

答案 0 :(得分:1)

许多数据库都可以选择群集,作为您绘制草图要求的开箱即用解决方案。我强烈建议使用开箱即用的解决方案,而不是自己动手 - 这种解决方案存在一些令人讨厌的问题,你不想自己解决。

一个典型的例子是主键 - 如果你有3个后端服务器可以从中间件服务器接收“在表x中创建新记录”指令,并且你想要复制数据,你必须确保有主键没有冲突。如果使用整数作为主键数据类型,则必须确保数据库服务器1不会创建ID为1的客户记录(如果该ID已用于服务器2上的记录)。这不是一个不可能的挑战 - 但是你可能很容易燃烧几周建立并测试解决方案。

您需要考虑的另一件事是,在数据库中断的情况下,您的应用程序可以脱机多长时间 - 完全没有中断,几分钟,几小时或几天。中断窗口越短,集群解决方案就越昂贵和复杂。