2013-10-10 26 views
2

我在yii中存在问题并将数据存储在memcache中。对于我的应用程序使用system.caching.CMemCache和以下配置:使用yii与memcache,当两台服务器中的一台出现故障时出错

'servers' => array(
    'server1' => array('host' => 'localhost', 'port' => 11211, 'weight' => 50), 
    'server2' => array('host' => '192.168.0.2', 'port' => 11211, 'weight' => 50) 
), 

如果在两个系统内存缓存运行,一切正常,值得到普及起来的服务器上。但如果一台服务器出现故障(或者,如果我手动停止内存缓存)的应用程序抛出这样的错误

MemcachePool::get(): Server 192.168.0.2 (tcp 11211, udp 0) failed with: Connection refused (111) 

这是不是真的很好,我想,如果一个服务器失败警予会选择另一台服务器用于读取和写入或至少产生一些高速缓存未命中,并且不抛出exeption :(

这是正常的还是有一些配置问题?

+0

是你用'memcached'还是'memcache'? http://www.yiiframework.com/doc/api/1.1/CMemCache#useMemcached-detail。是否可以从命令行连接这些服务器? – sakhunzai

回答

2

我认为正常的,你看到这些消息所讨论here,因为你正在使用memcache分机号码

并且还读取了这个SO

php的扩展名有两个版本,一个是memcache,另一个是memcached

sudo apt-get install php5-memcache 
    and 
sudo apt-get install php5-memcached 

Memecached扩展处理failover的情况下,从上面的链接,因为我读,并通过试验以下设置在警予

'cache'=>array(
      'class'=>'CMemCache', 
      'useMemcached'=>true, 
      'servers'=>array(
       array(
        'host'=>'localhost', 
        'port'=>11211, 
        'weight'=>60, 
       ), 
       array(
        'host'=>'192.168.33.31', 
        'port'=>11211, 
        'weight'=>30, 
       ), 
      ), 
     ), 

确认安装memcached扩展:可以在Ubuntu盒状安装它们如上所述,并添加'useMemcached'=>true,设置缓存配置。当我测试我的本地主机,它处理故障转移的情况,但页面响应时间显着下降。

希望这会有所帮助。

+0

嗨sakhunzai,感谢您的回答,也许它确实是因为我使用memcache而不是memcached。经过一些刷新或一段时间后,消息不再显示,应用程序使用另一个memcache-server。但在我的情况下,我刚才看到我无法使用memcache,因为如果我使用3台服务器和一台服务器死掉,另外2台服务器上的许多缓存键会被重写,并且由于性能问题,这对我来说不是一种可能性 – RCX

相关问题