from unsplash

为提高Redis存储能力的提升,以及对外提供服务可用性提升,有时候有必要针对Redis进行集群式搭建,比较常用的有Twemproxy分片存储以及官方提供的Cluster方式。

Redis实例安装

Redis的安装这里不再多讲,相关步骤可从官网或其它渠道得到。为安装redis多实例,这里简单提前创建完相关文件夹。其中redis存放应用程序,redis1/redis2/redis3仅存储配置文件。

  1. [root@host1 redis-cluster]# ll

  2. 总用量 4

  3. drwxr-xr-x 6 root root 4096 8月  29 09:16 redis

  4. drwxr-xr-x 2 root root   24 8月  29 09:29 redis1

  5. drwxr-xr-x 2 root root   24 8月  29 09:25 redis2

  6. drwxr-xr-x 2 root root   24 8月  29 09:26 redis3

各实例简单配置如下:

redis1

  1. daemonize yes

  2. port 63791

  3. pidfile /var/run/redis1.pid

redis2

  1. daemonize yes

  2. port 63792

  3. pidfile /var/run/redis2.pid

redis3

  1. daemonize yes

  2. port 63793

  3. pidfile /var/run/redis3.pid

分别启动,运行成功如下:

  1. [root@host1 redis-cluster]# ps -ef |grep redis

  2. root     110719      1  0 09:24 ?        00:00:00 redis/src/redis-server 127.0.0.1:63791

  3. root     110761      1  0 09:25 ?        00:00:00 redis/src/redis-server 127.0.0.1:63792

  4. root     110787      1  0 09:26 ?        00:00:00 redis/src/redis-server 127.0.0.1:63793

  5. root     110964  83212  0 09:30 pts/0    00:00:00 grep --color=auto redis

Twemproxy应用

以上三个实例各为独自运行,并没有启动集群存储、存储能力提升的功能。为实现redis的集群存储,本例结合早先出现的Twemproxy技术(由twitter开源)进行redis分片存储,而非在Twemproxy之后出现的官方提供的cluster功能。

下面开启Twemproxy的应用,源码安装

  1. [root@host1 src]# git clone git@github.com:twitter/twemproxy.git

  2. [root@host1 src]# cd twemproxy

  3. [root@host1 twemproxy]# autoreconf -fvi

  4. [root@host1 twemproxy]# ./configure --enable-debug=full

  5. [root@host1 twemproxy]# make

  6. [root@host1 twemproxy]# src/nutcracker -h

  7. [root@host1 twemproxy]# src/nutcracker -h

  8. This is nutcracker-0.4.1

  9. Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]

  10.                  [-c conf file] [-s stats port] [-a stats addr]

  11.                  [-i stats interval] [-p pid file] [-m mbuf size]

  12. Options:

  13.  -h, --help             : this help

  14.  -V, --version          : show version and exit

  15.  -t, --test-conf        : test configuration for syntax errors and exit

  16.  -d, --daemonize        : run as a daemon

  17.  -D, --describe-stats   : print stats description and exit

  18.  -v, --verbose=N        : set logging level (default: 5, min: 0, max: 11)

  19.  -o, --output=S         : set logging file (default: stderr)

  20.  -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml)

  21.  -s, --stats-port=N     : set stats monitoring port (default: 22222)

  22.  -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0)

  23.  -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)

  24.  -p, --pid-file=S       : set pid file (default: off)

  25.  -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)

