`
haoran_10
  • 浏览: 436316 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

redis(10)、redis集群twemproxy

阅读更多
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,可以故障漂移,从节点自动升级为主节点。保证了高可用性。
  • 性能会稍微有些丢失,既然是代理就是没办法避免的。
  • 不能动态增加节点、删除节点,这个还要运维自行实现了,重启集群,不过这种操作本身也最好需要重启,分配新的集群集群。
 
 
 
 
 
3
1
分享到:
评论

相关推荐

    Redis集群性能测试分析

    本次实验的目的主要是搭建Redis Cluster和TwemProxy Redis两种集群,分别对其进行性能测试,测试出集群性能的拐点,找出性能的瓶颈有哪些,并对两套集群进行比较,以便于在不同业务场景下择优选择。

    laravel项目利用twemproxy部署redis集群的完整步骤

    twemproxy是twitter开发的一个redis代理proxy,Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers 的时候不用关心到底去哪一台redis server读取k-v数据或者把k-v数据更新到...

    redis视频教程百度网盘下载地址及密码

    2016122301_Redis_集群_Twitter_Twemproxy模式_1.mp4 2016122301_Redis_集群_Twitter_Twemproxy模式_2.mp4 2016122301_Redis_集群_Twitter_Twemproxy模式_3.mp4 2016122301_Redis_集群_Twitter_Twemproxy模式_4.mp4 ...

    redis视频下载地址(百度云)

    Redis_集群_Twitter_Twemproxy模式_1.mp4 Redis_集群_Twitter_Twemproxy模式_2.mp4 Redis_集群_Twitter_Twemproxy模式_3.mp4 Redis_集群_Twitter_Twemproxy模式_4.mp4 Redis_集群_原生3.x集群模式_1.mp4 Redis_集群_...

    Redis集群_实际使用自己整理的版本.docx

    Redis集群方案:提供 客户端分片、Twemproxy、Codis、Redis 3.0集群以及云服务器上的集群服务。

    Redis高可用集群实现1

    1、前言本章节我们使用:Sentinel+Twemproxy+Keepalive+Redis搭建高可用集群我们通过之前的学习发现了一个问题,哨兵模式虽然可以自动

    Redis面试题50道(含答案)_.pdf

    10、Redis 集群方案应该怎么做?都有哪些方案? 11、Redis 集群方案什么情况下会导致整个集群不可用? 12、MySQL 里有 2000w 数据,Redis 中只存 20w 的数据, 如何保证 Redis 中的数据都是热点数据? 13、Redis 有...

    Twemproxy 0.4.1

    Twemproxy 构建redis集群 twemproxy最新版本 0.4.1

    Redis 集群解决方案 Codis.zip

    codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.13 开发, 加入了 slot 的支持...

    乌鸦:Redis 3.0的快速轻量级Redis集群代理

    从twemproxy无痛升级到官方Redis集群。 多线程。 重用端口支持。 管道支持。 Statsd集成。 Syslog集成。 可以将读取操作定向到从站。性能请参阅详细信息。要求Linux> = 3.9 Redis <= 3.0.7(适用于0.2.3以下的...

    Redis Cluster的图文讲解

    1.1 Redis-Cluster简介 1.1.1 什么是Redis-Cluster ...Redis集群搭建的方式有多种,例如使用客户端分片、Twemproxy、Codis等,但从redis 3.0之后版本支持redis-cluster集群,它是Redis官方提出的解决方案,Redi

    Redis V3.0 中文文档

    10 字符串 (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 列表 (Lists). . . . . . . . . . . . . . . . . . . . . ....

    Redis 3.0 中文版 - v1.1.pdf

    10 字符串 (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 列表 (Lists). . . . . . . . . . . . . . . . . . . . . . ...

    Twemproxy 安装过程

    redis集群代理Twemproxy 安装过程,Twemproxy是一个专门为了这种nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。所谓的分片指的是根据一定的算法将要保存的数据保存到不同的...

    Redis面试专题1

    1.twemproxy,大概概念是,它类似于一个代理方式,使用方法和普通 Redis 无任何区别, 2. codis,目前用的最多的集群方案,基本和 twemp

    最全50道Redis高频面试题1

    1.twemproxy,大概概念是,它类似于一个代理方式,使用方法和普通 redis 无任 2.codis,目前用的最多的集群方案,基本和 twemproxy

    Codis分布式Redis解决方案-其他

    codis-proxy是客户端连接的Redis代理服务,codis-proxy本身实现了Redis协议,表现得和一个原生的Redis没什么区别(就像Twemproxy),对于一个业务来说,可以部署多个codis-proxy,codis-proxy本身是无状态的。...

    Java思维导图xmind文件+导出图片

    Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 MongoDB聚合、索引及...

    ralph:Ralph 是 mesos 上 twemproxy 的服务发现

    它允许您运行 memcached 和 redis 的弹性集群,并在不中断服务和最小缓存损失的情况下动态更改集群大小。跑步Ralph 使用更新 twemproxy 配置。 您必须运行马拉松更新程序才能使用 ralph。 Ralph 作为 docker 容器...

Global site tag (gtag.js) - Google Analytics