Memcached HA架构探索
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能够写入两个memcached。
# 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.
# 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.
# 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.
高可用性测试:
# ps aux |grep -v grep |grep memcached
root 234550.00.05012 1796 ? Ss 09:22 0:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
root 249500.00.04120 1800 ? Ss 10:58 0:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
# ps aux |grep -v grep |grep 'magent -u'
root 259190.00.02176484 ? 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 259250.00.03004484 ? 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
# 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.
# 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.
# 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.
# 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:
# kill -9 24950
# 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.
# 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:
# kill -9 25925
# 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]