为解决线上 Redis 服务直连出现链接数爆棚而做的调研, 对 Twitter 开源的 twemproxy 做一些记录。 我们之所以放弃官方的 RedisCLuster 是因为不太满意其性能
apt-get install automake apt-get install libtool git clone git://github.com/twitter/twemproxy.git cd twemproxy autoreconf -fvi ./configure make sudo make install
默认的可执行文件在 /usr/local/sbin/nutcracker
alpha: listen: 127.0.0.1:8877 hash: fnv1a_64 distribution: ketama auto_eject_hosts: true redis: true server_retry_timeout: 30000 server_failure_limit: 3 servers: - 127.0.0.1:6379:1 master0 #后端的redis-server - 127.0.0.1:6380:1 master1
当 redis 做缓存的使用的时候应该启用 auto_eject_hosts, 如果某个节点失败的时候将该节点删除,虽然丧失了数据的一致性,但作为缓存使用,保证了这个集群的高可用性。当redis做存储的使用时为了保持数据的一致性,应该禁用 auto_eject_hosts,也就是当某个节点失败之后并不删除该节点。
keys command: keys,migrate,move object,randomkey,rename,renamenx, sort strings command: bitop,mset,msetnx list command: blpop,brpop,brpoplpush scripting command: script exists,script flush,script kill,script load pub/sub command:(全部不支持)psubscribe,publish,punsubscribe,subscribe,unsubscribe
感谢 redis 提供的 redis-benchmark 工具,用它来做压测挺好的。
zj@zheng-ji.info:~$ redis-benchmark -p 6700 -t smembers,hexists,get,hget,lrange,ltrim,zcard,setex,sadd -n 1000000 -r 100000000 ====== GET ====== 1000000 requests completed in 12.95 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.19% <= 1 milliseconds 99.93% <= 2 milliseconds 100.00% <= 2 milliseconds 77220.08 requests per second ====== SADD ====== 1000000 requests completed in 10.74 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.88% <= 1 milliseconds 99.95% <= 2 milliseconds 99.97% <= 3 milliseconds 99.99% <= 4 milliseconds 100.00% <= 4 milliseconds 93144.56 requests per second
如作者所言, 性能几乎可以跟直连redis比拟,背后的数据也很均匀,使用twemproxy 观察连接数, 一直都保持在个位数左右。
参考链接
极光推送的博客