2017-06-29 1 views
2

Nous préparer pour une très grande augmentation subite du trafic, mais la question est également conçu comme un générique:Comment gérer une nouvelle réplique dans le cluster RDS avec Sequelize?

Sachant que vous pouvez configurer Sequelize utiliser un cluster de RDS bases de données (dans notre cas: Aurora) comme si:

const master = { rdsClusterWriterEndpoint, username, password, port, database } 
const replica = { rdsClusterReaderEndpoint, username, password, port, database } 
const Sequelize = require('sequelize') 
const sequelize = new Sequelize(null, null, null, { 
    dialect: 'mysql', 
    pool: { 
    handleDisconnects: true, 
    min: 0, 
    max: 10, 
    idle: 10000, 
    }, 
    replication: { 
    write: master, 
    read: [replica], 
    }, 
}) 

Comment pourrais-je gérer l'ajout d'une nouvelle instance RDS au cluster pour équilibrer la charge se lit encore plus sans recharger l'application?

J'ai piqué mais je n'ai pas trouvé un bon moyen de le faire. La résolution DNS semble être effectuée une fois au démarrage et je n'ai pas trouvé un moyen de l'actualiser de temps en temps.

Est-ce que quelqu'un a trouvé un moyen sûr de le faire?

Merci

Répondre

0

J'ai fini avec une configuration comme ceci:

const maxConnectionAge = moment.duration(10, 'minutes').asSeconds() 
const pool = { 
    handleDisconnects: true, 
    min: 1, 
    max: 10, 
    idle: 10000, 
    validate: (obj) => { 
    if (!obj.createdAt) { 
     obj.createdAt = moment() 
     return true 
    } 
    return moment().diff(obj.createdAt, 'seconds') < maxConnectionAge // Recycle connexions every maxConnectionAge seconds 
    }, 
} 
const master = { rdsClusterWriterEndpoint, username, password, port, database, pool } 
const replica = { rdsClusterReaderEndpoint, username, password, port, database, pool } 
const sequelize = new Sequelize(null, null, null, { 
    dialect: 'mysql', 
    replication: { 
    write: master, 
    read: [replica] 
    } 
} 

La connexion à l'intérieur de la piscine sont recyclés à intervalle régulier qui déclenche la diffusion de nouvelles répliques introduites dans le cluster. Ce n'est pas idéal car la plupart du temps, il est recyclé sans raison et lorsque vous ajoutez des répliques pour gérer une pression croissante sur le DB, vous voudrez peut-être que cela prenne effet plus tôt que plus tard, mais c'est ma solution pour les pauvres. moment et il nous a aidés à passer par une augmentation assez importante du trafic récemment.

Par souci de simplicité, j'utilise la même configuration de pool pour le maître et les lecteurs, mais cela ne devrait évidemment pas être le cas.

Si quelqu'un a une meilleure idée, je suis tout ouïe;)