复制的主/从服务器和数据库

时间:2013-01-27 21:29:35

标签: ruby-on-rails heroku database-replication

我有一个小的Rails应用程序,我已经部署在heroku的免费层上,只有一个API,没有用于创建Books的视图,返回Book的类型,并从数据库中删除所有Books。它看起来有点像这样:

POST request to site.herokuapp.com/add_book?name=harrypotter&genre=fantasy会添加一本书。

GET request to site.herokuapp.com/find_book?name=harrypotter返回该类型。

A POST request to site.herokuapp.com/reset clears the database of all books

既然我已经在单个服务器上工作了,我想在三个服务器上复制它,每个服务器都有一个唯一的URL,这样我就可以将我的调用发送到3个服务器中的任何一个,并让所有数据库都包含相同的Book条目

例如,如果我发送

POST request to site1.herokuapp.com/add_book?name=harrypotter&genre=fantasy

然后发送

POST request to site2.herokuapp.com/add_book?name=littlewomen&genre=fiction

我可以发送

GET request to site3.herokuapp.com/find_book?name=littlewomen

但如果我向服务器发送重置调用,则不会重置其他服务器。

我找到了两个名为OctopusData Fabric的宝石,但看起来它们在同一服务器上的数据库之间复制,而不是在不同的服务器上复制。此外,由于我要拨打三个不同的网站,这些宝石会起作用吗?

在Rails中进行此类数据库/服务器复制的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

不确定我是否完全了解您的完整用例。您只是想在不同的数据库中分配读/写以进行不同的API调用吗?

如果它是一个小应用程序,为什么你没有在站点1上拥有所有3个应用程序,站点2和站点3连接到同一个数据库实例?

以下选项:

  1. 主从复制

    在您的情况下,您将拥有1个主数据库和2个从数据库数据库。数据将被读取并写入主数据库,但将被复制到从属数据库。然后,您可以将rails应用程序配置为对所选数据库进行读取。

    您可以使用Octopus在从站和主站之间分配写入/读取。

      

    使用复制时,所有写入查询都将发送到主服务器,并将查询读取到从服务器。

  2. MySQL群集

    我还没有使用MySQL集群,但应该尽快使用它。如果您的要求是在所有数据库之间分配读/写,同时使数据在所有节点上保持一致,那么MySQL集群看起来是一个很好的候选者。数据分布在数据节点池中。每个MySql服务器都可以访问所有数据节点,因此当集群中的服务器通过插入行来更改数据示例时,该新数据可以立即被集群中的其他MySql服务器访问和查看。

    在此处查看更多MySql Cluster