首页 > 解决方案 > 在使用带有多直流设置的 express cassandra 时需要帮助

问题描述

你好堆栈溢出社区!

我需要一些帮助来找出在 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 驱动程序”模块的源代码,但我无法找出解决方案>

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

标签: node.jscassandraexpress-cassandradatastax-node-driver

解决方案


从另一个 DC 提供联系点绝不是一个好主意- 大多数驱动程序(不记得有关 Node.js 驱动程序)正在执行联系点的洗牌,因此它可能首先联系另一个 DC 中的节点,并提取 DC 名称从该节点的信息中,会认为该 DC 是应用程序本地的,因此 LOCAL_QUORUM 查询将针对分析 DC 执行,这将导致问题。

如果您为您的应用程序显式设置本地 DC 名称,而不是从接触点隐式检测它,您可以使您的代码更加防弹。详见驱动文档(4.0版本,开发者必须指定本地DC的名称!)


推荐阅读