memcached-doc-集群

twemproxy

twemproxy(nutcracker) 是 Twitter开源的轻量级 memcached / redis 代理服务器,本质就是一个集群管理工具,主要用来弥补 Redis和 Memcached对集群管理的不足,其完成的最大功劳就是通过在后端减少同缓存服务器的连接数从而增加吞吐量。

部署twemproxy

安装依赖

1
2
3
yum install autoconf
yum install automake
yum install libtool

安装twemproxy代理

1
2
3
4
5
6
7
wget https://github.com/twitter/twemproxy/archive/master.zip
unzip master.zip
cd twemproxy
autoreconf -fvi
./configure --enable-debug=full
make
src/nutcracker -h

查看twemproxy帮助

1
src/nutcracker -h

准备twemproxy配置文件

配置路径/usr/local/twemproxy/conf/nutcracker.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
‐ 修改配置文件
memcached:
- 如果指定了ip地址,则只会允许对应的IP地址连接,要允许外网地址则使用0.0.0.0代替127.0.0.1
listen: 127.0.0.1:22124
hash: fnv1a_64
distribution: ketama
timeout: 100
auto_eject_hosts: true
server_retry_timeout: 2000
server_failure_limit: 3
servers:
- 127.0.0.1:11220:1
- 127.0.0.1:11221:1
- 127.0.0.1:11222:1

检测yml语法

1
/usr/local/twemproxy/src/nutcracker -t

启动twemproxy

后台启动加参数-d

1
/usr/local/twemproxy/src/nutcracker -d

连接使用

测试twemproxy

1
2
3
4
5
6
7
8
9
10
11
12
13
telnet localhost 22124
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set h 0 0 5
12345
STORED
get h
VALUE h 0 5
12345
END

分别去各个memcached实例查看刚刚写入的数据,发现存在11222实例上。

故障模拟

查看进程端口

1
2
3
4
5
6
ps -ef|grep memcached
wesley 9981 1 0 7月22 ? 00:00:22 ./memcached -m 64 -p 11211 -u root -vvv
wesley 29530 1 0 19:09 ? 00:00:00 memcached/memcached -p 11220 -d
wesley 29541 1 0 19:09 ? 00:00:00 memcached/memcached -p 11221 -d
wesley 29557 1 0 19:09 ? 00:00:00 memcached/memcached -p 11222 -d
wesley 29720 21039 0 19:18 pts/3 00:00:00 grep --color=auto memcached

kill掉11222实例

1
kill 29557

插入新的Key,正常,查询key h,已经连接不上了。

1
2
3
4
5
6
7
8
9
10
11
12
telnet localhost 22124
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set key 0 0 6
123456
STORED
set h 0 0 3
123
SERVER_ERROR Connection refused

重新启动11222实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
telnet localhost 22124
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set key 0 0 6
123456
STORED
set h 0 0 3
123
SERVER_ERROR Connection refused
set h 0 0 3
123
STORED

总结:上面这个实验过程可以看出,一台 memcached实例挂掉后,twemproxy 能自动移除之;而恢复后,twemproxy 能够自动识别并重新加入到 memcached 组中重新使用