要搭建Redis集群。首先得考虑以下的几个问题;

Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群?

Redis集群搭建的目的事实上也就是集群搭建的目的。全部的集群主要都是为了解决一个问题,横向扩展。
在集群的概念出现之前,我们使用的硬件资源都是纵向扩展的,可是纵向扩展非常快就会达到一个极限,单台机器的Cpu的处理速度,内存大小。硬盘大小没办法一直满足需求,并且机器纵向扩展的成本是相当高的。

集群的出现就是可以让多台机器像一台机器一样工作,实现了资源的横向扩展。


Redis是内存型数据库。当我们要存储的数据达到一定程度时,单台机器的内存满足不了我们的需求。搭建集群则是一种非常好的解决方式。

那么怎样可以让多台机器上的Redis可以像一台机器上的Redis一样工作呢?

须要解决下面三个问题;
1.对外暴露一个訪问节点
2.请求分片(sharding)
3.分片要合理(分片均匀,相同的请求要分配到相同的redis节点)

首先,要对外暴露一个訪问节点,后面可能有多台redis再工作;我们非常easy想到的就是代理(Proxy),对于client仅仅须要知道代理。通过代理来和后台的多台redis交互。

第二个问题能够使用hash算法解决,将请求的某个key取hash值。对redis个数取余。来分配的不同的redis上;然而这么做不能满足第三点中的相同的请求要分配到相同的redis中。在这样的情况下一致性哈希能够完美的解决问题,一致性哈希能够将redis的节点通过hash算法分布再一个232 个节点的圆环上。将请求的key用相同的hash算法映射到这个圆环上。然后在key值的节点顺时针寻找近期的redis节点,这样就保证了一致性;具体介绍能够參考:http://blog.csdn.net/sparkliang/article/details/5279393 。

假设让我来实现redis集群的话,我会採用zookeeper加上一个redis守护程序加上一致性hash算法来实现。只是twicer的大神们已经实现并开源了一个redis集群方案。我就不反复制造轮子了;来看看这个全球最大的redis集群使用者之中的一个的大神们实现的 twemproxy (nutcracker)有哪些特性。


Twemproxy除了能够作为redis的代理,它相同支持memerycached的ASCII协议。我这里主要了解Twemproxy在redis集群上的解决方式。

Twemproxy除了完美的攻克了上面的三个问题(相同採用了一致性hash算法)。另一个重要的特点;它支持

node ejection。假设使用redis当缓存,不是非常注重数据的一致性的话。开启node ejection能够在集群中某一台redis挂掉的时候将其送集群列表中移除,达到高可用性。

假设redis集群做为数据存储的话,或者非常注重数据的一致性。则能够禁用node jection。但此时须要使用其它方法实现高可用性,比方redis sentiel。

Twemproxy的具体介绍能够看看这篇文章:http://antirez.com/news/44;Twemproxy项目Github地址:https://github.com/twitter/twemproxy

 
废话说了这么多。来看看怎么安装twemproxy。搭建redis集群吧

首先依照github提示的步骤安装twemproxy:

To build nutcracker from source with debug logs enabled and assertions disabled:

$ git clone git@github.com:twitter/twemproxy.git
$ cd twemproxy
$ autoreconf -fvi
$ ./configure --enable-debug=log
$ make 依次输入上面的命令。然后输入:
$ src/nutcracker -h
假设显示帮助信息,则表示成功安装; 接下来编辑配置信息。找一个自己喜欢的文件夹,创建配置文件,后缀为yml,如twemproxy.test.yml;填入例如以下信息:
alpha:
listen: 127.0.0.1:55555
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 30000
server_failure_limit: 1
servers:
- 192.168.1.10:6379:1
- 192.168.1.7:6379:1
注意缩进,否则将无法启动twenproxy。
当中listen:表示代理的ip以及port号。是暴露给client使用的。hash: 表示使用哪种hash方法,twemproxy提供了多种方式,详细能够看github介绍;distribution表示分配模式。有三种选择:ketama, modula,random。auto_reject_hosts: 就是上面所说的,自己主动移除失败的节点。redis: 表示使用的是redis集群,剩下的配置非常easy就不一一介绍了......
通过如此简单的配置之后,运行./src/nutcracker -c ./conf/nutcracker.test.yml(这里使用自己的安装路径和配置文件路径) 就启动了twemproxy, client仅仅须要通过redis-cli就能连接上proxy,用法和redis全然一样(但不是全部命令都支持)。 这样redis的集群就搭好了。是不是简单到爆?只是不要开心得太早,twemproxy也有它的不足之处。 1.不支持事务以及批量操作;
2.相较于直接訪问redis性能有所损耗;
尽管twemproxy有上述缺点,单相较于起带来的优点简直不值一提。但也说明它不适用于全部情况。

