我在服务器上安装了aerospike 6.0.0,并将其用作缓存。我还使用Node.js客户端5.2.0连接到数据库。aerospike节点配置为使用TLS。我使用的名称空间的配置是:
namespace application_cache {
memory-size 5G
replication-factor 2
default-ttl 1h
nsup-period 1h
high-water-memory-pct 80
stop-writes-pct 90
storage-engine memory
}
连接到Db时传递的配置是:
"config": {
"captureStackTraces":true,
"connTimeoutMs": 10000,
"maxConnsPerNode": 1000,
"maxCommandsInQueue" : 300,
"maxCommandsInProcess" : 100,
"user": "test",
"password": "test",
"policies": {
"read": {
"maxRetries": 3,
"totalTimeout": 0,
"socketTimeout": 0
},
"write": {
"maxRetries": 3,
"totalTimeout": 0,
"socketTimeout": 0
},
"info": {
"timeout": 10000
}
},
"tls": {
"enable": true,
"cafile": "./certs/ca.crt",
"keyfile": "./certs/server.key",
"certfile": "./certs/server.crt"
},
"hosts": [
{
"addr": "-----.com",
"port": 4333,
"tlsname": "----"
},
{
"addr": "---.com",
"port": 4333,
"tlsname": "-----"
},
{
"addr": "----.com",
"port": 4333,
"tlsname": "-----"
}
]
}
这是我用来写入这个名称空间中的集合的函数:
async function updateApp(appKey, bins) {
let result = {};
try {
const writePolicy = new Aerospike.WritePolicy({
maxRetries: 3,
socketTimeout: 0,
totalTimeout: 0,
exists: Aerospike.policy.exists.CREATE_OR_UPDATE,
key: Aerospike.policy.key.SEND
});
const key = new Aerospike.Key(namespace, set, appKey);
let meta = {
ttl: 3600
};
let bins = {};
result = await asc.put(key, bins, meta, writePolicy);
} catch (err) {
console.error("Aerospike Error:", JSON.stringify({params: {namespace, set, appKey}, err: {code: err.code, message: err.message}}));
return err;
}
return result;
}
它工作的大部分时间,但偶尔我得到这个错误:
Aerospike Error: {"params":{"namespace":"application_cache","set":"apps","packageName":"com.test.application"},"err":{"code":-6,"message":"TLS write failed: -2 34D53CA5C4E0734F 10.57.49.180:4333"}}
此集合中的每条记录都有大约12-15个bin,记录的大小在300 Kb到1.5Mb之间。记录的大小越大,出现此错误的可能性就越高。以前是否有人遇到过此问题?是什么原因导致了此问题?
1条答案
按热度按时间7xzttuei1#
我在community forum上回答了这个问题,但我想我也会在这里添加它。
看看server error codes,
code: 6
就是AS_ERR_BIN_EXISTS
。您的写入策略是使用exists: Aerospike.policy.exists.CREATE_OR_UPDATE
设置的,但exists
的选项是:| 姓名|说明|
| - ------|- ------|
|
IGNORE
|写入记录,而不管其是否存在(即创建或更新)。||
CREATE
|创建一个记录,仅当它不存在时。||
UPDATE
|更新记录,仅当记录存在时。||
REPLACE
|完全替换记录,仅当记录存在时。||
CREATE_OR_REPLACE
|如果记录存在,则完全替换记录,否则创建记录。|我的猜测是它默认为
CREATE
,这只会导致它抛出那个错误。尝试更新你的写策略以使用exists: Aerospike.policy.exists.IGNORE
,看看你是否仍然得到那个错误。