在使用 express cassandra 和 multi-dc 设置时需要帮助

Need help in using express cassandra with multi-dc setup

你好堆栈溢出社区!

我需要一些帮助来找出在 nodejs 中的 express cassandra orm 模型的帮助下为我的多 dc(总 dc =2)cassandra 设置建立连接的正确方法。

我们目前只使用 1 个 dc 和 express cassandra,因此我们只提供 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' 模块的源代码,但我无法找到解决方案>

如有任何帮助,我们将不胜感激!

从另一个 DC 提供接触点是 never a good idea - 大多数驱动程序(不记得大约 Node.js 驱动程序)正在执行接触点的洗牌,因此它可能首先接触节点在另一个 DC 中,并从该节点的信息中提取 DC 名称,并且会认为该 DC 是应用程序本地的,因此将针对 Analytical DC 执行 LOCAL_QUORUM 查询,这将导致问题。

如果您显式设置应用程序本地的 DC 名称,而不是从接触点隐式检测它,则可以使您的代码更能抵御此类问题。参见driver's documentation for details(在4.0版本中,开发者必须指定本地DC的名称!)