Redis集群还有非常多种搭建方式。其官方的cluster一直处于beta状态,相信了解了twemproxy后,大家会发现它是如今最好的选择!

Redis集群搭建最佳实践的更多相关文章

  1. [转载] Redis集群搭建最佳实践

    转载自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool 要搭建Redis集群,首先得考虑下面的几个问 ...

  2. 分享知识-快乐自己:redis集群搭建

    Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...

  3. 25.redis集群搭建笔记

    ###Redis集群### 0.准备 软件: redis-3.0.0.gem redis-3.0.0.tar.gz#源码   1.安装ruby环境 redis基于ruby槽位计算,hash算法技术,k ...

  4. Redis 集群搭建详细指南

    先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...

  5. 二、redis集群搭建

    redis集群搭建 redis3.0后支持集群.集群中应该至少有三个节点,每个节点有一备份节点.需要6台服务器.搭建伪分布式,需要6个redis实例.搭建集群的步骤: 一.安装单机版redis 第一步 ...

  6. redis集群搭建及注意事项

    上一篇:redis的安装及注意事项 这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出 ...

  7. Linux Redis集群搭建与集群客户端实现(Python)

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  8. Linux Redis集群搭建与集群客户端实现

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  9. Redis集群搭建-韩国庆

    认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...

随机推荐

  1. hdoj-2066-一个人的旅行(迪杰斯特拉)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. JavaScript 实例 | w3cschool菜鸟教程

    JavaScript 实例 | w3cschool菜鸟教程 http://www.w3cschool.cc/js/js-examples.html

  3. JAVA 对象序列化(二)——Externalizable

    Java默认的序列化机制非常简单,而且序列化后的对象不需要再次调用构造器重新生成,但是在实际中,我们可以会希望对象的某一部分不需要被序列化,或者说一个对象被还原之后,其内部的某些子对象需要重新创建,从 ...

  4. C#编程(五十八)----------并行集合

    并行集合 对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行访问.经常要做的就是对一些队列进行加锁-解锁,然后执行类似插入,删除等等互斥操作. .NET4提供了一些封装好的支持并行操作数据 ...

  5. 批量生成protoBuf到cs文件

    color 0A && echo off rem protoc程序名set "PROTOC_EXE=protoc.exe"rem .proto文件名::set &q ...

  6. Codeforces Round #131 Div1 B

    Problem 给出Ai(i∈[0,9]).表示每一个数字至少须要出现多少次.问有多少个数满足下面三个条件:1. 数至多有N位:2. 数不含有前导0:3. 每一个数 i 出现的次数不少于Ai(mod ...

  7. 真爱如血第一季/全集True Blood迅雷下载

    第一季 True Blood Season 1 (2008)看点:该剧根据小说<南方吸血鬼>(Southern Vampire)改编,故事围绕路易斯安那州的吸血鬼和人类展开,当日本将人造血 ...

  8. Android之Android apk动态加载机制的研究

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/22597587 (来自singwhatiwanna的csdn博客) 背景 问题 ...

  9. HTML5 本地文件操作之FileSystemAPI实例(三)

    文件夹操作demo 1.读取根目录文件夹内容 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFi ...

  10. HTML5 本地文件操作之FileSystemAPI实例(二)

    文件操作实例整理二 1.删除文件.复制文件.移动文件 //获取请求权限 window.requestFileSystem = window.requestFileSystem || window.we ...