前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis+TwemProxy(nutcracker)集群方案部署记录

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

作者头像
洗尽了浮华
发布于 2018-01-22 07:18:57
发布于 2018-01-22 07:18:57
2.8K00
代码可运行
举报
文章被收录于专栏:散尽浮华散尽浮华
运行总次数:0
代码可运行

Twemproxy 又称nutcracker ,是一个memcache、Redis协议的轻量级代理,一个用于sharding 的中间件。有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy 代理中间件间接访问。 Twemproxy 为 Twitter 开源产品,简单来说,Twemproxy是Twitter开发的一个redis代理proxy,类似于nginx的反向代理或者mysql的代理工具,如amoeba。Twemproxy通过引入一个代理层,可以将其后端的多台Redis或Memcached实例进行统一管理与分配,使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached存储。

Twemproxy的特性

代码语言:javascript
代码运行次数:0
运行
复制
1)支持失败节点自动删除
   可以设置重新连接该节点的时间
   可以设置连接多少次之后删除该节点
2)支持设置HashTag
   通过HashTag可以自己设定将两个key哈希到同一个实例上去
3)减少与redis的直接连接数
   保持与redis的长连接
   减少了客户端直接与服务器连接的连接数量
4)自动分片到后端多个redis实例上
   多种hash算法:md5、crc16、crc32 、crc32a、fnv1_64、fnv1a_64、fnv1_32、fnv1a_32、hsieh、murmur、jenkins
   多种分片算法:ketama(一致性hash算法的一种实现)、modula、random
   可以设置后端实例的权重
5)避免单点问题
   可以平行部署多个代理层,通过HAProxy做负载均衡,将redis的读写分散到多个twemproxy上。
6)支持状态监控
   可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串
   可设置监控信息刷新间隔时间
7)使用 pipelining 处理请求和响应
   连接复用,内存复用
   将多个连接请求,组成reids pipelining统一向redis请求
8)并不是支持所有redis命令
   不支持redis的事务操作
   使用SIDFF, SDIFFSTORE, SINTER, SINTERSTORE, SMOVE, SUNION and SUNIONSTORE命令需要保证key都在同一个分片上。

举个小例子:

代码语言:javascript
代码运行次数:0
运行
复制
你可以把公司前台的MM看作一个proxy,你是个送快递的,你可以通过这个妹子替你代理把你要送达的包裹给公司内部的人,而你不用知道公司每个人座位在哪里。
Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers 的时候不用关心到底去哪一台redis server读取
k-v数据或者把k-v数据更新到数据集中。

通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。比如我所在的公司,只使用一台redis server进行读写,但是还有一台slave server一直在同步这台生产服务器的数据。这样做就是为了防止这台单一的生产服务器出现故障时能够有一个"备胎",可以把前端的redis数据读写请求切换到从服务器上,web程序因而不需要直接去访问mysql数据库。再借助于haproxy(又是proxy)或者VIP技术可以实现一个简单的HA方案,可以避免单点故障。但是这种简单的Master-Slave"备胎"方案不能扩张整个redis的容量(如果用系统内存大小衡量,且不考虑内存不足时把数据swap到磁盘上),最大容量由所有的redis servers中最小内存决定的【木桶的短板】。

Twemproxy可以把数据sharding(碎片,这里是分散的意思)到多台服务器的上,每台服务器存储着整个数据集的一部分。因而,当某一台redis服务器宕机了,那么也就失去了一部分数据。如果借助于redis的master-slave replication,能保证在任何一台redis不能工作情况下,仍然能够保证能够存在一个整个数据集的完全覆盖,那么整个redis group(或者称作cluster)仍然能够正常工作。

需要注意的是: Twemproxy不会增加Redis的性能指标数据,据业界测算,使用twemproxy相比直接使用Redis会带来大约10%的性能下降。但是单个Redis进程的内存管理能力有限。据测算,单个Redis进程内存超过20G之后,效率会急剧下降。目前,建议单个Redis最好配置在8G以内;8G以上的Redis缓存需求,通过Twemproxy来提供支持。

----------------------------------------------------------------------------------------------------------------------------------------------------- 下面记录下Redis+Twemproxy(nutcracker)集群部署过程:

先简单看下集群架构

Twemproxy可以把多台redis server当作一台使用,扩大整个redis的容量,开发人员通过twemproxy访问这些redis servers 的时候不用关心到底去哪一台redis server读取k-v数据或者把k-v数据更新到数据集中。

