4

当我使用cassandra-driver3.x 版时,一切正常。现在我已经升级了,我收到以下消息...

错误:ArgumentError:“localDataCenter”未在客户端选项中定义,也未在构造函数中指定。至少需要一个。

我的客户声明看起来像这样......

const client = new Client({
        contactPoints: this.servers,
        keyspace: "keyspace",
        authProvider,
        sslOptions,
        pooling: {
            coreConnectionsPerHost: {
                [distance.local]: 1,
                [distance.remote]: 1
            }
        },
        // TODO: Needed because in spite of the documentation provided by DataStax the default value is not 0
        socketOptions: {
            readTimeout: 0
        }
});

我应该为 localDataCenter 属性使用什么?

4

4 回答 4

4

要查找您的数据中心名称,请签入您的节点cassandra-rackdc.properties文件:

$ cat cassandra-rackdc.properties
dc=HoldYourFire
rack=force10

或者,运行nodetool status

$ bin/nodetool status
Datacenter: HoldYourFire
========================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns    Host ID                               Rack
UN  172.0.0.1  575.64 KiB  16           ?       5c5cfc93-2e61-472e-b69b-a4fc40f94876  force10
UN  172.0.0.2  575.64 KiB  16           ?       4f040fef-5a6c-4be1-ba13-c9edbeaff6e1  force10
UN  172.0.0.3  575.64 KiB  16           ?       96626294-0ea1-4775-a08e-45661dc84cfa  force10

如果您有多个数据中心,您应该选择部署应用程序的同一个数据中心。

于 2019-12-18T14:29:12.080 回答
2

由于 v4.0 localDataCenter 现在是必需的客户端选项 当使用默认使用的 DCAwareRoundRobinPolicy 时,现在必须将本地数据中心作为 localDataCenter 提供给客户端选项参数。这是防止将请求路由到远程数据中心中的节点所必需的。

请参阅此处的升级指南。

于 2019-12-18T02:14:49.383 回答
1

我在Cassandra API 模式下使用 Azure CosmosDB 模拟器。我找不到任何关于正确localDataCenter属性的文档,所以我只是datacenter1想看看会发生什么。

const client = new cassandra.Client({
  contactPoints: ['localhost'],
  localDataCenter: 'dataCenter1',
  authProvider: new cassandra.auth.PlainTextAuthProvider('localhost', 'key provided during emulator startup'),
  protocolOptions: {
    port: 10350
  },
  sslOptions: {
    rejectUnauthorized: true
  }
});

client.connect()
  .then(r => console.log(r))
  .catch(e => console.error(e))

这给了我一个非常有用的错误信息:

innerErrors: {
  '127.0.0.1:10350': ArgumentError: localDataCenter was configured as 'datacenter1', but only found hosts in data centers: [South Central US]

一旦我将数据中心更改为“美国中南部”,我的连接就成功了。

于 2020-05-11T19:17:43.067 回答
0

它应该是应用程序正在运行的数据中心或关闭的数据中心。从 datastax nodejs 文档复制的示例

  const client = new cassandra.Client({ 
  contactPoints: ['host1', 'host2'],
  localDataCenter: 'datacenter1'
});
于 2019-12-17T17:09:27.520 回答