博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcached(十一)magent实现高可用
阅读量:6252 次
发布时间:2019-06-22

本文共 3070 字,大约阅读时间需要 10 分钟。

可用性

  可用性是指系统一段时间内没故障的时间占比多少。比如说在1个小时里面,出现了故障系统出现5xx、4xx的http响应码。用了3分钟才修复问题。那么这1个小时内这个系统的可用性就是(60-3)/60=95%。

  系统可用性:(总时间-故障时间)/总时间 * 100%

 

memcached单点问题、memcached实现高可用

  memcached如何实现高可用性呢?

 

  其实跟mysql high available的概念差不多。在应用和memcached(mysql)之间增加代理。应用连接2个或者以上的代理。通过代理找到具体的数据节点(memcached/mysql)。

 

  下面是单点memcached,不使用代理的情况, 图:

 

  本来使用memcached可以拦截住很大一部分的请求。忽然之间memcached挂了的话,请求都丢到数据库中了:

  请求都丢到数据库中,数据库处理不过来。导致整个系统都卡顿,挂掉的情况。称呼为雪崩现象。如果这时候忽然之间恢复memcached(数据已经丢失了),大量的memcached都不存在请求想要的数据了。然后依然要访问数据库,系统稳定性照样有问题。

 

  为了避免memcached单点故障。使用代理的情况, 图:

  通过agent,可以避免单点memcached故障问题。而且还可以增加备份的memcached,其中一个点挂了,agent读取该点的时候有备份。下图是有备份的情况:

  

magent安装

  magent是一个memcached的代理软件。应用请求magent,magent把memcached的请求转发到对应的memcached(也可以继续转发给magent)。

 

  本来项目源码是托管在googleCode中的。目前google code已经关闭。我们需要先把magent导出到我们自己的github地址中去。

 

  google code中的地址:https://code.google.com/p/memagent/

 

  点击导出到 github。 按照提示输入内容。下面是我的地址:

  

 

  在个人的github repository中, donwnload zip。解压缩。

  执行make命令报错了?

root@Ebian:~/tools/magent/test# makegcc -Wall -O2 -g  -c -o magent.o magent.cmagent.c: In function ?.ritev_list?.magent.c:623:17: error: ?.SIZE_MAX?.undeclared (first use in this function)    if (toSend > SSIZE_MAX ||                 ^magent.c:623:17: note: each undeclared identifier is reported only once for each function it appears inMakefile:14: recipe for target 'magent.o' failedmake: *** [magent.o] Error 1

google得知,需要修改magent.c源码增加define(http://technicalsearch.iteye.com/blog/1698723)

#ifndef SSIZE_MAX# define SSIZE_MAX      32767#endif

  然后还是报错了:

root@Ebian:~/tools/magent/test# makegcc -Wall -O2 -g  -c -o magent.o magent.cgcc -Wall -O2 -g  -c -o ketama.o ketama.cgcc -Wall -O2 -g -o magent magent.o ketama.o -leventketama.o: In function `create_ketama':/root/tools/magent/test/ketama.c:399: undefined reference to `floorf'collect2: error: ld returned 1 exit statusMakefile:17: recipe for target 'magent' failedmake: *** [magent] Error 1

继续google,得知缺少库()

修改MakeFile脚本:

LIBS = -leventCFLAGS = -Wall -O2 -g -lmCC = gccPROGS = magentall: $(PROGS)STPROG = magent.o ketama.oketama.o: ketama.c ketama.h        $(CC) $(CFLAGS) $(INCLUDE) -c -o $@ ketama.cmagent.o: magent.c ketama.h        $(CC) $(CFLAGS) $(INCLUDE) -c -o $@ magent.cmagent: $(STPROG)        $(CC) $(CFLAGS) -o $@ $^ $(LIBS)clean:        rm -f *.o *~ $(PROGS) tags

  make成功了。

root@Ebian:~/tools/magent/test# makegcc -Wall -O2 -g -lm  -c -o magent.o magent.cgcc -Wall -O2 -g -lm  -c -o ketama.o ketama.cgcc -Wall -O2 -g -lm -o magent magent.o ketama.o -leventroot@Ebian:~/tools/magent/test# lsketama.c  ketama.h  ketama.o  magent  magent-0.5.tar.gz  magent.c  magent.o  Makefile

 

启动magent的方式:

./magent -p 11210  -s localhost:11211 -b localhost:11212
  -s参数是server 主机;
  -b参数是备机。
  -p参数是magent端口。
 
默认就是daemon进程的了。 可以增加-v 输出调试日志然后就变成不是守护进程。

 

注意事项

  1、引入magent,毕竟是增加了一层代理。请求memcached的性能会有所下降的。

  2、使用magent,有主备的情况。主挂了,magent会自动访问备份,备是有数据的。但是主恢复后,就会访问主,会变成没有数据的

 

数据复制

  使用magent的时候,主memcached挂了后,希望从备memcached恢复。 就涉及到数据复制功能了。

  然后,memcached本身不带有数据复制功能。有一个工具可以对1.2.x版本的mc进行数据复制:  。

  不过话说回来,考虑数据复制就建议使用redis了。。。

 

转载于:https://www.cnblogs.com/ELMND/p/4546262.html

你可能感兴趣的文章
<Android>从窗口泄漏谈android:configChanges属性
查看>>
MySQL运行原理与基础架构
查看>>
动物产生式识别系统
查看>>
python *args **kwargs
查看>>
Jquery UI - DatePicker 在Dialog中无法自动隐藏的解决思路
查看>>
Docker Swarm 让你事半功倍
查看>>
jQuery选择器之子元素过滤选择器Demo
查看>>
LogBoy运行截图
查看>>
string.Format字符串格式说明
查看>>
关于配置Tomcat的URIEncoding
查看>>
【C语言 C++】简单keywordRegister,Const,Static,Volatile,typedef,Define的理解
查看>>
POJ 3518 Prime Gap(素数)
查看>>
[笔记][Java7并发编程实战手冊]3.4 等待多个并发事件的完毕CountDownLatch倒计数闭锁...
查看>>
Java基础(十三):集合
查看>>
c#:使用using关键字自动释放资源未必一定就会有明显好处
查看>>
Python3.6的组件numpy的安装
查看>>
标准SQL语句总结
查看>>
Python的编码问题
查看>>
DirectX怪像之一,我的模型不见了
查看>>
Javascript 打开模式窗口
查看>>