博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis集群搭建最佳实践
阅读量:2389 次
发布时间:2019-05-10

本文共 2470 字,大约阅读时间需要 8 分钟。

要搭建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节点,这样就保证了一致性;详细介绍可以参考: 。
如果让我来实现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的详细介绍可以看看这篇文章:;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后,大家会发现它是现在最好的选择!

转载地址:http://astab.baihongyu.com/

你可能感兴趣的文章
Flash Builder 4字体设置
查看>>
Actionscript 3.0 笔记一
查看>>
图像处理库OpenCV参考网址
查看>>
dllimport与dllexport作用与区别
查看>>
OpenGL坐标系
查看>>
C++用new和不用new创建类对象区别
查看>>
C++ C# JAVA 创建对象
查看>>
齐次坐标的理解
查看>>
QT配置文件
查看>>
QT .pro配置文件2
查看>>
Qt 模态与非模态对话框
查看>>
Qt C++中的关键字explicit .
查看>>
qtcreator中常用快捷键
查看>>
PowerDesigner 简介
查看>>
VS2008快捷键大全
查看>>
Access 操作或事件已被禁用模式阻止
查看>>
C# 控件置于最顶层、最底层
查看>>
几个常见的压缩算法
查看>>
浮点数的存储
查看>>
点到线段的距离
查看>>