Read replication - 读取复制

Sequelize 支持读复制,即当你想要进行 SELECT 查询时,可以连接多个服务器. 执行读取复制时,指定一个或多个服务器作为只读副本,并且一个服务器替换相同的副本(请注意,Sequelize不会处理实际的复制过程,而应由后端数据库处理).

  1. const sequelize = new Sequelize('database', null, null, {
  2. dialect: 'mysql',
  3. port: 3306
  4. replication: {
  5. read: [
  6. { host: '8.8.8.8', username: 'read-username', password: 'some-password' },
  7. { host: '9.9.9.9', username: 'another-username', password: null }
  8. ],
  9. write: { host: '1.1.1.1', username: 'write-username', password: 'any-password' }
  10. },
  11. pool: { // 如果要覆盖用于读/写池的参数,可以在此处执行此操作
  12. max: 20,
  13. idle: 30000
  14. },
  15. })

如果你有适用于每个实例的任何常规设置. 在上面的代码中,数据库名称和端口将传播到所有副本. 对于用户和密码,如果你将其留给任何副本,也会发生同样的情况.每个副本都有以下参数:host,port,username,password,database.

Sequelize 使用池来管理与副本的连接. 内部 Sequelize 将维护使用 pool 配置创建的两个池.

如果要修改这些,可以在实例化 Sequelize 时将池作为参数传递,如上所示.

每个 writeuseMaster: true 查询都将使用写入池. 对于 SELECT,将使用读取池. 使用基本循环调度切换只读副本.