repcached说是高可用,实际上也不过只是memcached的复制而已。

repcached并不在ubuntu的更新源里面,要自己手动编译,比较原始的linux程序发布方法。去http://repcached.lab.klab.org/下载最新版本,我这时候拿到的是memcached-1.2.8-repcached-2.2.1.tar.gz,其官网上有特别说明“repcached - add data replication feature to memcached 1.2.x”。事实证明,这段话很关键,你用memcached的其他版本是不能用repcached的。

安装repcached之前先要安装相关的编译工具

1 apt-get install build-essential
2 apt-get install libevent-dev

libevent-dev是一定需要安装的,否则会编译不过,然后就是解包,configure,make

tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz
cd memcached-1.2.8-repcached-2.2.1
./configure --enable-replication  --program-transform-name=s/memcached/repcached/
make
make install

如果之前没有安装libevent-dev的话,一定编译不过,自然也不能install,如果安装了的话,也不一定能编译过,呵呵。编译错误提示如下

memcached.c: 在函数‘add_iov’中:
memcached.c:697:30: 错误: ‘IOV_MAX’未声明(在此函数内第一次使用)
memcached.c:697:30: 附注: 每个未声明的标识符在其出现的函数内只报告一次

到了这份上,不去改代码的话就真的不能继续了,找到memcached.c中的IOV_MAX宏定义,

......55 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */56 #ifndef IOV_MAX57 #if defined(__FreeBSD__) || defined(__APPLE__)58 # define IOV_MAX 102459 #endif60 #endif
......

在代码的58行附近找到了这个宏定义,看起来原先代码的意思是对freebsd和apple系统启用这个宏,其他情况不定义(可能是其他系统本身就已经定义了)。注释掉第57和59行,让IOV_MAX在任何情况下都有定义。再次编译,这次编译过了,但是有很多warning,类似下面这样

memcached.c:1128:9: 警告: 格式 ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long unsigned int’ [-Wformat]
memcached.c:1135:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1139:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1140:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1141:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1142:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1143:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1144:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1145:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1146:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1147:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘size_t’ [-Wformat]
memcached.c:1150:9: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c:1155:9: 警告: 格式 ‘%u’ expects argument of type ‘unsigned int’, but argument 3 has type ‘long int’ [-Wformat]
memcached.c: 在函数‘process_get_command’中:
memcached.c:1334:19: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]
memcached.c: 在函数‘do_add_delta’中:
memcached.c:1576:5: 警告: 格式 ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’ [-Wformat]

原因也很明显,代码的移植性并没有考虑到在多个多个不同的系统上uint64_t这个类型的定义,我的系统是ubuntu 64位。当然,还有其他类型不匹配的地方,如果你有代码洁癖的话,可以逐个去改,并不麻烦,如果像我一样只是想试用一下功能而已的话呢,就当warning不存在,继续用吧。

下面是启动repcached,同样,很多参数用默认

repcached -p 11211 -d -v
repcached -p 11212 -x localhost -d -v

第一个命令是启动master服务,第二个是启动slave服务,测试一下从master输入,从slave获取

telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set hello 0 0 3
123
STORED

telnet localhost 11212
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get hello
VALUE hello 0 3
123
END

也可以测试删除或者其他什么的,不贴了,基本和单机差不多。下面模拟一下其中一个repcached挂了,假设是master挂了,用kill干掉master的进程,连接master的telnet立刻就提示连接被关闭,这时候去看slave上的数据

get hello
VALUE hello 0 3
123
END

数据依然在,这时候再去启动master似乎恢复不了shutdown之前的状况,这是因为我们在启动的时候没有指定复制端口号,用-X选项

repcached -p 11211 -X 11111 -d -v
repcached -p 11212 -x localhost -X 11111 -d -v

这时候repcached之间使用端口11111来通信,即使master挂了,还可以重启恢复

repcached -p 11211 -x localhost -X 11111 -d -v

这时候再去连master,原先的数据又回来了

get hello
VALUE hello 0 3
123
END

至此,repcached的试用结束,虽然在某些程度上repcached已经实现了某种程度上的高可用,但是这种实现并不足够。比如,repcached只支持1.2.x版本的memcached,如果想用的话,还要把高版本的memcached删掉;再比如,repcached只支持两个进程互相传数据,再启一个进程就不能复制数据。这些在试用中都不能完成

