文档章节

redis(10)、redis集群twemproxy

haoran_10
 haoran_10
发布于 2016/07/15 16:37
字数 1051
阅读 63
收藏 1

 

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

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
haoran_10
粉丝 25
博文 88
码字总数 80846
作品 0
杭州
程序员
私信 提问
Redis ​集群迁移工具--Redis-Migrate-Tool

Redis 集群迁移工具,基于redis复制,快速,稳定。 github链接:https://github.com/vipshop/redis-migrate-tool 特点: 快速。 多线程。 基于redis复制。 实时迁移。 迁移过程中,源集群不影...

d_e_e_p_
2016/04/06
8.4K
3
Redis+Twemproxy做代理部署集群

redis集群部署过程略。。。 部署Twemproxy 1. yum install autoconf automake libtool -y 2. wget https://github.com/twitter/twemproxy/archive/master.zip 3. unzip master.zip 4.cd twem......

小白的希望
06/28
0
0
Redis学习笔记(11)——Redis缓存集群方案

由于单台Redis服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧下降,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境的...

IT特种兵
2015/03/02
0
0
Redis异构集群之间数据迁移方案

一、Redis集群迁移工具 最近在做Redis数据迁移,网上找了两款开源的Redis迁移工具。 第一种:redis-port Codis官方提供的一个工具,redis-port是一个Redis工具,通过解析rdb文件,实现Redis...

IT--小哥
10/23
0
0
为什么Codis比较慢,但我们还要用它呢?

为什么 Codis 比 twemproxy 慢? Codis 追求简洁的实现,我们没有针对内存进行优化,所以会比 twemproxy 还要多一倍拷贝。 Go 虽然使用 epoll,但是 IO 都不是直接完成的,而是通过 IO threa...

抚琴煮酒
2017/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
12
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
9
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部