一、Memcached如何处理容错的
不处理:在memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择:
1、 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。
把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分key会因为哈希值的改变而被映射到(与原来)不同的节点上。
2、启动热备节点,接管失效节点所占用的IP。这样可以防止哈希紊乱(hashing chaos)。
根据上面的说法,Memcached其中一个节点失效以后,memcached本身是没有任何策略维持失效转发的。
举例说明:
缺陷说行:如果其中一个缓存节点的机器down机,那么客户端存入的缓存数据将会丢失一部分,就是图中红色字体描述的“Losed 33% Cache Data”,也就是说那部分数据彻底没有了!如果是用户的关键性信息那么就玩大了,如图所示:
二、解决方案
采用 magent缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器,如下图所示
Magent:代理服务器 192.168.7.100:12000 192.168.7.101:12000
Memcached主服务器 192.168.7.102:11211 192.168.7.102:11211
Memcached备份服务器 192.168.7.104:11211
注:如过有足够的服务器可以加多台主和多台备份服务器。
三、配置安装memcached在192.168.7.102 192.168.7.103 192.168.7.104 并启动端口11211
yum -y install memcached #安装软件
/etc/init.d/memcached -d -u root -l 192.168.7.102 -m 1024 -p 11211 #启动服务
/etc/init.d/memcached -d -u root -l 192.168.7.103 -m 1024 -p 11211
/etc/init.d/memcached -d -u root -l 192.168.7.104 -m 1024 -p 11211
命令解释:
===========================================================================================
启动Memcache 常用参数
-p <num> 设置TCP端口号(默认不设置为: 11211) -U <num> UDP监听端口(默认: 11211, 0 时关闭) -l <ip_addr> 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问) -d 以daemon方式运行 -u <username> 绑定使用指定用于运行进程<username> -m <num> 允许最大内存用量,单位M (默认: 64 MB) -P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与-d 一起使用
===========================================================================================
四、安装magent
分别在192.168.7.100 & 192.168.7.101上安装magent
===========================================================================================
cd /usr/local/
mkdir ./magent
cd ./magent
wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz
tar xzvf ./magent-0.6.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp ./magent /usr/bin/magent
===========================================================================================
Magent 命令详解
magent命令详解:
-h this message
-u uid
-g gid
-p port, default is 11211. (0 to disable tcp support)
-s ip:port, set memcached server ip and port
-b ip:port, set backup memcached server ip and port
-l ip, local bind ip address, default is 0.0.0.0
-n number, set max connections, default is 4096
-D do not go to background
-k use ketama key allocation algorithm
-f file, unix socket path to listen on. default is off
-i number, max keep alive connections for one memcached server, default is 20
-v verbose
===========================================================================================
分别在192.168.7.100 & 192.168.7.101上启用magent
magent -u root -n 51200 -l 192.168.7.100 -p 12000 -s 192.168.7.102:11211 -s 192.168.7.103:11211 -b 192.168.7.104:11211
magent -u root -n 51200 -l 192.168.7.101 -p 12000 -s 192.168.7.102:11211 -s 192.168.7.103:11211 -b 192.168.7.104:11211
五、测试(使用php测试,其他的比如java或者C都可以去百度查看下接口即可)
php脚本如下
===========================================================================================
<?php
$mem = new Memcache;
$mem->connect("192.168.7.100", 12000);
$key1 = 'shuaige1';
$value1 = '1';
$mem->add($key1, $value1);
$key2 = 'shuaige2';
$value2 = '2';
$mem->add($key2, $value2);
$key3 = 'shuaige3';
$value3 = '3';
$mem->add($key3, $value3);
$key4 = 'shuaige4';
$value4 = '4';
$mem->add($key4, $value4);
$key5 = 'shuaige5';
$value5 = '5';
$mem->add($key5, $value5);
$key6 = 'shuaige6';
$value6 = '6';
$mem->add($key6, $value6);
$mem->close();
?>
===========================================================================================
执行测试
/usr/bin/php test.php #
1、PHP连接magent,把缓存key1交给magent,magent根据自身的配置参数,再加上一定的哈希算法,会计算出key1存在2台主Memcached服务器的某一台上,然后以同样的算法,将key1也在台备用的Memcached服务器中。
注:如果有机器的话,设置两个备份memcached这样在存储备份的时候也将是分布式的。
2、在PHP获取缓存数据key1时,magent一旦得知数据所存的那台主Memcached服务器挂掉了,它就会转向从备用的Memcached服务器中获取数据。注意:服务器的定位选择算法跟存的时候是一样的。
3、有个缺陷,当 down 掉的那台主Memcached服务器重新恢复正常后,Memcahed里是没有数据的,即数据全部丢失,但此时 备用的Memcached服务器 又不会将数据同步到 主服务器。
六、通过Memcached管理软件Memadmin去查看上述数据分布情况
1、打开链接:http://www.junopen.com/memadmin/ 下载然后上传到Linux服务器上
2、 安装php的memcache扩展包php-pecl-memcache
yum -y install php-pecl-memcache
3、修改apache配置文件添加php
DirectoryIndex index.html index.html.var index.php
4、解压memadmin然后放到/var/www/html里
5、直接打开IE输入IP地址然后打memadmin/index.php即可。解压之后就是
6、memadmin默认的密码是amin/admin ,密码可以通过: /var/www/html/memAdmin/config.php修改
|