mysql - Rails Octopus Gem - 从站关闭时的主从复制连接行为

标签 mysql ruby-on-rails database-replication master-slave octopus

我正在开发中使用 Rails 4.0.2 测试这个很棒的 gem Octopus。

我创建了一个 Slave 数据库并配置了 octopus 如下(config>shards.yml):

octopus:
  environments:
    - development
  replicated: true
  fully_replicated: true 
  verify_connection: true
  development:
    slave1:
      host: 192.168.1.12
      adapter: mysql2
      username: slave_reader
      password: my_password
      database: my_server_development
      reconnect: true

它工作得很好,从 Slave 读取并写入 Master,但是如果我的 Slave 服务器关闭,我希望它重定向到 Master 数据库并获取内容,但经过一段时间尝试后,它会抛出错误:

Can't connect to MySQL server on '192.168.1.12' (113)

如果从服务器关闭,我该怎么做才能让 Octopus 寻找我的主数据库?

提前致谢!

最佳答案

正如我在 this blog post 中读到的那样关闭电源或无响应的从站可能会导致应用程序失败,因为 Octopus 的默认行为是将所有数据写入主站并从从站读取所有数据(因为写入主站的数据会复制到所有连接的从站)。如 Octopus wiki, "Multiple slaves" section 所述多从属环境中的读取是使用循环法完成的,因此默认情况下它始终从从属检索数据。

也摘自上述博客:作为后备机制,如果没有任何从节点可用或数据不可用,您应该直接从主节点读取数据(使用 .using(:master))尚未完全复制到奴隶。它也可能是缓存更改/结果应用程序的选项,以防止从数据库节点重复读取。

关于mysql - Rails Octopus Gem - 从站关闭时的主从复制连接行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20503612/

相关文章:

mysql - 子查询和Join哪个是最优解?

ruby-on-rails - Rails 5 - PostgreSQL 删除列和索引已被破坏的迁移

css - 如何使用 Rails 赋予一个样式表优先于另一个样式表?

mysql - 关于 MariaDB 的 JDBC 故障转移/高可用性的说明

cassandra - 如何启用只读 cassandra 复制?

mysql - sync_binlog参数

php - 操作方法 : Ranking Search Results

php - 在循环中合并来自不同表的点

sql - mysql从备份部分恢复

ruby-on-rails - 如何引用 Ruby/Rails 规范中的属性?