安装完成后,配置nutcracker.yml,采用ketama(一致性hash算法)分片方式。其余还有Modula和Random两种方式。取模算法有明细的缺陷:在分片增加的情况下,数据的命中率直线下降。随机算法更是无法保证数据的均衡读写。

  1. redis-cluster:

  2.  listen: 0.0.0.0:22122

  3.  hash: fnv1a_64

  4.  distribution: ketama

  5.  timeout: 400

  6.  backlog: 65535

  7.  preconnect: true

  8.  redis: true

  9.  server_connections: 1

  10.  auto_eject_hosts: true

  11.  server_retry_timeout: 60000

  12.  server_failure_limit: 3

  13.  servers:

  14.    - 127.0.0.1:63791:1 redis01

  15.    - 127.0.0.1:63792:1 redis02

  16.    - 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分片存储实现的更多相关文章

  1. redis+twemproxy实现redis集群

    Redis+TwemProxy(nutcracker)集群方案部署记录 转自: http://www.cnblogs.com/kevingrace/p/5685401.html Twemproxy 又 ...

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

    Twemproxy 又称nutcracker ,是一个memcache.Redis协议的轻量级代理,一个用于sharding 的中间件.有了Twemproxy,客户端不直接访问Redis服务器,而是通 ...

  3. Redis+Twemproxy+HAProxy集群(转) 干货

    原文地址:Redis+Twemproxy+HAProxy集群  干货 Redis主从模式 Redis数据库与传统数据库属于并行关系,也就是说传统的关系型数据库保存的是结构化数据,而Redis保存的是一 ...

  4. 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型

    分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型   分布式缓存特性: 1) 高性能:当传统数据库面临大规模 ...

  5. Redis与KV存储(RocksDB)融合之编码方式

    Redis与KV存储(RocksDB)融合之编码方式 简介 Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧.锋利.实用,特别适合解决一些使用传统关系数据库难以解决的问题.Re ...

  6. PHP中Redis替代文件存储Session语句

    php默认使用文件存储session,如果并发量大,效率非常低.而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session. 这里,介绍下php的 session_set_s ...

  7. C# redis 分布式session存储

    https://github.com/uliian/SessionExtentionStore 一个基于Redis的Session存储扩展方案,解决ASP.NET中Session的局限性和跨应用程序使 ...

  8. Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

    Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...

  9. Elasticsearch 分片路由原理指定分片存储查询

    Elasticsearch 项目中使用到Es的父子结构.在数据填充之后,查看每个节点的数据分布情况,发现有的节点数据多,有的节点少的情况,在未使用Es父级结构之前,每个节点的数据分布还算平均,如下图: ...

随机推荐

  1. mvn 命令在command prompt无法识别

    Download maven from this website: https://maven.apache.org/download.cgi 解压binary包后放到一个位置,比如C:\apache ...

  2. 初探WINDOWS下IME编程

    初探WINDOWS下IME编程作者:广东南海市昭信科技有限公司-李建国 大家知道,DELPHI许多控件有IME属性.这么好用的东西VC可没自带,怎么办呢?其实,可通过注册表,用API实现.下面说一下本 ...

  3. Z-Order

    The z-order of a window indicates the window's position in a stack of overlapping windows. This wind ...

  4. Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测

    原文:Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测  [函数名称] 图像Prewitt边缘检测函数PrewittEdgeProcess(WriteableBitmap ...

  5. SQLServer 以备份初始化订阅

    原文:SQLServer 以备份初始化订阅 在创建事务复制时,如果发布数据库很大,使用快照初始化时,将等待很久,如果出现问题可能又得重新初始化.使用备份初始化会省很多时间,但是数据库在创建发布订阅期间 ...

  6. CLSRSC-400: A system reboot is required to continue installing.

    I try to install oracle database 12c RAC on the RedHat 7.3,when I execute the script '/u01/app/12.2. ...

  7. Qt 5.3更新无数,更改C++控制台输出最为赞(这样就和普通C++ IDE没区别了)

    转载请注明文章:Qt 5.3更新无数,更改C++控制台输出最为赞 出处:多客博图 本人觉得有了这个更新,Qt Creator可谓几乎没有缺点了,起码仅仅开发C/C++,是不用再去安装VS了. Qt 5 ...

  8. Dependency Injection 筆記 (4)

    续上集未完的相关设计模式... (本文摘自電子書:<.NET 依賴注入> Composite 模式 延续先前的电器比喻.现在,如果希望 UPS 不只接计算机,还要接电风扇.除湿机,可是 U ...

  9. qt 心跳设计

    网络通信中的心跳设计是为了判断客户端和服务器通信是socket是否处于连接状态,服务端每隔一个固定的时间间隔给客户端放消息,客户端设计一个心跳类,类中有一个定时器,当socket接收到信息时,心跳类记 ...

  10. sql小计汇总 rollup用法实例分析

    这里介绍sql server2005里面的一个使用实例: ),city ),score int) GO 1. 只有一个汇总 select province as 省,sum(score) as 分数 ...