我应该在Cassandra-Driver 4.x中对localDataCenter使用什么

时间:2019-12-17 16:26:00

标签: cassandra cassandra-driver

当我使用cassandra-driver 3.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 个答案:

答案 0 :(得分:2)

要查找您的数据中心名称,请检入节点的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

如果您有多个数据中心,则应选择与应用程序部署所在的中心相同的数据中心。

答案 1 :(得分:1)

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

请参阅升级指南here

答案 2 :(得分:1)

我正在Cassandra API mode中使用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]

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

答案 3 :(得分:0)

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

site-packages