设为首页 收藏本站
查看: 1334|回复: 0

[经验分享] Memcached集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-21 09:06:55 | 显示全部楼层 |阅读模式
一、Memcached如何处理容错的
不处理:在memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择:
1、 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。
把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分key会因为哈希值的改变而被映射到(与原来)不同的节点上。
2、启动热备节点,接管失效节点所占用的IP。这样可以防止哈希紊乱(hashing chaos)。
根据上面的说法,Memcached其中一个节点失效以后,memcached本身是没有任何策略维持失效转发的。
举例说明:
QQ截图20150921090540.png
缺陷说行:如果其中一个缓存节点的机器down机,那么客户端存入的缓存数据将会丢失一部分,就是图中红色字体描述的“Losed 33% Cache Data”,也就是说那部分数据彻底没有了!如果是用户的关键性信息那么就玩大了,如图所示:
QQ截图20150921090603.png
二、解决方案
采用 magent缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器,如下图所示
QQ截图20150921090615.png
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修改

QQ截图20150921090627.png


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116509-1-1.html 上篇帖子: twemproxy memcach集群 下篇帖子: 高效缓存服务器Memcached(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表