TwemProxy Redis架构
TwemProxy
1、twemproxy是twitter开发的一个redis代理proxy。
通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免redis单点故障问题。
使用Twemproxy 对硬件资源配置较高;在redis性能有一定的损失(twitter测试约20%)用于提高整个系统的HA;
2、twemproxy部署简单快捷;可以直接在proxy进行读写、并转发请求给后端的redis;但是不适合超大流量系统。
做的时候把应用分开、使用LVS集群:实现twemproxy的负载均衡,提高proxy的可用性和可扩张能力;
优点:
轻量级的Redis和memcached代理。使用它可以减少缓存服务器的连接数,并且利用它来作分片,性能损耗不会多于20%。其实是因为用了pipeline.首先redis是支持使用pipeline批处理的。
twemproxy与每个redis服务器都会建立一个连接,每个连接实现了两个FIFO的队列,通过这两个队列实现对redis的pipeline访问。将多个客户端的访问合并到一个连接,这样既减少了redis服务器的连接数,又提高了访问性能。
缺点:
虽然可以动态移除节点,但该移除节点的数据就丢失了。redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布.maillist里面作者说这个需要自己写个脚本实现性能上的损耗.
二、规划示例:
Twemproxy - nutcracker: ip:192.168.100.101 ip:192.168.100.102 HA - keepalived ip:192.168.100.101 ip:192.168.100.102 VIP:192.168.100.100 Redis - server IP: 192.168.100.106 Port:6001/6002/6003 IP: 192.168.100.107 Port:6001/6002/6003
3、twemproxy 安装示例:
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
yum install gcc gcc-c++ tcl ruby -y
tar -xf autoconf-2.69.tar.gz
cd autoconf-2.69/
./configure
make &&make install
git clone https://codeload.github.com/twitter/twemproxy/zip/master
cd twemproxy-master
autoreconf -fvi
./configure --enable-debug=full
make
make install
4、配置示例:
# vim /etc/nutcracker.yml alpha: listen: 0.0.0.0:22121 hash: fnv1a_64 distribution: ketama auto_eject_hosts: true redis: true server_retry_timeout: 2000 server_failure_limit: 1 servers: // 两台redis服务器的地址和端口 - 192.168.100.106:6379:1 - 192.168.100.107:6379:1
注释: listen // 监听的ip和端口, 格式:ip : port hash // 哈希算法名 distribution // key分布哈希算法 auto_eject_hosts // 是否在结点无法响应的时候临时摘除结点 redis // 是否是redis协议 server_retry_timeout // 重试的时间(毫秒) server_connections // 每个memcache实例的连接数 server_failure_limit // 失败重试次数,默认3次 timeout // 超时时间(毫秒) servers // 实例列表, 格式:IP:Port:weight (权重)
5、启动Twemproxy服务
nutcracker -t nutcracker.yml 检测配置语法真确会显示OK .
6、设置启动:
# cat start.sh
nutcracker -d -c /opt/twemproxy-master/conf/nutcracker.yml -p /opt/twemproxy-master/run/redisproxy.pid -o /opt/twemproxy-master/run/redisproxy.log
7、检测进程
ps -ef | grep nutcracker
三、keepalived
yum install keepalived -y # cat /etc/keepalived/keepalived.conf
配置示例:
! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_script check_twem { script "/etc/keepalived/check_twem.sh"
# 返回0 表示成功,非0 表示失败 interval 2
# 脚本执行间隔 weight -3
# weight 设置脚本执行结果调整权重进行加减 fall 3
# 连续判断脚本失败3次,则进行故障转移 rise 2
# 连续两次检查监控检查脚本,keepalived将尝试将服务恢复回该服务器或网络接口 } vrrp_instance VI_1
{ state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 dev eth0 label eth0:1 } track_script { check_twem } } virtual_server 192.168.100.100 22121
{ delay_loop 6 protocol TCP real_server 192.168.100.101 22121 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.100.102 22121 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
}
9、nutcracker 进程检测 脚本check_twem.sh
touch /etc/keepalived/check_twem.sh
# cat /etc/keepalived/check_twem.sh #!/bin/bash counter=$(ps -C nutcracker --no-heading|wc -l) if [ "${counter}" = "0" ]; then sh /opt/twemproxy-master/start.sh sleep 2 counter=$(ps -C nutcracker --no-heading|wc -l) if [ "${counter}" = "0" ]; then /etc/init.d/keepalived stop
fi
fi
10 、测试
Redis 基常用础操作
Redis 模糊搜索 keys * select 2
删除所有以user开头的key 可以这样实现:
# redis-cli keys "user*" 1) "user1" 2) "user2" # redis-cli keys "user*" | xargs redis-cli del (integer) 2 # 删除成功
# 批量删除匹配通配符的key用到了Linux中的管道和xargs参数:
redis-cli keys "s*" | xargs redis-cli del
# 如果需要制定数据库,需要用到 -n 数据库编号 参数,下面是删除2数据库中s开头的键:
redis-cli -n 2 keys "s*" | xargs redis-cli -n 2 del redis-cli keys "*" | xargs redis-cli del // 如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径 // 如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del
# 删除当前数据库中的所有Key
flushdb
# 删除所有数据库中的key
flushall