memcache的addServer的故障转移机制

如果有多台memcached服务器端(当然其他支持memcache协议的服务前端都可以,比如Tokyo Tyrant),最好使用$memcache->addServer 来连接服务前端。

连接示例:

1
2
3
4
5
6
7
8
9
10
$mem_conf = array (
     array ( 'host' => '192.168.0.11' , 'port' => '11211' ),
     array ( 'host' => '192.168.0.12' , 'port' => '11211' ),
     array ( 'host' => '192.168.0.13' , 'port' => '11211' )
);
 
$memcache = new Memcache ( );
foreach ( $mem_conf as $v ) {
     $memcache ->addServer ( $v [ 'host' ], $v [ 'port' ] );
}

使用$memcache->addServer 而不是 $memcache->connect 去连接 Memcached 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。

如:

1
2
3
4
5
6
7
$mem = new Memcache;
$mem ->addServer( '192.168.0.71' , 11211);
$mem ->addServer( '192.168.0.72' , 11211);
$mem ->addServer( '192.168.0.73' , 11211);
for ( $i =0; $i < 100; $i ++)
     $mem ->set( 'key' . $i , md5( $i ). 'This is a memcached test!' , 0, 60);
}

然后我们通过memadmin工具可以看到上面的key被分布存储在这三台Memcached上了(根据算法自动计算).

Memcache 客户端的 addserver 具有故障转移机制,当 addserver 了2台 Memcached 服务器,而其中1台宕机了,那么 current_server_num 会由原先的2变成1。(2011-10-11个人测试的时候发现无法实现此功能,第二台Memcached不可用的时候,会造成正常要保存到这台 server的数据会丢失的现象)

引用 memcached 官方网站和 PHP 手册中的两段话:
引用
http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.

http://cn.php.net/manual/zh/function.Memcache-addServer.php
Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.

二、repcached实现memcached的复制功能

repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它 的 master/slave都是可读写的,而且可以相互同步,如果 master坏掉, slave侦测到连接断了,它会自动 listen而成 为 master;而如果 slave坏掉, master也会侦测到连接断,它就会重新 listen等待新的 slave加入

安装:先安装memcached(我安装的1.2.8)

有两种方式:

方式一、下载对应的repcached版本

#wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
#tar zxf memcached-1.2.8-repcached-2.2.tar.gz
#cd memcached-1.2.8-repcached-2.2

方式二、下载对应patch版本

#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
#gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1
#./configure --enable-replication
# make
# make install

启动:

启动master

#memcached -v -l 192.168.50.240 -p 11211 -u root
replication: listen (master监听)启动salve
#memcached -v -l 192.168.50.241 -p 11213 -u root -x 127.0.0.1 -X 11212
replication: connect (peer=192.168.50.240:11212)
replication: marugoto copying
replication: start启动正常后,master将accept。

测试:

操作master

#telnet 192.168.50.240 11211
#set key1 0 0 3

111查看slave

#telnet 192.168.50.241 11213
#get key1如果正常表示,配置成功应用:

可以实现cache冗余注意:如果master down机,slave接管并成为master,这时down机的master只能启用slave,他们之间互换角色,才能保持复制功能。换句话说,master没有抢占功能。

转载于:https://www.cnblogs.com/zx98/p/5833525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值