当我使用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属性使用什么?
答案 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