你的位置:首页 > 数据库

[数据库]Redis Twemproxy


主从复制+哨兵解决了读性能和高可用问题,但没有解决写性能问题。

 

Twemproxy将写请求分配到不同节点处理。

 

Twemproxy是Twitter开源的一个redis和memcache代理服务器。

允许用户将多个redis服务器添加到一个服务器池里面,并通过用户选择的散列函数和分布函数,将来自客户端的命令请求分发给服务器池中的各个服务器;

通过使用twemproxy我们可以将数据库分片到多台redis服务器上面,并使用服务器来分担系统压力以及数据库容量,在服务器硬件条件相同的情况下,对于一个包含N台redis服务器的池来说,池中每台平均1/N的客户端接收命令请求;

向池里添加更多的服务器可以线性的扩展系统处理命令请求的能力,以及系统能够保存的数据量;

 

Twemproxy安装配置

Twemproxy可以去github下载
https://github.com/twitter/twemproxy
$ tar xf twemproxy-0.4.0.tar.gz

安装autoconf
由于CentOS 6.x autoconf版本太低,不用yum安装,手动安装
# tar xf autoconf-2.69.tar.gz
# cd autoconf-2.69
# ./configure --prefix=/usr
# make && make install
# autoconf -V #查看是否安装成功

下载automake
automake-1.15.tar.gz
# ./configure --prefix=/usr
# make && make install

下载libtool
libtool-2.4.5.tar.gz
# ./configure --prefix=/usr
# make && make install

安装twemproxy
# tar xf twemproxy-0.4.1.tar.gz
# cd twemproxy-0.4.1
# aclocal
# autoconf
# mkdir config
# autoheader
# libtoolize
# automake -a

# ./configure
# make
# make install

安装完毕

配置文件说明yaml
proxy:
listen: node1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 20000
hash_tag: "{}"
server_failure_limit: 3
servers:
- node1:6379:1
- node2:6379:1
- node3:6379:1


proxy,服务器池的名字,支持创建多个服务器池
listen: node1:22121,这个服务器池的监听地址和端口号
hash: fnv1a_64,键散列算法,用于将键映射为一个散列值
distribution: ketama,键分布算法,决定键被分布到哪个服务器
redis: true,代理redis命令请求,不给定时默认代理memcached请求
servers,池中各个服务器的地址和端口号及权重
auto_eject_hosts、
server_failure_limit: twemproxy连续3次向同一个服务器发送命令请求都遇到错误时,twemproxy就会将该服务器标记为下线,并交由池中其他在线服务器处理


启动redis服务
3个节点手工启动
# service redisd start

启动twemproxy
# nutcracker -d -c /opt/sxt/twemproxy/conf/nutcracker.sxt.yml

连接
# redis-cli -p 22121 -h node1

测试
SET date 2016,这个key落在node1上
SET msg "hello world",这个key落在node2上
SADD numbers 1 3 5 7 9
RPUSH lst a b c d e

Twemproxy散列标签
set user:{001}:name lisi
set user:{001}:age 5
get user:{001}:name
get user:{001}:age
set 001 abc
get 001
set user:001:age 50

 

Sentinel和Twemproxy整合

redis-mgr

官网说明:https://github.com/changyibiao/redis-mgr

整合了:

redis
redis-sentinel
twemproxy

 

 

redis-twemproxy-agent

官网说明:https://github.com/Stono/redis-twemproxy-agent

  https://jambr.co.uk/2013/09/20/redis-twemproxy-agent