twemproxy is a fast, light-weight proxy for memcached and redis。是一个代理redis程序,redis cluster是无中心的基于哈希槽的方案,而twemporxy是自身启动一个代理程序,代理程序为中心,基于一致性哈希算法的方案。
官网是 https://github.com/twitter/twemproxy,很多公司用这个方案实现了redis集群,在没有redis cluster方案之前,redis作者也推荐使用twemproxy方案。
主要的优点有:
-
速度快
-
轻量级
-
维护持久的服务器连接
-
在后台低消耗缓存redis数据库的连接数
-
启用请求和响应的管道
-
支持代理到多个服务器
-
同时支持多个服务器池
-
多个服务器自动分享数据
-
实现了完整的 memcached ascii 和 redis 协议.
-
服务器池配置简单,通过一个 YAML 文件即可
-
支持多个哈希模式,包括一致的哈希和分布
-
可配置在失败时禁用某个节点
-
通过统计监测端口的可观察性
-
支持 Linux, *BSD, OS X and Solaris (SmartOS)
一、配置实现
(1)、twemproxy下载编译
wget https://github.com/twitter/twemproxy/archive/master.zip
unzip master.zip
cd twemproxy
autoreconf -fvi
./configure
make
make install
注:需要autoconf2.6.9以上版本 autoconf下载地址:http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
(2)、单机redis启动
启动三个redis节点
9001、9002、9003
(3)、配置twemproxy nutcracker.yml
redis1:
listen: 127.0.0.1:8000 #监听的端口
redis: true #是否是Redis的proxy
hash: fnv1a_64 #支持的hash算法
distribution: ketama #具体的算法
auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点
timeout: 4000 #超时时间(毫秒)
server_retry_timeout: 2000 #重试的时间(毫秒)
server_failure_limit: 3 #结点故障多少次就算摘除掉
servers: #下面表示所有的Redis节点(IP:端口号:权重)
- 127.0.0.1:9001:1
- 127.0.0.1:9002:1
- 127.0.0.1:9003:1
(4)、启动twemproxy
src/nutcracker -d conf/nutcracker.yml
(5)、使用redis-cli测试
测试时发现,查看9001,9002,9003的aof文件时,不同的数据会分配到端口redis上,这个也正是基于一致性哈希算法,数据会分配到不同的节点中。也正是实现了数据分片。
二、nutcracker用法与命令选项
Options:
-h, –help : 查看帮助文档,显示命令选项
-V, –version : 查看nutcracker版本
-t, –test-conf : 测试配置脚本的正确性
-d, –daemonize : 以守护进程运行
-D, –describe-stats : 打印状态描述
-v, –verbosity=N : 设置日志级别 (default: 5, min: 0, max: 11)
-o, –output=S : 设置日志输出路径,默认为标准错误输出 (default: stderr)
-c, –conf-file=S : 指定配置文件路径 (default: conf/nutcracker.yml)
-s, –stats-port=N : 设置状态监控端口,默认22222 (default: 22222)
-a, –stats-addr=S : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)
-i, –stats-interval=N : 设置状态聚合间隔 (default: 30000 msec)
-p, –pid-file=S : 指定进程pid文件路径,默认关闭 (default: off)
-m, –mbuf-size=N : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)
配置yml文件之后
nutcracker -t nutcracker.yml 可以检测配置文件是否正确
三、twemproxy缺点
- 虽然可以动态移除节点,但该移除节点的数据就丢失了。
- redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布.maillist里面作者说这个需要自己写个脚本实现
- 性能上的损耗(其实作为代理 必定会有损耗, twemproxy损耗属于很小的级别了)
- 不支持针对多个值的操作,比如取sets的子交并补等(MGET 和 DEL 除外)
- 不支持Redis的事务操作
- 出错提示还不够完善
四、最佳实践
- twemproxy缺点中,动态移除不可用的节点,但是该节点的数据丢失了,这个缺点是最致命的,造成了CAP中的A缺失,可用性丢失,最好每个节点后面跟一个从节点,使用Keepalived+VIP,可以故障漂移,从节点自动升级为主节点。保证了高可用性。
- 性能会稍微有些丢失,既然是代理就是没办法避免的。
- 不能动态增加节点、删除节点,这个还要运维自行实现了,重启集群,不过这种操作本身也最好需要重启,分配新的集群集群。
- 转子:
- https://my.oschina.net/haoran100/blog/712478
相关推荐
Redis 集群方案是为了应对单实例Redis在处理大规模数据时面临的存储瓶颈,尤其是在像新浪微博这样的大型应用中,单实例无法满足超过TB级...无论采用何种方案,确保数据一致性、高可用性和扩展性是设计Redis集群的关键。
本次实验的目的主要是搭建Redis Cluster和TwemProxy Redis两种集群,分别对其进行性能测试,测试出集群性能的拐点,找出性能的瓶颈有哪些,并对两套集群进行比较,以便于在不同业务场景下择优选择。
本文将详细介绍几种常见的Redis集群方案,包括客户端分片、Twemproxy、Codis以及Redis 3.0集群。 #### 一、客户端分片 **概念**: 客户端分片是一种将分片逻辑置于客户端实现的策略。该方案通过客户端预先定义好的...
本篇文章将详细探讨 Redis 集群的搭建过程以及各种集群方案的比较。 一、Redis 集群基础知识 Redis 集群采用了分片(Sharding)策略,将数据分散存储在多个节点上,以实现数据的水平扩展。每个节点负责一部分数据,...
除了官方提供的集群方案外,还有一些第三方工具可以用于 Redis 的集群部署,例如 Twemproxy 和 Codis。 - **Twemproxy**: - 优点:配置简单,支持多种数据库; - 缺点:不支持动态扩容,运维相对麻烦; - **...
以下是关于Redis集群及其在Linux下部署的详细知识点: 1. **Redis集群原理**: - Redis集群通过分片(Sharding)将数据分散到多个节点上,每个节点负责一部分数据,实现数据的水平扩展。 - 集群中的每个节点都有...
随着数据量的增长,单个 Redis 实例的存储能力可能无法满足需求,这时就需要引入集群方案来实现动态扩展和高可用性。本文将讨论四种主流的 Redis 集群架构方案:客户端分片、Twemproxy、Redis Cluster 以及 Proxy ...
### Redis集群在腾讯游戏的应用及演进 #### 一、Redis简介 Redis是一种开源的、遵循BSD许可的高级键值存储系统。它以其强大的数据结构服务器功能而闻名,能够存储字符串(Strings)、哈希(Hashes)、列表(Lists...
本文对 Redis 集群的架构方案进行了分析和比较,涵盖了客户端分片、Twemproxy、Redis Cluster 和 Proxy Redis Cluster 等四种主流的架构方案。每种方案都有其优点和缺点,适用于不同的应用场景。 客户端分片 ...
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的...
Redis 集群方案的缺点是 twemproxy 自身单端口实例的压力,使用一致性 hash 后,对 Redis 节点数量改变时候的计算值的改变,数据无法自动移动到新的节点。 Redis 集群方案什么情况下会导致整个集群不可用? Redis ...
除此以外,Redis官方提供的分布式方案、twemproxy等也是实现Redis集群的常见方式。 综上所述,Redis是一个功能强大且广泛应用的内存数据库,其单进程单线程的设计保证了高效的数据处理能力,支持多种数据结构以及...
#### 二、Redis集群方案概述 Redis集群是指将多个Redis实例组织在一起,共同提供数据存储和查询服务的一种架构。集群的目的是为了提高系统的扩展性和可用性,满足高并发场景下的数据存储需求。常见的集群实现方案有...
Redis集群方案主要包括twemproxy、codis和Redis自带的集群解决方案。twemproxy是一种代理方式,通过一致性哈希算法分发请求到多个Redis实例,并支持自动节点故障转移。codis是另一个流行的集群方案,它解决了...
- **Codis**:豌豆荚公司开发的一款Redis集群代理解决方案,需要修改Redis源码。 - **Predixy**:一款高性能且功能全面的Redis代理,支持Redis Sentinel和Redis Cluster。 - **Redis-Cerberus**:作为Redis Cluster...
在本文中,我们将深入探讨如何在 Laravel 项目中利用 Twemproxy 来部署 Redis 集群。...正确配置和使用 Twemproxy 能有效提升 Laravel 应用的性能和稳定性,是构建大规模 Redis 集群的一种实用方案。
Redis集群方案设计与实现 Redis作为一个高性能的键值存储系统,因其高效的数据处理能力和丰富的数据结构,被广泛应用于缓存、消息队列以及推荐系统等场景。然而,随着业务的发展和数据量的增长,单个Redis实例可能...
Redis集群方案包括twemproxy、codis、redis cluster 3.0等。twemproxy是一个代理方式,使用方法和普通Redis无任何区别,但它自身单端口实例的压力大,使用一致性hash后,对Redis节点数量改变时候的计算值的改变,...