nodejs memcached如果一个服务器关闭,其他服务器也不会被查询

时间:2017-04-22 06:54:14

标签: node.js memcached

我有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服务器

1 个答案:

答案 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