转载于:https://www.cnblogs.com/valleylord/p/3500614.html

试用memcached高可用repcached相关推荐

  1. memcached 高可用工具 memcached-ha

    为什么80%的码农都做不了架构师?>>>    MemcachedHA 包装一种memcached client 使系统达到对memcached的高可用控制.日本人开发的.项目地址: ...

  2. 持久性session连接之memcached高可用方案

    关于session持久性连接,我们大多都使用memcached做为缓存服务器.但是众所周知memcached具有的是单点故障的风险.针对于这个问题上次公司更新代码的情况做一下简述: 凌晨开发执行了几条 ...

  3. 面向业务的立体化高可用架构设计

    通常情况下我们在谈论高可用架构设计的时候,主要关注的是系统结构的高可用,例如主备架构.集群架构.多中心架构.我们做架构设计的时候,也主要是从系统结构本身出发,例如我们把单机改为双机.双机改为集群.单机 ...

  4. Memcached主从复制+keepalived高可用架构

    实现主从复制和高可用的方式 Memcached主从复制是指在主Mencached服务器上修改数据都会被同步到其他服务器上,MemcachedAPI客户端是无法判断连接到那一台Memcached服务器, ...

  5. OpenStack如何实现高可用集群介绍

    OpenStack是目前基于开源的,一个非常流行的云管理平台项目.这个项目由几个主要的组件组合起来完成一些具体的工作.因此它的集群比较复杂,也有多种选择方式.OpenStack 作为一个类似于 Ama ...

  6. redis主从复制、高可用和集群

    redis简介:     redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zse ...

  7. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  8. 亿级商品详情页架构演进技术解密 | 高可用架构系列

    亿级商品详情页架构演进技术解密 | 高可用架构系列 --http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=210272034&i ...

  9. Linux-HA 高可用开源方案 Keepalived VS Heartbeat 对比

    两款高可用开源方案:Keepalived和Heartbeat.两者都很流行,但差异还是很大的,现将试用过程中的感受以及相关知识点简单总结一下,供大家选择方案的时候参考. 1)Keepalived使用更 ...

最新文章

  1. 【高级数据类型2】- 10. 接口
  2. 入职大厂,我容易吗?
  3. C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什...
  4. main arguments C语言,IT之家学院:通俗科普C语言main函数的参数
  5. 洛谷P4463:calc(dp、拉格朗日插值)
  6. 【转】Linux终端下 dstat 监控工具
  7. 夜读源码,带你探究 Go 语言的iota
  8. 漂亮、免费和响应式HTML5网站模板 - 转
  9. php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
  10. 算法导论12.2节习题解答
  11. 【生信进阶练习1000days】day16~day22-RNA-seq data analysis with limma edgeR and Glimma
  12. 工业交换机的管理方式有哪些?
  13. 证件照(1寸2寸)拍摄处理知识汇总
  14. PROFINET分布式I/O总线模块的优势有哪些?
  15. ERROR: Failed to open zip file. Gradle‘s dependency cache may be corrupt (this sometimes occurs afte
  16. 听劝!不要啥都不懂就学PMP!这100个考试关键点,带你直击考试现场
  17. 有网络时yum无法安装,报错:Loading mirror speeds from cached hostfile
  18. html星空炫彩粒子,炫彩粒子模拟
  19. Image through Atmospheric Turbulence笔记(一)
  20. hdmi转lvds驱动方案。 输入支持vga,hdmi,av,输出支持lvds单通道和双通道

热门文章

  1. php5.3源码,php5.3介绍
  2. Java设计模式(七大原则和单例模式篇)
  3. 智能车百度赛道培训第二弹-算法篇
  4. 第十五届全国大学生智能车竞赛安徽赛区比赛报名信息
  5. Mac中安装JDK1.8和JDK11双版本并任意切换
  6. linux c 获取文件权限,如何在C / C++中以编程方式读取Linux文件权限
  7. h30-t10 android phone,荣耀(荣耀)3C H30-T10/2GB RAM/移动3G手机系统介绍评测-ZOL中关村在线...
  8. 安卓html5桌面提醒,HTML5桌面通知提示功能的实现
  9. mysql mysqlhotcopy_MySQL备份之mysqlhotcopy与注意事项
  10. fastcopy会损坏硬盘_电脑硬盘损坏如何修复?自己动手就能解决