代码语言:javascript
代码运行次数:0
运行
复制
1)集群环境
182.48.115.236    twemproxy-server    安装nutcracker
182.48.115.237    redis-server1       安装redis
182.48.115.238    redis-server2       安装redis

如果在线上使用的话:
中间代理层twemproxy需要2台,并且需要结合keepalived(心跳测试)实现高可用,客户端通过vip资源访问twemproxy。
另外,后面的redis节点也都要做主从复制环境。因为twemproxy会讲数据碎片到每个redis节点上,如果节点挂了,那部分数据就没了。所以最好对每个redis节点机做主从,防止数据丢失。

这里做测试,我只使用一台twemproxy+2个redis节点(不做主从)。

关闭三台机器的iptables防火墙和selinux

2)在两台redis机器上安装并启动redis
可以参考:http://www.cnblogs.com/kevingrace/p/6265722.html

3)在twemproxy-server机器上安装nutcracker

编译安装autoconf
[root@twemproxy-server ~]# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
[root@twemproxy-server ~]# tar -zvxf autoconf-2.69.tar.gz
[root@twemproxy-server ~]# cd autoconf-2.69
[root@twemproxy-server autoconf-2.69]# ./configure && make && make install

编译安装automake
[root@twemproxy-server ~]# wget http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
[root@twemproxy-server ~]# tar -zvxf automake-1.15.tar.gz 
[root@twemproxy-server ~]# cd automake-1.15
[root@twemproxy-server automake-1.15]# ./configure && make && make install

编译安装libtool
[root@twemproxy-server ~]# wget https://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.gz
[root@twemproxy-server ~]# tar -zvxf libtool-2.4.6.tar.gz 
[root@twemproxy-server ~]# cd libtool-2.4.6
[root@twemproxy-server libtool-2.4.6]# ./configure && make && make install

编译安装twemproxy
[root@twemproxy-server ~]# wget https://github.com/twitter/twemproxy/archive/master.zip
[root@twemproxy-server ~]# unzip master.zip 
[root@twemproxy-server ~]# cd twemproxy-master
[root@twemproxy-server twemproxy-master]# aclocal
[root@twemproxy-server twemproxy-master]# autoreconf -f -i -Wall,no-obsolete    //执行autoreconf 生成 configure文件等
[root@twemproxy-server twemproxy-master]# ./configure --prefix=/usr/local/twemproxy/
[root@twemproxy-server twemproxy-master]# make && make install

.................................................................................
注意:如果没有安装libtool 的话,autoreconf 的时候会报错,如下:
configure.ac:133: the top level
configure.ac:36: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/local/bin/autoconf failed with exit status: 1
.................................................................................

twemproxy配置:
[root@twemproxy-server ~]# cd /usr/local/twemproxy/
[root@twemproxy-server twemproxy]# ls
sbin  share
[root@twemproxy-server twemproxy]# cp -r /root/twemproxy-master/conf /usr/local/twemproxy/
[root@twemproxy-server twemproxy]# cd conf/
[root@twemproxy-server conf]# ls
nutcracker.leaf.yml  nutcracker.root.yml  nutcracker.yml
[root@twemproxy-server conf]# cp nutcracker.yml nutcracker.yml.bak
[root@twemproxy-server conf]# vim nutcracker.yml
alpha:                                       //这个名称可以自己随意定义
  listen: 182.48.115.236:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:                             //这里配置了两个分片
   - 182.48.115.237:6379:1
   - 182.48.115.238:6379:1

[root@twemproxy-server conf]# nohup /usr/local/twemproxy/sbin/nutcracker -c /usr/local/twemproxy/conf/nutcracker.yml &

[root@twemproxy-server conf]# ps -ef|grep nutcracker
root      6407 24314  0 23:26 pts/0    00:00:00 /usr/local/twemproxy/sbin/nutcracker -c /usr/local/twemproxy/conf/nutcracker.yml
root      6410 24314  0 23:26 pts/0    00:00:00 grep nutcracker
[root@twemproxy-server conf]# lsof -i:22121
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nutcracke 6407 root    5u  IPv4 155109      0t0  TCP localhost:22121 (LISTEN)

4)测试 twemproxy set/get ,后端分片查看

[root@twemproxy-server ~]# redis-cli -h 182.48.115.236 -p 22121
182.48.115.236:22121> 

测试短key - value
[root@twemproxy-server ~]# redis-cli -h 182.48.115.236 -p 22121
182.48.115.236:22121> set wangshibo 666666
OK
182.48.115.236:22121> get wangshibo
"666666"

