Memcached HA架构探索
https://code.google.com/p/memagent/
标签:memcached magent 高可用 HA 架构
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://centilinux.blog.51cto.com/1454781/968104
magent是一款开源的Memcached代理服务器软件,可以用它做一些高可用架构尝试。目前magent已更新到0.6,我在centos 6.0 64bit机器上面未编译通过,所以我在这里用0.5的源码来测试;
google项目地址:http://code.google.com/p/memagent/
一、安装步骤:
1、编译安装libevent:
- wget https://github.com/downloads/lib ... .0.16-stable.tar.gz
- tar zxvf libevent-2.0.16-stable.tar.gz
- cd libevent-2.0.16-stable/
- ./configure --prefix=/usr
- make && make install
- cd ../
2、编译安装Memcached:
- wget http://memcached.googlecode.com/files/memcached-1.4.14.tar.gz
- tar zxvf memcached-1.4.14.tar.gz
- cd memcached-1.4.14/
- ./configure --prefix=/usr --with-libevent=/usr
- make && make install
- cd ../
3、编译安装magent:
- mkdir magent
- cd magent/
- wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
- tar zxvf magent-0.5.tar.gz
- /sbin/ldconfig
- vim Makefile
- CFLAGS = -Wall -O2 -g
- 改为:
- CFLAGS = -lrt -Wall -O2 -g
- sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
- vim ketama.h
- 加入
- #ifndef SSIZE_MAX
- #define SSIZE_MAX 32767
- #endif
- make
- cp magent /usr/bin/magent
- cd ../
安装中常遇到的问题
- gcc -lrt -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
- magent.c: In function ‘writev_list’:
- magent.c:729: error: ‘SSIZE_MAX’ undeclared (first use in this function)
- magent.c:729: error: (Each undeclared identifier is reported only once
- magent.c:729: error: for each function it appears in.)
- make: *** [magent.o] Error 1
解决办法:
- vim ketama.h
- 加入
- #ifndef SSIZE_MAX
- #define SSIZE_MAX 32767
- #endif
二、高可用网络架构
此架构生产环境需要负载均衡器做负载,具体使用什么软件或硬件就要看你的具体情况来定了。
生产环境每台服务器分别启动一个memcached进程和magen进程做冗余
- memcached -d -m 256 -l 192.168.10.11 -p 11211 -u www -c 10240 -P /tmp/memcached.pid -vv >/home/logs/memcached.txt 2>&1
- memcached -d -m 128 -l 192.168.10.12 -p 11211 -u www -c 10240 -P /tmp/memcached.pid -vv >/home/logs/memcached.txt 2>&1
- memcached -d -m 128 -l 192.168.10.13 -p 11211 -u www -c 10240 -P /tmp/memcached.pid -vv >/home/logs/memcached.txt 2>&1
- magent -u www -n 51200 -l 192.168.10.11 -p 12000 -s 192.168.10.12:11211 -s 192.168.10.13:11211 -b 192.168.10.11:11211
- magent -u www -n 51200 -l 192.168.10.12 -p 12000 -s 192.168.10.12:11211 -s 192.168.10.13:11211 -b 192.168.10.11:11211
- magent -u www -n 51200 -l 192.168.10.13 -p 12000 -s 192.168.10.12:11211 -s 192.168.10.13:11211 -b 192.168.10.11:11211
参数说明:
-s 为要写入的memcached,
-b 为备份用的memcached。
说明:测试环境用magent和memached的不同端口来实现,在生产环境中可以将magent和memached作为一组放到多台服务器上。
看到了吧这样的架构最好做负载了,用一个VIP分别映射三台magent的12000端口即可。
#实验环境测试过程:
- [root@odb ~]# telnet 127.0.0.1 12000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- set key 0 0 8 <—在10000端口设置key的值
- STORED
- quit
- Connection closed by foreign hos
- [root@odb ~]# telnet 127.0.0.1 11211
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get key <—在11211端口获取key的值成功
- VALUE key 0 8
- END
- quit
- Connection closed by foreign host.
- [root@odb ~]# telnet 127.0.0.1 11211
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get key <—在11211端口获取key的值成功
- VALUE key 0 8
- END
- quit
- Connection closed by foreign host.
- 高可用性测试:
- [root@odb ~]# ps aux |grep -v grep |grep memcached
- root 23455 0.0 0.0 5012 1796 ? Ss 09:22 0:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
- root 24950 0.0 0.0 4120 1800 ? Ss 10:58 0:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
- [root@odb ~]# ps aux |grep -v grep |grep ‘magent -u’
- root 25919 0.0 0.0 2176 484 ? Ss 12:00 0:00 magent -u root -n 51200 -l 127.0.0.1 -p 10000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
- root 25925 0.0 0.0 3004 484 ? Ss 12:00 0:00 magent -u root -n 51200 -l 127.0.0.1 -p 11000 -s 127.0.0.1:11212 -b 127.0.0.1:11211
- [root@odb ~]# telnet 127.0.0.1 10000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- set stone 0 0 6 <—在10000端口设置stone的值
- STORED
- quit
- Connection closed by foreign host.
- [root@odb ~]# telnet 127.0.0.1 11000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- set shidl 0 0 6 <—在11000端口设置shidl的值
- STORED
- get stone <—在11000端口获取stone的值成功
- VALUE stone 0 6
- END
- incr stone 2 <—在11000端口修改stone的值成功
- get stone
- VALUE stone 0 6 <—在11000端口验证stone的值,证明上面的修改成功
- END
- get shidl <—在11000端口获取shidl的值成功
- VALUE shidl 0 6
- END
- quit <—退出11000端口
- Connection closed by foreign host.
- [root@odb ~]# telnet 127.0.0.1 10000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get stone <—在10000端口获取stone的值,已被修改
- VALUE stone 0 6
- END
- get shidl <—在10000端口获取shidl的值成功
- VALUE shidl 0 6
- END
- delete shidl <—在10000端口删除shidl
- DELETED
- get shidl <—在10000端口删除shidl生效
- END
- quit
- Connection closed by foreign host.
- [root@odb ~]# telnet 127.0.0.1 11000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get shidl <—在11000端口验证删除shidl生效
- END
- get stone <—在11000端口获取stone的值成功
- VALUE stone 0 6
- END
- quit
- Connection closed by foreign host.
Down机模拟测试:
Down掉11211端口的memcached:
- [root@odb ~]# kill -9 24950
- [root@odb ~]# telnet 127.0.0.1 10000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get stone <—在10000依然可以获取stone的值
- VALUE stone 0 6
- END
- quit
- Connection closed by foreign host.
- [root@odb ~]# telnet 127.0.0.1 11000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get stone <—在11000依然可以获取stone的值
- VALUE stone 0 6
- END
- quit
- Connection closed by foreign host.
- Down掉11000端口的magent:
- [root@odb ~]# kill -9 25925
- [root@odb ~]# telnet 127.0.0.1 10000
- Trying 127.0.0.1…
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is ‘^]’.
- get stone <—在10000依然可以获取stone的值
- VALUE stone 0 6
- END
- quit
- Connection closed by foreign host.
本文出自 “Centi.Linux” 博客,请务必保留此出处http://centilinux.blog.51cto.com/1454781/968104
Memcached HA架构探索的更多相关文章
- 腾讯云原生数据库TDSQL-C架构探索和实践
作为云原生技术先驱,腾讯云数据库内核团队致力于不断提升产品的可用性.可靠性.性能和可扩展性,为用户提供更加极致的体验.为帮助用户了解极致体验背后的关键技术点,本期带来腾讯云数据库专家工程师王鲁俊给大家 ...
- 分布式缓存系统 Memcached 整体架构
分布式缓存系统 Memcached整体架构 Memcached经验分享[架构方向] Memcached 及 Redis 架构分析和比较
- 使用QJM构建HDFS HA架构(2.2+)
转载自:http://blog.csdn.net/a822631129/article/details/51313145 本文主要介绍HDFS HA特性,以及如何使用QJM(Quorum Journa ...
- Hadoop2.X HA架构与部署
HDFS-HA原理及配置 1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA ...
- HA架构
HA架构是个什么东西? 阅读文章:浅谈web应用的负载均衡.集群.高可用(HA)解决方案
- HDFS HA架构以及源代码引导
HA体系架构 相关知识介绍 HDFS master/slave架构,HDFS节点分为NameNode节点和DataNode节点. NameNode存有HDFS的元数据:主要由FSImage和EditL ...
- 新闻实时分析系统-Hadoop2.X HA架构与部署
1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...
- 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署
1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...
- Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
随机推荐
- UNP学习笔记(第十六章 非阻塞I/O)
套接字的默认状态时阻塞的 可能阻塞的套接字调用可分为以下4类: 1.输入操作,包括read.readv.recv.recvfrom和recvmsg. 2.输入操作,包括write.writev.sen ...
- java将一个或者多个空格进行分割
public static void main(String[] args) { String s = "GET /index.html HTTP/1.1";//字符串s由“GET ...
- 让div排成一行===>inline-block的兼容性
行内元素,排列在一行,但是不能设置它的width.height.margin.padding属性,即使设置了,也是不生效的. 快元素独占一行,如下的这个例子,before div.in div1.in ...
- 从英语单词shell想到的
shell当初听到以为很高级 后来才知道只是壳而已 百度百科中解释为 shell 在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于DOS下的c ...
- CocoaPods安装教程 pod setup很慢解决方案
CocoaPods安装教程 pod setup很慢解决方案 http://www.jianshu.com/p/6230eec137f6
- com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'customer.applyRate' with value '[Ljava.lang.String;@7d3fae2c'
出错的3个最可能的原因:我是第二种错误 1.action配置错误 <action name="doCreateMeetingInfo" class="meeting ...
- Win7获取管理权限修改Host文件以其他权限问题
——win7管理员权限修改Host文件——百度经验 win7管理员权限获取办法: win7管理员权限 获取办法——经验——百度 win7最高权限获取: win7最高权限 获取——百度经验
- Drupal 主题的表现形式
1.template.php /** * Implements hook_theme(). */ function yourtheme_theme($existing, $type, $theme ...
- WPF学习之深入浅出话模板
图形用户界面应用程序较之控制台界面应用程序最大的好处就是界面友好.数据显示直观.CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据以文本.列表.图形等多种形式立体显示. 用户体验在GUI程 ...
- TCP/IP状态详解
今天犯懒了,本来自己也做了一些相应的笔记,但是发现这篇写的更好一些,简单易懂,而且有图有真相,为了方便以后查看,在此转载了,在此基础上加了自己的笔记 TCP正常建立和关 ...