您的位置:首页 > 数据库 > Memcache

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 ../

二、高可用网络架构

 



             服务器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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息