Redis+Twemproxy分片存储实现
from unsplash
为提高Redis存储能力的提升,以及对外提供服务可用性提升,有时候有必要针对Redis进行集群式搭建,比较常用的有Twemproxy分片存储以及官方提供的Cluster方式。
Redis实例安装
Redis的安装这里不再多讲,相关步骤可从官网或其它渠道得到。为安装redis多实例,这里简单提前创建完相关文件夹。其中redis存放应用程序,redis1/redis2/redis3仅存储配置文件。
[root@host1 redis-cluster]# ll
总用量 4
drwxr-xr-x 6 root root 4096 8月 29 09:16 redis
drwxr-xr-x 2 root root 24 8月 29 09:29 redis1
drwxr-xr-x 2 root root 24 8月 29 09:25 redis2
drwxr-xr-x 2 root root 24 8月 29 09:26 redis3
各实例简单配置如下:
redis1
daemonize yes
port 63791
pidfile /var/run/redis1.pid
redis2
daemonize yes
port 63792
pidfile /var/run/redis2.pid
redis3
daemonize yes
port 63793
pidfile /var/run/redis3.pid
分别启动,运行成功如下:
[root@host1 redis-cluster]# ps -ef |grep redis
root 110719 1 0 09:24 ? 00:00:00 redis/src/redis-server 127.0.0.1:63791
root 110761 1 0 09:25 ? 00:00:00 redis/src/redis-server 127.0.0.1:63792
root 110787 1 0 09:26 ? 00:00:00 redis/src/redis-server 127.0.0.1:63793
root 110964 83212 0 09:30 pts/0 00:00:00 grep --color=auto redis
Twemproxy应用
以上三个实例各为独自运行,并没有启动集群存储、存储能力提升的功能。为实现redis的集群存储,本例结合早先出现的Twemproxy技术(由twitter开源)进行redis分片存储,而非在Twemproxy之后出现的官方提供的cluster功能。
下面开启Twemproxy的应用,源码安装
[root@host1 src]# git clone git@github.com:twitter/twemproxy.git
[root@host1 src]# cd twemproxy
[root@host1 twemproxy]# autoreconf -fvi
[root@host1 twemproxy]# ./configure --enable-debug=full
[root@host1 twemproxy]# make
[root@host1 twemproxy]# src/nutcracker -h
[root@host1 twemproxy]# src/nutcracker -h
This is nutcracker-0.4.1
Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, --help : this help
-V, --version : show version and exit
-t, --test-conf : test configuration for syntax errors and exit
-d, --daemonize : run as a daemon
-D, --describe-stats : print stats description and exit
-v, --verbose=N : set logging level (default: 5, min: 0, max: 11)
-o, --output=S : set logging file (default: stderr)
-c, --conf-file=S : set configuration file (default: conf/nutcracker.yml)
-s, --stats-port=N : set stats monitoring port (default: 22222)
-a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
-i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
-p, --pid-file=S : set pid file (default: off)
-m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)
安装完成后,配置nutcracker.yml,采用ketama(一致性hash算法)分片方式。其余还有Modula和Random两种方式。取模算法有明细的缺陷:在分片增加的情况下,数据的命中率直线下降。随机算法更是无法保证数据的均衡读写。
redis-cluster:
listen: 0.0.0.0:22122
hash: fnv1a_64
distribution: ketama
timeout: 400
backlog: 65535
preconnect: true
redis: true
server_connections: 1
auto_eject_hosts: true
server_retry_timeout: 60000
server_failure_limit: 3
servers:
- 127.0.0.1:63791:1 redis01
- 127.0.0.1:63792:1 redis02
- 127.0.0.1:63793:1 redis03
保存后,进行简单的测试,保证配置文件的正确性,若出现如下响应,证明配置文件运行正常。
[root@host1 conf]# ../src/nutcracker -c nutcracker.yml -t
nutcracker: configuration file 'nutcracker.yml' syntax is ok
启动Twemproxy,此时的redis的分片集群搭建已完成。可以通过22122直接访问redis服务【twemproxy并不支持所有redis/memcache的命令,具体请参考https://github.com/twitter/twemproxy/blob/master/notes/redis.md】
简单测试
采用redis-cli客户端登陆22122端口,随机写入一批数据,再通过redis-cli连接具体的redis实例端口,如63791/63792/63793,查看数据是真实的存储在哪一个实例中。
至此,我们已经搭建好一个分片存储的Redis集群应用,为前端提供强劲数据缓存服务
扩展阅读:
长按2秒,识别二维码,关注我。
关注程序员成长
Redis+Twemproxy分片存储实现的更多相关文章
- redis+twemproxy实现redis集群
Redis+TwemProxy(nutcracker)集群方案部署记录 转自: http://www.cnblogs.com/kevingrace/p/5685401.html Twemproxy 又 ...
- Redis+TwemProxy(nutcracker)集群方案部署记录
Twemproxy 又称nutcracker ,是一个memcache.Redis协议的轻量级代理,一个用于sharding 的中间件.有了Twemproxy,客户端不直接访问Redis服务器,而是通 ...
- Redis+Twemproxy+HAProxy集群(转) 干货
原文地址:Redis+Twemproxy+HAProxy集群 干货 Redis主从模式 Redis数据库与传统数据库属于并行关系,也就是说传统的关系型数据库保存的是结构化数据,而Redis保存的是一 ...
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型 分布式缓存特性: 1) 高性能:当传统数据库面临大规模 ...
- Redis与KV存储(RocksDB)融合之编码方式
Redis与KV存储(RocksDB)融合之编码方式 简介 Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧.锋利.实用,特别适合解决一些使用传统关系数据库难以解决的问题.Re ...
- PHP中Redis替代文件存储Session语句
php默认使用文件存储session,如果并发量大,效率非常低.而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session. 这里,介绍下php的 session_set_s ...
- C# redis 分布式session存储
https://github.com/uliian/SessionExtentionStore 一个基于Redis的Session存储扩展方案,解决ASP.NET中Session的局限性和跨应用程序使 ...
- Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...
- Elasticsearch 分片路由原理指定分片存储查询
Elasticsearch 项目中使用到Es的父子结构.在数据填充之后,查看每个节点的数据分布情况,发现有的节点数据多,有的节点少的情况,在未使用Es父级结构之前,每个节点的数据分布还算平均,如下图: ...
随机推荐
- 【全面解禁!真正的Expression Blend实战开发技巧】第五章 从最常用ButtonStyle开始 - ImageButton
原文:[全面解禁!真正的Expression Blend实战开发技巧]第五章 从最常用ButtonStyle开始 - ImageButton 本章围绕ImageButton深入讨论,为什么是Image ...
- C# Newtonsoft.Json JObject移除属性,在序列化时忽略
原文 C# Newtonsoft.Json JObject移除属性,在序列化时忽略 一.针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移 ...
- PHP 实现自动加载器(Autoloader)
我们知道PHP可以实现自动加载,避免了繁重的体力活,代码更规范,整洁.那如果我们把这个自动加载再升华一下,变成自动加载类,每次只需要引入这个类,那么其他类就自动加载了,已经开源,仓库地址在这里.同时如 ...
- Python编写AWS Version 4 signing (AWS4-HMAC-SHA256) for execute-api
官网教程中给了签署AWS请求给了详细的介绍和python的例子,但是例子针对DynamoDB API,本例子针对API Gateway的POST请求,并携带有x-amz-security-token. ...
- C#基础加强篇---委托、Lamada表达式和事件(中)
2.Lamada表达式 C#共有两种匿名函数:匿名方法和Lamada表达式.在2.0之前的C#版本中,创建委托的唯一方法是使用命名方法.C#2.0中引入了匿名方法,匿名方法就是没有名称的方法. ...
- Windows下配置QT OpenCV
OpenCV-Study:Windows下配置OpenCV 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:XP OpenCV版本:2.4 ...
- 使用mingw编译完整Qt5的过程(使用了niXman的msys套装)good
使用mingw编译完整Qt5的过程 坛子里似乎已经有人编译出Qt5了,不过大多有问题,不是缺少opengl就是缺少openssl,还有缺少webkit的,本文提供的仍然不能说是绝对完整的,不过相对以前 ...
- Codility--- TapeEquilibrium
Task description A non-empty zero-indexed array A consisting of N integers is given. Array A represe ...
- 最近公共祖先(least common ancestors algorithm)
lca问题是最近公共祖先问题,一般是针对树结构的.现在有两种方法来解决这样的问题 1. On-line algorithm 用比较长的时间做预处理.然后对每次询问进行回答. 思路:对于一棵树中的两个节 ...
- 教你做一个牛逼的DBA(在大数据下)
一.基本概念 大数据量下,搞mysql,以下概念需要先达成一致 1)单库,不多说了,就是一个库 2)分片(sharding),水平拆分,用于解决扩展性问题,按天拆分表 3)复制(replication ...