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

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

Redis Twemproxy的更多相关文章

  1. redis+twemproxy实现redis集群

    Redis+TwemProxy(nutcracker)集群方案部署记录 转自: http://www.cnblogs.com/kevingrace/p/5685401.html Twemproxy 又 ...

  2. Redis+TwemProxy(nutcracker)集群方案部署记录

    Twemproxy 又称nutcracker ,是一个memcache.Redis协议的轻量级代理,一个用于sharding 的中间件.有了Twemproxy,客户端不直接访问Redis服务器,而是通 ...

  3. Redis+Twemproxy+HAProxy集群(转) 干货

    原文地址:Redis+Twemproxy+HAProxy集群  干货 Redis主从模式 Redis数据库与传统数据库属于并行关系,也就是说传统的关系型数据库保存的是结构化数据,而Redis保存的是一 ...

  4. 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型

    分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型   分布式缓存特性: 1) 高性能:当传统数据库面临大规模 ...

  5. Redis+Twemproxy分片存储实现

    from unsplash 为提高Redis存储能力的提升,以及对外提供服务可用性提升,有时候有必要针对Redis进行集群式搭建,比较常用的有Twemproxy分片存储以及官方提供的Cluster方式 ...

  6. 基于twemproxy的redis集群部署

    一.系统及软件版本 操作系统:CentOS Linux release 7.3.1611 (Core) 内核版本:3.10.0-514.el7.x86_64 redis版本:3.2.8 twempro ...

  7. redis该如何分区-译文(原创)

    写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...

  8. redis集群讨论

    一.生产应用场景 二.存储架构演变 三.应用最佳实践 四.运维经验总结 第1.2节:介绍redis cluster在唯品会的生产应用场景,以及存储架构的演变.第3节:redis cluster的稳定性 ...

  9. redis客户端连接异常

    本文参考:http://mdba.cn/2015/04/02/redistwemproxy-%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5%e5%bc%82 ...

随机推荐

  1. onkeyup小练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ionic 项目内部更新用到的插件,退出app插件

    一 cordova-plugin-app-version插件  用来获取APP版本 ionic plugin add cordova-plugin-app-version -----cordova-p ...

  3. onlyoffice文档协作的权限开发,利用casbin和golang语言

    登录用户,对于已经进行了权限设置的文档,将根据权限数据库,比对用户名,当与用户有关时,就显示相对应的权限,当都与登录用户无关时,则显示拒绝访问: 对于未登录用户,已经设置了权限的文档,都将显示拒绝访问 ...

  4. 使用IDEA创建Java Web项目并部署

    前面给大家介绍了IDEA的安装和基本配置,睡觉前Alan再给大家分享一下使用IDEA创建Java Web并部署访问. 打开IDEA,File>New>Project,进入Java Ente ...

  5. BigDecimal 工具类

    arg1.compareTo(arg2) arg1 > arg2 返回 int 1 arg1 = arg2 返回 int 0 arg1 < arg2 返回 int -1 public cl ...

  6. C#中virtual(虚方法)的理解以及和abstract(抽象方法)的区别

    Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例 ...

  7. .net 页面传参方式总结

    一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是:安全性低.会把要传送的值显示在浏览器的地址栏中(也就是不需要保密得参数),并且在此方法中不能够传递对象,参数 ...

  8. TiDB数据库 mydumper与loader导入数据

    从mysql导出数据最好的方法是使用tidb官方的工具mydumper. 导入tidb最好的方法是使用loader工具,大概19.4G每小时的速度. 详细的步骤可以参考官网:https://pingc ...

  9. 【第一次玩Travis CI】终于弄好了我的马鸭

    真是不容易,我都要哭了.熬了半天终于弄完了!! 终于可以坐这儿挺会小曲,写写感受了. 作为一个程序写的不咋滴的程序员,倒是特别喜欢写博客,也是绝了. 高三的时候,用OneNote,后来转到Lofter ...

  10. November 09th, 2017 Week 45th Thursday

    If we did all the things we are capable of, we would literally astound ourselves. 我们如果尽全力去完成我们能做到的事情 ...