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:
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout:
server_failure_limit:
servers:
// 两台redis服务器的地址和端口
- 192.168.100.106::
- 192.168.100.107::
注释:
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"
interval
weight -
fall
rise
  } vrrp_instance VI_1
{
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
  }
virtual_ipaddress {
192.168.100.100/ dev eth0 label eth0:
  }
track_script {
check_twem
  }
} virtual_server 192.168.100.100
{
delay_loop
protocol TCP real_server 192.168.100.101 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
    }
  }
real_server 192.168.100.102 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
    }
  }
}

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}" = "" ]; then
  sh /opt/twemproxy-master/start.sh
  sleep
  counter=$(ps -C nutcracker --no-heading|wc -l)
  if [ "${counter}" = "" ]; then
  /etc/init.d/keepalived stop
  fi
fi

10 、测试

Redis 基常用础操作

Redis 模糊搜索
keys *
select

删除所有以user开头的key 可以这样实现:

# redis-cli keys "user*"
) "user1"
) "user2"
# redis-cli keys "user*" | xargs redis-cli del
(integer)
# 删除成功

# 批量删除匹配通配符的key用到了Linux中的管道和xargs参数:

redis-cli keys "s*" | xargs redis-cli del

# 如果需要制定数据库,需要用到 -n 数据库编号 参数,下面是删除2数据库中s开头的键:

redis-cli -n  keys "s*" | xargs redis-cli -n  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

TwemProxy Redis架构的更多相关文章

  1. 如何搭建高可用redis架构?

    如何搭建高可用redis架构? 温国兵 架构师小秘圈 昨天 作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运维.高可用架构设计.数据库安全.海量数据解决方案.以及 ...

  2. Redis --> Redis架构设计

    Redis架构设计 一.前言   Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列 ...

  3. Redis架构演变与redis-cluster群集读写方案

    导言 redis-cluster是近年来redis架构不断改进中的相对较好的redis高可用方案.本文涉及到近年来redis多实例架构的演变过程,包括普通主从架构(Master.slave可进行写读分 ...

  4. 细说分布式Redis架构设计和踩过的那些坑

    细说分布式Redis架构设计和踩过的那些坑_redis 分布式_ redis 分布式锁_分布式缓存redis 细说分布式Redis架构设计和踩过的那些坑

  5. Redis03——Redis架构

    Redis架构 1.1.问题 redis是单线程,单实例,为什么并发那么多,依旧很快呢? 回答:因为调用了系统内核的epoll 1.2.Linux的早期版本 Linux有Linux kernal,我们 ...

  6. Redis架构之哨兵机制与集群

    Redis架构之哨兵机制与集群 哨兵机制 1.介绍: Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个 ...

  7. [转载] Codis作者黄东旭细说分布式Redis架构设计和踩过的那些坑们

    原文: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=208733458&idx=1&sn=691bfde670fb ...

  8. Memcached 及 Redis 架构分析和比较

    Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等) 也很相似,在这里把两者放 ...

  9. Memcached 及 Redis 架构分析和区别比较

    Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等) 也很相似,在这里把两者放 ...

随机推荐

  1. RAD Studio XE2破解、安装、试用

    RAD Studio XE2刚发布没几天,网上找到了破解,鸡冻啊.迫不及待的下载安装. 新特性: 使用FireMonkey ?创建令人印象深刻的商业应用 构建64位Delphi应用程序以利用最新的硬件 ...

  2. BZOJ2434[Noi2011]阿狸的打字机——AC自动机+dfs序+树状数组

    题目描述 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小 ...

  3. BZOJ3028 食物(生成函数)

    显然构造出生成函数:则有f(x)=(1+x2+x4+……)·(1+x)·(1+x+x2)·(x+x3+x5+……)·(1+x4+x8+……)·(1+x+x2+x3)·(1+x)·(1+x3+x6+…… ...

  4. Luogu4238 【模板】多项式求逆(NTT)

    http://blog.miskcoo.com/2015/05/polynomial-inverse 好神啊! B(x)=B'(x)·(2-A(x)B'(x)) 注意ntt的时候防止项数溢出,即将多项 ...

  5. HDU-3746-KMP理解失配

    这个有点意思,要理解失配数组 题意是要计算出需要构造成循环节相连的最小个数 利用失配构造函数求出单个循环节,然后计算出需要的加上的珠子个数 #include <cstdio> #inclu ...

  6. windows下安装PyTorch0.4.0

    PyTorch框架,据说2018.4.25刚刚上架windows,安个玩玩 我的环境: windows 10 anaconda虚拟环境python3.6 cuda9.1 cudnn7 pytorch  ...

  7. 【转载】LCT

    原标题:LCT(Link-Cut Tree)详解(蒟蒻自留地) 出处:https://blog.csdn.net/saramanda/article/details/55253627 如果你还没有接触 ...

  8. 自学Linux Shell11.3-使用变量

    点击返回 自学Linux命令行与Shell脚本之路 11.3-使用变量 Shell脚本的执行通常可以采用以下几种方式: 1):bash script-name或sh script-name(推荐使用) ...

  9. React Native——组件FlatList

    属性 添加头部组件 ListHeaderComponent属性用来给FlatList添加头部组件 简单使用: //ES6之前写法 _header = function () { return ( &l ...

  10. Visualbox在UEFI模式下无法正常引导

    引子 前几天VMware Workstation Pro 14发布了,从12更新到14之后,很多的虚拟机开启后都黑屏.实际并非黑屏,在控制台视图可以看到屏幕的缩略图是正常显示的.目前还没有找到解决方案 ...