在将Express Cassandra与多直流设置配合使用时需要帮助

时间:2019-03-30 07:02:56

标签: node.js cassandra express-cassandra datastax-node-driver

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'模块的源代码,但无法找到解决方案>

这里的任何帮助将不胜感激!

1 个答案:

答案 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的名称!)