我有2个memcached服务器,我正在使用memcached nodejs client。
https://github.com/3rd-Eden/memcached#server-locations
现在问题是,如果我从任何一台服务器停止memcached,另一台服务器也不会得到任何查询。 但它应该将数据保存在其他服务器上。
var Memcached = require('memcached');
var memcached = new Memcached(['127.0.0.1:11211','2nd server:11211'], {retries:0,retry:0,remove:false,failOverServers:['3rd:11211']});
// Added failure log
memcached.on('reconnecting', function( details ){ console.log( "Total downtime caused by server " + details.server + " :" + details.totalDownTime + "ms");});
memcached.on('failure', function(details) {
console.log(new Date() + " - - - Server " + details.server + "went down due to: " + details.messages.join( '' ) );
});
memcached.on('reconnecting', function(details) {
console.log(new Date() + " - - - Total downtime caused by server " + details.server + " :" + details.totalDownTime + "ms");
});
memcached.on('issue', function(details) {
console.log(new Date() + " - - - Server " + details.server + " has an issue: " + details.messages.join( '' ));
});
当我做的时候
memcached.add(key, value, expiry, function (err) {
if(err){
callback(false);
} else {
callback(true);
}
});
我获取故障服务器的日志 连接ECONNREFUSED
但是localhost上的服务器也没有在缓存中保存任何内容。
第3台服务器的memcached中也没有任何内容
我用这个命令看看发生了什么
memcached -vv -m 1024 -u memcache -l 127.0.0.1 -p 1121
我有memcached@2.2.2 node npm
和节点版本V6.0.0和Linux RedHat服务器
答案 0 :(得分:0)
您正在尝试同时连接到两个Memcached服务器,这很可能是为了实现负载平衡目的。 Memcached会将一些密钥存储在一台服务器上,而其他则存储在另一台服务器上,因此取决于两者。
Memcached构造函数的第一个参数定义单个字符串,字符串数组或对象,然后库尝试同时连接所有它们。
这不是后来定义的failOverServers
数组,应用程序可以不使用它。
因此,代码中的错误是第二个实例的无效定义,即
'2nd server:11211'
这是无效的URL,因此Memcached将无法连接到此“服务器”,从而引发 ECONNREFUSED 错误。
只需从数组中删除第二个实例,并将行修改为:
new Memcached('127.0.0.1:11211', {/* ... */});
来源:https://www.npmjs.com/package/memcached#user-content-setting-up-the-client