Memcached HA架构探索
2009-11-05 10:28
239 查看
magent是一款开源的Memcached代理服务器软件,可以用它做一些高可用尝试。
一、安装步骤:
1、编译安装libevent:
wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../
2、编译安装Memcached:
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --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
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../
二、高可用网络架构
![](http://p.blog.csdn.net/images/p_blog_csdn_net/istone8/EntryImages/20091105/magent_memcached.png)
服务器A 服务器B
启动两个memcached进程,端口分别为11211和11212:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
启动两个magent进程,端口分别为10000和11000:
magent -u root -n 51200 -l 127.0.0.1 -p 10000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
magent -u root -n 51200 -l 127.0.0.1 -p 11000 -s 127.0.0.1:11212 -b 127.0.0.1:11211
-s 为要写入的memcached, -b 为备份用的memcached。
说明:测试环境用magent和memached的不同端口来实现,在生产环境中可以将magent和memached作为一组放到两台服务器上。
也就是说通过magent能够
4000
写入两个memcached。
[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 key 0 0 8 <---在10000端口设置key的值
88888888
STORED
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
88888888
END
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key <---在11212端口获取key的值成功
VALUE key 0 8
88888888
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的值
123456
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的值
666666
STORED
get stone <---在11000端口获取stone的值成功
VALUE stone 0 6
123456
END
incr stone 2 <---在11000端口修改stone的值成功
123458
get stone
VALUE stone 0 6 <---在11000端口验证stone的值,证明上面的修改成功
123458
END
get shidl <---在11000端口获取shidl的值成功
VALUE shidl 0 6
666666
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
123458
END
get shidl <---在10000端口获取shidl的值成功
VALUE shidl 0 6
666666
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
123458
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
123458
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
123458
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
123458
END
quit
Connection closed by foreign host.
一、安装步骤:
1、编译安装libevent:
wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../
2、编译安装Memcached:
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --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
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../
二、高可用网络架构
![](http://p.blog.csdn.net/images/p_blog_csdn_net/istone8/EntryImages/20091105/magent_memcached.png)
服务器A 服务器B
启动两个memcached进程,端口分别为11211和11212:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
启动两个magent进程,端口分别为10000和11000:
magent -u root -n 51200 -l 127.0.0.1 -p 10000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
magent -u root -n 51200 -l 127.0.0.1 -p 11000 -s 127.0.0.1:11212 -b 127.0.0.1:11211
-s 为要写入的memcached, -b 为备份用的memcached。
说明:测试环境用magent和memached的不同端口来实现,在生产环境中可以将magent和memached作为一组放到两台服务器上。
也就是说通过magent能够
4000
写入两个memcached。
[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 key 0 0 8 <---在10000端口设置key的值
88888888
STORED
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
88888888
END
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key <---在11212端口获取key的值成功
VALUE key 0 8
88888888
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的值
123456
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的值
666666
STORED
get stone <---在11000端口获取stone的值成功
VALUE stone 0 6
123456
END
incr stone 2 <---在11000端口修改stone的值成功
123458
get stone
VALUE stone 0 6 <---在11000端口验证stone的值,证明上面的修改成功
123458
END
get shidl <---在11000端口获取shidl的值成功
VALUE shidl 0 6
666666
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
123458
END
get shidl <---在10000端口获取shidl的值成功
VALUE shidl 0 6
666666
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
123458
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
123458
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
123458
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
123458
END
quit
Connection closed by foreign host.
相关文章推荐
- Memcached HA架构探索
- Memcached HA架构探索
- Memcached 集群的高可用(HA)架构
- Memcached 集群的高可用(HA)架构
- Memcached 集群的高可用(HA)架构
- Memcached 群集高可用性(HA)架构
- Memcached 集群的高可用(HA)架构
- Memcached 集群的高可用(HA)架构
- Memcached之HA架构(9)
- Memcached 集群架构方面的问题
- 美团外卖系统架构演进与稳定性的探索
- [架构] ZeroMQ 深度探索(二)
- Memcached 及 Redis 架构分析和比较
- Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享 分类: 系统架构 Linux 2015-06-09 21:50 168人阅读 评论(0) 收藏
- 【Java安全技术探索之路系列:Java可扩展安全架构】之三:JCA(二):JCA类和接口
- 【Java安全技术探索之路系列:Java可扩展安全架构】之十一:JSSE(一):JSSE架构介绍
- 【Java安全技术探索之路系列:Java可扩展安全架构】之十九:JGSS(三):JGSS编程模型.md
- 探索MySQL高可用架构之MHA(1)
- 在.Net中实现RichClient+Restful+JPA架构-探索实现
- memcached、redis、mysql、mongodb结合架构数据库系统