转载自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool

要搭建Redis集群,首先得考虑下面的几个问题;
 
Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群?
 
Redis集群搭建的目的其实也就是集群搭建的目的,所有的集群主要都是为了解决一个问题,横向扩展。
在集群的概念出现之前,我们使用的硬件资源都是纵向扩展的,但是纵向扩展很快就会达到一个极限,单台机器的Cpu的处理速度,内存大小,硬盘大小没办法一直满足需求,而且机器纵向扩展的成本是相当高的。集群的出现就是能够让多台机器像一台机器一样工作,实现了资源的横向扩展。
 
Redis是内存型数据库,当我们要存储的数据达到一定程度时,单台机器的内存满足不了我们的需求,搭建集群则是一种很好的解决方案。
 
那么如何能够让多台机器上的Redis能够像一台机器上的Redis一样工作呢?
 
需要解决以下三个问题;
1.对外暴露一个访问节点
2.请求分片(sharding)
3.分片要合理(分片均匀,相同的请求要分配到同样的redis节点)
 
首先,要对外暴露一个访问节点,后面可能有多台redis再工作;我们很容易想到的就是代理(Proxy),对于客户端只需要知道代理,通过代理来和后台的多台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以及端口号,是暴露给客户端使用的;hash: 表示使用哪种hash方法,twemproxy提供了多种方式,具体可以看github介绍;distribution表示分配模式,有三种选择:ketama, modula,random;auto_reject_hosts: 就是上面所说的,自动移除失败的节点;redis: 表示使用的是redis集群,剩下的配置很简单就不一一介绍了......
通过如此简单的配置之后,执行./src/nutcracker -c ./conf/nutcracker.test.yml(这里使用自己的安装路径和配置文件路径) 就启动了twemproxy, 客户端只需要通过redis-cli就能连接上proxy,使用方法和redis完全一样(但不是所有命令都支持)。 这样redis的集群就搭好了,是不是简单到爆?不过不要开心得太早,twemproxy也有它的不足之处。 1.不支持事务以及批量操作;
2.相较于直接访问redis性能有所损耗;
虽然twemproxy有上述缺点,单相较于起带来的好处简直不值一提!但也说明它不适用于所有情况。

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

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

  1. Redis集群搭建最佳实践

    要搭建Redis集群.首先得考虑以下的几个问题; Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群? 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. 调用js中文乱码

    JS文件是GB2312编码的,如果需要js中的中文不出现乱码,在UTF-8编码中调用语句为: <script src="myjs001.js" charset="g ...

  2. Access-Control-Allow-Origin与Ajax跨域

    问题 在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题.另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,才能让前者成功 ...

  3. bzoj1812 [Ioi2005]riv

    riv 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--名叫B ...

  4. Java数据结构和算法总结-字符串及高频面试题算法

    前言:周末闲来无事,在七月在线上看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说 ...

  5. 【NOIP2016提高组】 Day1 T3 换教室

    题目链接:https://www.luogu.org/problemnew/show/P1850 此题正解为dp. 我们先用floyd处理出任意两个教室之间的距离,用dis[i][j]表示. 用f[i ...

  6. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  7. LINUX 笔记-iproute2 命令

    一.IP 地址管理 1.显示 IP 地址 ip addr show [dev eth0] 2.增加删除 IP 地址 ip addr add 192.0.2.1/24 dev eth0 ip addr ...

  8. 如何透彻分析Java开发人员

    第一部分:对于参加工作一年以内的同学.恭喜你,这个时候,你已经拥有了一份Java的工作. 这个阶段是你成长极快的阶段,而且你可能会经常加班.但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行 ...

  9. mysql安装教程以及配置快捷方式

    1.首先双击exe 3.Next 安装过程省略.... Win+r 然后输入:cmd 打开dos窗口后: 输入: mysql -uroot -p你设置的密码 案例:mysql -uroot -proo ...

  10. 【工具】Spring项目转化Spring Web项目插件

    前言 源于前一篇博文中提到,将Spring项目转化为Spring Web项目,发现添加项目文件和修改pom.xml文件等都是手动完成的,心想着开发一个Idea插件来自动化完成上面的过程,实现一键转化. ...