测试长key - value
182.48.115.236:22121> set huihuihuihuihuihui "hahahahahahahahhahahahahahahahhahahahahahah"
OK
182.48.115.236:22121> get huihuihuihuihuihui 
"hahahahahahahahhahahahahahahahhahahahahahah"

登录两台redis节点上查看,发现已经有分片了
[root@redis-server1 ~]# redis-cli -h 182.48.115.237 -p 6379
182.48.115.237:6379> get wangshibo
"666666"
182.48.115.237:6379> get huihuihuihuihuihui 
"hahahahahahahahhahahahahahahahhahahahahahah"

[root@redis-server2 ~]# redis-cli -h 182.48.115.238 -p 6379
182.48.115.238:6379> get wangshibo
"666666"
182.48.115.238:6379> get huihuihuihuihuihui 
"hahahahahahahahhahahahahahahahhahahahahahah"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
云函数网易云自动打卡
什么是云函数?就是可以让你没有服务器、本地电脑不用下载Python也可以使用这个项目,而且还是白嫖!
小唐同学.
2022/02/19
1.6K0
网易云音乐等级快速升级:每天自动打卡听歌300首
今天分享的是每天自动在网易云音乐刷完300首歌,让你的账号快速升级(等级数据每天下午2点更新),关于等级特权 这里有介绍 https://music.163.com/#/level/details ,最高级lv10有100G音乐云盘免费容量。
苏生不惑
2020/07/06
18.8K2
网易云音乐等级快速升级:每天自动打卡听歌300首
腾讯云函数版网易云音乐每天签到自动听歌300首
3.打开在线md5加密网站,把你的密码md5加密,后边需要使用到32位小写的加密方式!
小瑜
2021/04/23
3.8K0
网易云云函数自动打卡升级
所用到的资源打包:https://englishcode.lanzoul.com/iY0Lk022rn7c
知识浅谈
2022/03/31
1.9K2
网易云自动签到云函数【详细版】-2022.5.4
(5)点击下方 高级配置 (6)内存:64MB (7)执行超时时间:900 (8)除上方需要修改的 其他的地方不用改 (9)点击 完成,等待部署完成
MIKE笔记
2023/03/22
1.2K0
网易云自动签到云函数【详细版】-2022.5.4
基于云函数自动给网易云音乐刷歌升级
由于本 Niko 的网易云音乐实在是菜(才 8 级),而自己又是懒癌晚期,不想手动登录领云贝,并且以正常人的标准一天也刷不完 300 首歌(如果你是超人或者闲得慌当我没说)。所以去了解了这方面的项目,最终通过使用 良心云的云函数 实现了这一目标。
NikoDos
2022/04/20
1.8K1
基于云函数自动给网易云音乐刷歌升级
使用腾讯云函数实现网易云音乐自动打卡签到
在这篇文章中,我将主要介绍如何使用腾讯云中的云函数来实现网易云自动打卡和签到功能。本文中的 PHP 源代码可以在 GitHub 上找到。
用户2590762
2021/08/11
2.7K0
使用腾讯云实现网易云自动打卡签到
文章的正文分为两个部分:基础集成和原生部署,第一部分是文章的主体,第二部分供喜欢网易云的研究。 当你按照此文章成功设置完成,将:
骤雨重山
2022/01/17
2.2K0
使用腾讯云实现网易云自动打卡签到
【玩转云函数】腾讯云函数 Python 依赖安装
以下内容来自「玩转腾讯云」用户原创文章,已获得授权。 本次作者主要是想利用腾讯云的 Serverless 云函数服务,由于腾讯云函数 Python 的环境只配置了基础的 Python 库,比如流行的 Pandas 库并没有包含在内,这就导致了面板数据类型的分析不能很好的进行。本次文章主要想解决的问题如下: 1. 利用 Docker 部署跟腾讯云函数一致的环境; 2. 由于腾讯云函数采用了 Python 3.6.1 版本,该版本相对而言比较老旧,需要安装适配的 Pandas 版本; 3. 本次依赖安装,需
腾讯云serverless团队
2021/07/20
4.8K0
通过云函数SCF把视频处理VC迁移到云转码
本文将引导你逐步把视频处理的功能迁移到云转码,从腾讯云官网得知,视频处理VC的功能已迁移至云转码,不过老用户依然可以正常使用视频处理VC,但云转码不支持文件上传到cos后自动转码,需要调用一次云API发起转码;
美女视频
2019/07/24
1.8K0
通过云函数SCF把视频处理VC迁移到云转码
腾讯云云函数快速入门实践
云函数 (Serverless Cloud Function,SCF) 是腾讯云为企业和开发者们提供的无服务器执行环境。无服务器并非真的没有服务器,而是说用户无需购买服务器,无需关心服务器 CPU、内存、网络配置、资源维护、代码部署、弹性伸缩、负载均衡、安全升级、资源运行情况监控等,也就是说不用专门安排人力做这些,只需专注于代码编写并上传即可。很大程度上降低了研发门槛,提升业务构建效率。 由于 Serverless 拥有近乎无限的扩容能力,核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务
腾讯云serverless团队
2020/06/01
3.6K0
我的 Serverless 实战 — 云函数本地开发环境搭建
上一篇博客 我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 ) 中 , 在腾讯云平台上 , 创建了云函数与触发器 , 并对触发器进行了测试 , 通过 HTTP 访问触发云函数 ;
韩曙亮
2023/03/29
7910
我的 Serverless 实战 — 云函数本地开发环境搭建
利用腾讯云函数实现有道云笔记自动签到
有道云笔记是由有道公司推出了一款笔记软件。每天签到就可以领取3-5mb的空间。但是呢,有时候会忘了签到,所以我就在网上找了一段python的代码,通过腾讯云函数实现每天的自动签到。 准备:电脑,Chrome浏览器,你的账号密码,一个腾讯云账号,一段代码(下载地址在右侧或者文章底部) 那么教程开始 打开Chrome浏览器,并打开有道云笔记官网(note.youdao.com),右上角点击登录
叮当叮
2020/04/20
8.5K3
利用腾讯云函数实现有道云笔记自动签到
【云+社区年度征文】全网第一个基于云函数的马保国彩色二维码生成器
接触云函数已经有一段时间嘞,TCB云开发的云函数对于前端开发人员来说是一个开发利器,我们可以基于云函数开发很多有意思的应用。这不,我们可以用它来合成彩色二维码,就让马保国老师来成为上云第一人吧(程序员要讲码德,耗子尾汁)。
薛定喵君
2020/11/27
2K0
【云+社区年度征文】全网第一个基于云函数的马保国彩色二维码生成器
【玩转云函数】腾讯云函数帮我定时和 HR 打招呼,找工作不再愁!
以下内容来自「玩转腾讯云」用户原创文章,已获得授权。 最近看很多人跑路,所以就想着造福自己,想去自动的在某招聘软件中跟 HR 打招呼,由于买个服务器来单独配个 corntab 确实有点浪费,所以就选择了云函数,毕竟云函数的免费额度够用了。 所以,开始吧! 1 脚本编写 我使用的是 Node.js 进行编写,总共文件分为三个: common.js 存放公共的头部参数, 和公共方法 request.js 用于请求接口 index.js 用于云函数的触发器配置运行的文件 代码都没啥,就是带参数请求接口
腾讯云serverless团队
2021/07/20
6530
【玩转腾讯云】万物皆可Serverless之免费搭建自己的不限速大容量云盘(5TB)
当我们在网络上好不容易找到资源准备下载时,却发现下载速度最快不过200、300KB/S,
乂乂又又
2020/04/09
7.7K28
【玩转腾讯云】万物皆可Serverless之免费搭建自己的不限速大容量云盘(5TB)
小程序云函数实现客服消息回复
负责的小程序最近上线了支付功能,但是因为虚拟支付规范 ,不能直接购买 所以退而求其次,采用了客服消息自动回复购买链接的方式
薛定喵君
2019/11/05
3.7K2
京东薅羊毛全自动脚本_京东自动签到
自动签到脚本此脚本涵盖了目前京90%以上的签到任务,我们只需要简单配置,每天定时触发,就可以签到,领奖品了。而且都是免费的。
全栈程序员站长
2022/10/02
6.1K1
京东薅羊毛全自动脚本_京东自动签到
腾讯轻量云自动创建快照-使用腾讯云函数实现
相信大家有很多人都买了腾讯云轻量云,轻量云不能自动创建快照,今天就使用腾讯的云函数自动创建快照,每天备份,自动删除最早的备份或者删除一个最新的备份,保留一个固定备份,保护数据。
Qwe7
2022/01/20
11K11
支持函数本地部署调试 SCF命令行工具开源上线!
SCF CLI 是腾讯云无服务器云函数 SCF(Serverless Cloud Function)产品的命令行工具。通过SCF命令行工具,用户可以方便的实现函数打包、部署以及本地调试,并在本地生成云函数的项目并基于 demo 项目进一步的开发。
腾讯云serverless团队
2019/06/21
1.7K0
推荐阅读
相关推荐
云函数网易云自动打卡
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档