关于nutcracker 也叫twemproxy,是twitter提供的memcache和radis的分片工具,有各种算法可以选择。具体 的介绍我就不说了,网上一大堆。
至于使用,到很少很少。
这里用python做个简单使用说明。
1\ 首先,我这里就启动2个memcached。命令如下:
memcached -d -m 100 -c 1000 -u root -p 11211
memcached -d -m 100 -c 1000 -u root -p 11212
bash-3.2$ cat nutcracker.root.yml
root:
listen: 127.0.0.1:11210
hash: fnv1a_64
distribution: ketama
preconnect: true
auto_eject_hosts: false
servers:
- 127.0.0.1:11211:1
- 127.0.0.1:11212:1
直接启动,只为测试:
#!/bin/sh
/usr/local/sbin/nutcracker -c nutcracker.root.yml
OK 到这里我们的memcache + nutcracker的工作已经完成了。
由于这里是新启动,所以数据肯定是空的,我们就不验证了。(不相信自己去试试)
然后我们启动一遍python的写memcache的脚本。
注意这里python脚本实际上连接的是nutcracker的ip和port
脚本如下:
bash-3.2$ cat testNutcracker.py
#!/usr/local/bin/python
import memcache
mc = memcache.Client(['localhost:11210'],debug=0)
chenee = "is a pig"
print chenee
chenee = mc.get("foo.chenee")
print chenee
mc.set("foo.chenee","chenee is a big pig")
chenee = mc.get("foo.chenee")
print chenee
python脚本的运行结果如下:
bash-3.2$ ./testNutcracker.py
is a pig
chenee is a big pig
chenee is a big pig
bash-3.2$
Connection closed by foreign host.
bash-3.2$ telnet 127.0.0.1 11210
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get foo
END
get foo.chenee
VALUE foo.chenee 0 19
chenee is a big pig
END
quit
Connection closed by foreign host.
bash-3.2$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get foo.chenee
VALUE foo.chenee 0 19
chenee is a big pig
END
quit
Connection closed by foreign host.
bash-3.2$ telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get foo.chenee
END
quit
Connection closed by foreign host.
可以看到我们直接telnet到nutcracker,可以看到数据。telnet到11211的memcache上可以看到数据。但是11212这个memcached上并不存在数据。说明nutcracker确实是对我们的set和get操作做调度了。
over,进一步还没有研究。等真正用到了再说。
注:在迷惑了很久以后,这篇文章的代码部分给我灵感,发现到真正的用法。感谢作者
github.com/shuge/man/blob/master/sa/kv/twemproxy-quick-guide.md