Hello Stack溢出社区!
我需要一些帮助,以便在我的多dc(total dc = 2)cassandra设置中,借助nodejs中的Express cassandra orm模型来确定建立连接的正确方法。
目前,Express Cassandra仅使用1 dc,因此对于相同的情况,我们仅给出2个种子节点IP地址作为Express Cassandra的联系点,如下所示
models.setDirectory(__dirname + '/models').bind(
{
clientOptions: {
contactPoints: cassandraContactPoints,
protocolOptions: { port: 9042 },
keyspace: 'keyspace_name',
queryOptions: { consistency: models.consistencies.one }
},
ormOptions: {
defaultReplicationStrategy: {
class: 'NetworkTopologyStrategy',
replication_factor: 2,
},
createKeyspace: false,
dropTableOnSchemaChange: false
}
},
function (err) {
if (err) {
throw err;
} else {
console.log('connection established');
postDBConnection(models, 'keyspace name again');
}
}
这里要注意的是,我们将cassandraContactPoints指定为仅包含现有dc的2个节点的数组。
由于我们出于分析目的而使用了一个单独的DC,因此我想知道是否应该在同一数组中提供新DC的ip地址,即cassandraContactPoints?我们计划使用LOCAL_QUORAM,并希望我们的分析应用程序仅对所有读取和写入使用分析dc。
我尝试阅读Express cassandra和'cassandra driver'模块的源代码,但无法找到解决方案>
这里的任何帮助将不胜感激!
答案 0 :(得分:2)
从另一个DC提供接触点是never a good idea-大多数驱动程序(不记得有关Node.js驱动程序)正在执行接触点的改组,因此它可能首先联系另一个DC中的节点,并从该节点的信息中提取DC名称,并且会认为DC对于应用程序是本地的,因此将针对Analytical DC执行LOCAL_QUORUM查询,这将导致问题。
如果您显式设置应用程序本地的DC名称,而不是从接触点隐式检测到DC名称,则可以使代码更能抵御此类情况。请参见driver's documentation for details(在版本4.0中,开发人员必须指定本地DC的名称!)