本文へスキップ
バージョン: v6 - 安定版

リードレプリケーション

Sequelizeはリードレプリケーション、つまり、SELECTクエリを実行する場合に接続できる複数のサーバーを持つことをサポートしています。リードレプリケーションを行う場合、1つ以上のサーバーをリードレプリカとして、1つのサーバーをメインライターとして指定します。メインライターはすべての書き込みと更新を処理し、それらをレプリカに伝播します(実際のレプリケーションプロセスは**Sequelizeでは**処理されず、データベースバックエンドで設定する必要があります)。

const sequelize = new Sequelize('database', null, null, {
dialect: 'mysql',
port: 3306,
replication: {
read: [
{
host: '8.8.8.8',
username: 'read-1-username',
password: process.env.READ_DB_1_PW,
},
{
host: '9.9.9.9',
username: 'read-2-username',
password: process.env.READ_DB_2_PW,
},
],
write: {
host: '1.1.1.1',
username: 'write-username',
password: process.env.WRITE_DB_PW,
},
},
pool: {
// If you want to override the options used for the read/write pool you can do so here
max: 20,
idle: 30000,
},
});

すべてのレプリカに適用される一般的な設定がある場合、インスタンスごとにそれらを指定する必要はありません。上記のコードでは、データベース名とポートはすべてのレプリカに伝播されます。ユーザー名とパスワードについても、いずれかのレプリカで省略した場合、同様に伝播されます。各レプリカには、次のオプションがあります: `host`、`port`、`username`、`password`、`database`。

Sequelizeはプールを使用して、レプリカへの接続を管理します。内部的にSequelizeは、`pool`設定を使用して作成された2つのプールを維持します。

これらを変更する場合は、上記のようにSequelizeをインスタンス化するときにオプションとしてプールを渡すことができます。

各`write`クエリまたは`useMaster: true`クエリは書き込みプールを使用します。`SELECT`クエリには読み込みプールが使用されます。リードレプリカは、基本的なラウンドロビン方式で切り替えられます。