rails 读写分离
程序员文章站
2022-05-21 10:49:52
...
开发环境下实现rails的读写分离:
首先: 一定要保证主从数据库的完全相同,这是以下的前提。
实现功能: select操作在slave数据库操作,而非select(insert、update、delete)操作在master数据库操作。
1: 安装masochism和master_slave_adapter插件
ruby script/plugin install git://github.com/technoweenie/masochism.git
ruby script/plugin install git://github.com/mauricio/master_slave_adapter.git
插件介绍:
masochism 作用: 实现读写分离(注意:其实无法实现读写分离)
master_slave_adapter作用: 弥补masochism的不能实现分离的问题
2: 进入config/environments/development.rb
1》 打开缓存(production环境下缓存默认打开)
config.action_controller.perform_caching = true
2》 通过ActiveReload将读写分离操作分开
config.after_initialize do
ActiveReload::ConnectionProxy.setup!
end
注意: 如果是production模式下进行数据库读写分离,则如下:
config.after_initialize do
if Rails.env.production?
ActiveReload::ConnectionProxy::setup!
end
end
3: 配置database.yml(以一个实例的方式描述database.yml的配置)
development:
host: 192.168.0.129
adapter: master_slave
master_slave_adapter: mysql
database: readwrite1
username: zhidu
password: zhidu
socket: /var/run/mysqld/mysqld.sock
master:
database: readwrite1
username: zcy
password: 1234
host: 192.168.0.130
adapter: mysql
配置介绍(只介绍其中一部分,例如encoding、reconnect等没有介绍,如果需要,请自己查找吧,顺便说一句,有一些有默认值的不需要配置):
database(development): slave数据库名称
username: 用户名称
password: 用户密码
socket: 指定mysqld.sock的位置
adapter: 必须指定master_slave
master_slave_adapter: 指定真正的适配器(mysql)
host: slave数据库的地址
master: 主数据库的设置
disable_connection_test: this will disable the connection test before use,can possibly improve the performance but you could also hit stale connections, default is false
eager_load_connections: connections are lazy loaded by default, you can load gem eagerly setting this to true
4: 成功
首先: 一定要保证主从数据库的完全相同,这是以下的前提。
实现功能: select操作在slave数据库操作,而非select(insert、update、delete)操作在master数据库操作。
1: 安装masochism和master_slave_adapter插件
ruby script/plugin install git://github.com/technoweenie/masochism.git
ruby script/plugin install git://github.com/mauricio/master_slave_adapter.git
插件介绍:
masochism 作用: 实现读写分离(注意:其实无法实现读写分离)
master_slave_adapter作用: 弥补masochism的不能实现分离的问题
2: 进入config/environments/development.rb
1》 打开缓存(production环境下缓存默认打开)
config.action_controller.perform_caching = true
2》 通过ActiveReload将读写分离操作分开
config.after_initialize do
ActiveReload::ConnectionProxy.setup!
end
注意: 如果是production模式下进行数据库读写分离,则如下:
config.after_initialize do
if Rails.env.production?
ActiveReload::ConnectionProxy::setup!
end
end
3: 配置database.yml(以一个实例的方式描述database.yml的配置)
development:
host: 192.168.0.129
adapter: master_slave
master_slave_adapter: mysql
database: readwrite1
username: zhidu
password: zhidu
socket: /var/run/mysqld/mysqld.sock
master:
database: readwrite1
username: zcy
password: 1234
host: 192.168.0.130
adapter: mysql
配置介绍(只介绍其中一部分,例如encoding、reconnect等没有介绍,如果需要,请自己查找吧,顺便说一句,有一些有默认值的不需要配置):
database(development): slave数据库名称
username: 用户名称
password: 用户密码
socket: 指定mysqld.sock的位置
adapter: 必须指定master_slave
master_slave_adapter: 指定真正的适配器(mysql)
host: slave数据库的地址
master: 主数据库的设置
disable_connection_test: this will disable the connection test before use,can possibly improve the performance but you could also hit stale connections, default is false
eager_load_connections: connections are lazy loaded by default, you can load gem eagerly setting this to true
4: 成功
上一篇: 一次c3p0连接池连接异常错误的排查
下一篇: 关于一个做mysql数据库主从配置的问题
推荐阅读