【问题标题】:Rails adapter solutions for MySQL Cluster (NDB)?MySQL Cluster (NDB) 的 Rails 适配器解决方案?
【发布时间】:2013-12-17 21:06:34
【问题描述】:

我正在为客户设置高可用性环境。有一对负载平衡的主机为我们的 Rails 应用程序提供 http 请求,它们并行部署在两台主机上。

此外,还有两个 MySQL 主机可用。我想在两台主机(即多主机)上运行 MySQL Cluster (NDB) 以获得完全冗余的配置。我特别想避免基于数据库复制的主从配置;我觉得这会使可写节点成为单点故障。

我正在寻找有关如何最好地将我们的 Rails 应用程序连接到这样的多主 MySQL 集群的一些指导。我能找到的几乎所有数据库适配器都是用于主从设置的。 Failover_adapter 听起来很有希望,但它已经过时了。在过去的五年里,我还没有发现任何类似的开发。

是否有人知道像我所描述的那样,作为 Rails 应用程序和多主 MySQL 集群之间的适​​配器使用的任何 gem 或方法?

【问题讨论】:

  • 这是一个很好的github.com/taskrabbit/makara 它支持多主并具有故障转移
  • @SamD 感谢您的建议。我已经与 makara 摔跤两天了,但我还没有在多主机设置方面取得任何成功。你真的在那个场景中成功使用过它吗?
  • 我从来没有在 Makara tbh 上做过大师级大师。我做过主从。它在支持 master-master 的文档中说,因此我建议

标签: mysql ruby-on-rails activerecord database-cluster mysql-cluster


【解决方案1】:

我刚刚设置了这个。应该没有太多工作要做。

在 mysqladapter gem 中将引擎指定为 InnoDB,这显然不适合集群。您需要将此添加到初始化文件中:

ActiveRecord::ConnectionAdapters::Mysql2Adapter
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
  def create_table(table_name, options = {})
    super(table_name, options.reverse_merge(:options => "ENGINE=NDB"))
  end
end

这是适配器中的原件。

def create_table(table_name, options = {})
  super(table_name, options.reverse_merge(:options => "ENGINE=InnoDB"))
end

另一个关键方面是您不希望同时进行迁移,所以在 deploy.rb 文件中:

task :migrate, :max_hosts => 1 do
  # sleep 0.5
  run "cd #{release_path} && bundle exec rake db:migrate RAILS_ENV=#{rails_env}"
end

Max hosts 阻止 cap 并行运行迁移。这很重要,因为您不希望集群同时运行创建表类型的东西。甚至可能值得延迟我在上面评论过的内容,只是为了增加一点安全性。

另一个关键方面。不要忘记设置:

DataMemory = 
IndexMemory =

默认值非常低。通常索引大小为 DataMemory/5-10

到目前为止我看到的另一个陷阱是在您的 mysqld 节点中,请确保您设置:

ndb_autoincrement_prefetch_sz

至少为 100。否则批量插入将需要很长时间。默认值为 1。

编辑

ndb_autoincrement_prefetch_sz

让这个变量完全独立。不要设置它。它可能导致自动增量索引在集群上变得不同步。这是调试的噩梦。

另外确保您的 NDB 节点不要与 NDB MGM 节点在同一台服务器上运行。

编码愉快。

广告

【讨论】:

    【解决方案2】:

    我最终无法找到符合我要求的适配器解决方案。

    我决定使用mysql2 适配器并将其指向我的数据库集群前面的一个反向代理(我使用haproxy),它可以处理主节点之间的负载平衡和故障转移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多