(转)高性能网站架构之缓存篇—Redis集群搭建
看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的实际应用中,使用redis肯定不会使用单机版,不光是redis不能使用单机版,其他的也不会使用,所以今天我们来说一下redis cluster的安装。
1. Redis Cluster的架构图。
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上(哈希槽),cluster 负责维护
Redis 集群中内置了 16384 个哈希槽,当需要在Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
2. redis-cluster投票:容错
(1)领着投票过程是集群中所有master参与,如果半数以上master节点与其中一个master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
ps:当集群不可用时,所有对集群的操作做都不可用,收到((error)CLUSTERDOWN The cluster is down)错误。
3. 安装环境
Redis Cluster的安装需要的环境我们需要准备好,最重要的最难解决的就是ruby环境,在这里,给大家一个连接,如至直接安装ruby,安装不上的话,大家可以参考这篇文章RubyGems镜像,淘宝的ruby镜像。他是没15分钟更新一次,所以跟国外的基本一样。
4. 集群搭建
本次为实验教程,所以在一台虚拟机中进行搭建,跟在多台真机上搭建其实没有什么区别,只要保证网络通信ok就可以了!
我们在几台机器上通过端口号的不同,搭建一个伪集群。在一个服务器上创建多个redis实例。端口号如下所示
主节点:127.0.0.1:7001 127.0.0.1:7002127.0.0.1:7003
从节点:127.0.0.1:7004127.0.0.1:7005127.0.0.1:7006
在/usr/local下创建redis-cluster目录,其下创建redis01、redis02。。redis06目录,如下:
然后我们将redis 安装到redis01中,安装完以后我们在将Redis编译目录中的redis。Conf文件复制到redis01目录下,就会看到在redis01目录下会有如下的文件。
然后我们将redis01文件夹的文件分别复制到redis02……redis06文件夹中。同时将redis源码目录src下的redis-trib.rb拷贝到redis-cluster目录下。
修改每个文件夹下的配置文件,有三点需要修改,每个配置文件都要配置自己的端口号,不能重复。
准备好以上工作以后,我们分别启动每个redis进行的实例。如果麻烦的话,可以自己写一个执行脚本。启动完毕以后我们输入命令ps ax|grep redis ,查看实例是否启动,出现如下所以图片,表示所有的实例都启动了。
实例启动完以后,我们要开始创建集群,在redis-cluter文件夹下执行如下命令。
- <span style="font-size:18px;"> ./redis-trib.rbcreate --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004127.0.0.1:7005 127.0.0.1:7006。
- lt;/span><p><span style="font-size:18px;">>>> Creating cluster</span></p><p><span style="font-size:18px;">Connecting to node 127.0.0.1:7001: OK</span></p><p><span style="font-size:18px;">Connecting to node 127.0.0.1:7002: OK</span></p><p><span style="font-size:18px;">Connecting to node 127.0.0.1:7003: OK</span></p><p><span style="font-size:18px;">Connecting to node 127.0.0.1:7004: OK</span></p><p><span style="font-size:18px;">Connecting to node 127.0.0.1:7005: OK</span></p><p><span style="font-size:18px;">Connecting to node 127.0.0.1:7006: OK</span></p><p><span style="font-size:18px;">>>> Performing hash slotsallocation on 6 nodes...</span></p><p><span style="font-size:18px;">Using 3 masters:</span></p><p><span style="font-size:18px;">127.0.0.1:7001</span></p><p><span style="font-size:18px;">127.0.0.1:7002</span></p><p><span style="font-size:18px;">127.0.0.1:7003</span></p><p><span style="font-size:18px;">Adding replica 127.0.0.1:7004 to 127.0.0.1:7001</span></p><p><span style="font-size:18px;">Adding replica 127.0.0.1:7005 to 127.0.0.1:7002</span></p><p><span style="font-size:18px;">Adding replica 127.0.0.1:7006 to 127.0.0.1:7003</span></p><p><span style="font-size:18px;">M: 5a8523db7e12ca600dc82901ced06741b3010076127.0.0.1:7001</span></p><p><span style="font-size:18px;"> slots:0-5460 (5461 slots) master</span></p><p><span style="font-size:18px;">M: bf6f0929044db485dea9b565bb51e0c917d20a53127.0.0.1:7002</span></p><p><span style="font-size:18px;"> slots:5461-10922 (5462 slots) master</span></p><p><span style="font-size:18px;">M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca127.0.0.1:7003</span></p><p><span style="font-size:18px;"> slots:10923-16383 (5461 slots) master</span></p><p><span style="font-size:18px;">S: 2a61b87b49e5b1c84092918fa2467dd70fec115f127.0.0.1:7004</span></p><p><span style="font-size:18px;"> replicates 5a8523db7e12ca600dc82901ced06741b3010076</span></p><p><span style="font-size:18px;">S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65127.0.0.1:7005</span></p><p><span style="font-size:18px;"> replicates bf6f0929044db485dea9b565bb51e0c917d20a53</span></p><p><span style="font-size:18px;">S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632127.0.0.1:7006</span></p><p><span style="font-size:18px;"> replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca</span></p><p><span style="font-size:18px;">Can I set the above configuration? (type'yes' to accept): <strong><span style="color:lime;">yes</span></strong></span></p><p><span style="font-size:18px;">>>> Nodes configuration updated</span></p><p><span style="font-size:18px;">>>> Assign a different configepoch to each node</span></p><p><span style="font-size:18px;">>>> Sending CLUSTER MEET messagesto join the cluster</span></p><p><span style="font-size:18px;">Waiting for the cluster to join.....</span></p><p><span style="font-size:18px;">>>> Performing Cluster Check(using node 127.0.0.1:7001)</span></p><p><span style="font-size:18px;">M: 5a8523db7e12ca600dc82901ced06741b3010076127.0.0.1:7001</span></p><p><span style="font-size:18px;"> slots:0-5460 (5461 slots) master</span></p><p><span style="font-size:18px;">M: bf6f0929044db485dea9b565bb51e0c917d20a53127.0.0.1:7002</span></p><p><span style="font-size:18px;"> slots:5461-10922 (5462 slots) master</span></p><p><span style="font-size:18px;">M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca127.0.0.1:7003</span></p><p><span style="font-size:18px;"> slots:10923-16383 (5461 slots) master</span></p><p><span style="font-size:18px;">M: 2a61b87b49e5b1c84092918fa2467dd70fec115f127.0.0.1:7004</span></p><p><span style="font-size:18px;"> slots: (0 slots) master</span></p><p><span style="font-size:18px;"> replicates 5a8523db7e12ca600dc82901ced06741b3010076</span></p><p><span style="font-size:18px;">M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65127.0.0.1:7005</span></p><p><span style="font-size:18px;"> slots: (0 slots) master</span></p><p><span style="font-size:18px;"> replicates bf6f0929044db485dea9b565bb51e0c917d20a53</span></p><p><span style="font-size:18px;">M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632127.0.0.1:7006</span></p><p><span style="font-size:18px;"> slots: (0 slots) master</span></p><p><span style="font-size:18px;"> replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca</span></p><p><span style="font-size:18px;">[OK] All nodes agree about slotsconfiguration.</span></p><p><span style="font-size:18px;">>>> Check for open slots...</span></p><p><span style="font-size:18px;">>>> Check slots coverage...</span></p><p><span style="font-size:18px;">[OK] All 16384 slots covered.</span></p>
这样就表示我们的集群创建成功了!
5. 集群测试
我们输入redis01/redis-cli -h 127.0.0.1 -p 7002–c命令后,切忌要加入-c,否则我们进入的不是集群环境。进入客户端以后,我们输入set a 100 发现他会进行跳转,这就是因为他经过计算以后,要存储100的hash槽在7003 实例上。这样就表示我们的集群成功了!
关闭redis集群不能直接kill掉进程,或者关机,我们要通过命令redis01/redis-cli -p 7001 shutdown进行关闭,这样在关闭之前,数据才能够进行保存。
(转)高性能网站架构之缓存篇—Redis集群搭建的更多相关文章
- (转)高性能网站架构之缓存篇—Redis集群增删节点
标签: 高性能架构集群缓存redis 上一篇文章,我们搭建了Redis-cluster集群,这篇博客跟大家讲一下如何在一个运行的集群上增加节点或者删除节点. Redis集群添加节点 首先我们要新建立一 ...
- 架构师之路-redis集群解析
引子 上篇<架构师之路-https底层原理>里我提到了上面的整体视图,文章也介绍了想要真正能在工作中及时正确解决问题的基本功:原理理解透彻.今天以redis集群解析为例介绍一个及时敏锐的发 ...
- Redis 集群搭建详细指南
先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...
- [转载] Redis集群搭建最佳实践
转载自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool 要搭建Redis集群,首先得考虑下面的几个问 ...
- redis 集群搭建: redis-cluster
前言 redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧. 那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢? 正 ...
- Redis集群搭建最佳实践
要搭建Redis集群.首先得考虑以下的几个问题; Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群? Redis集群搭建的目的事实上也就是集群搭建的目的.全部的集群主要都是为了解决一个 ...
- redis集群搭建及注意事项
上一篇:redis的安装及注意事项 这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出 ...
- Redis集群搭建-韩国庆
认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...
- 分享知识-快乐自己:redis集群搭建
Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...
随机推荐
- 再谈Jquery Ajax方法传递到action 【转载】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/984466 之 ...
- 不解压直接查看tar包内容
. file.tar.gz gzip -dc file.tar.gz | tar tvf - . file.tar.bz2 bzip2 -dc file.tar.bz2 |tar tvf - . fi ...
- django学习<一>:安装
这两天打算摸索下和python相关的东西,然后正好小伙伴有个关于网站的任务,就怀着好奇的心态了解了下,然后就很自然地开始涉及django的问题. 首先就是django安装的问题,想不到第一步就出问题了 ...
- mobile touch事件
touch.js 众所周知,mobile与pc 前端开发的不同中,有一点就是事件的不同,mobile上有touchstart,touchmove,touchend等,而pc上用最多的应该还是我们的cl ...
- 摄像头/光驱故障:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码 19)
原因:出现这条提示一般都是因为注册表错误引起的,重装驱动或应用程序无法解决. 设备管理器中相关设备-故障如图: 以下方法可以解决问题: 1.在任务栏上点“开始”菜单-“运行”,输入”regedit“ ...
- Todd's Matlab讲义第3讲:牛顿法和for循环
方程数值求解 下面几讲,我们将聚集如下方程的解法: \begin{equation} f(x)=0 \tag{3.1}\label{3.1} \end{equation} 在微积分课程中,我们知道,许 ...
- UML之用例图
用例图概要 ²用例图是被称为参与者的外部用户所能观察到的系统功能的模型图. (<UML参考手册>) ²用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行 (或称为 ...
- ZOJ 3201 Tree of Tree
树形DP.... Tree of Tree Time Limit: 1 Second Memory Limit: 32768 KB You're given a tree with weig ...
- dede自定义表单增加添加时间怎么弄
我们在用dedecms添加自定义表单时有时想要设置一个用户提交的时间,方便查询,比如我们的客服人员查询昨天晚上下班后有哪些订单是刚生成的,比较好查看,如下图所示.那么,dedecms自定义表单增加添加 ...
- androids-addjavascriptinterface-equivalent-in-ios
http://stackoverflow.com/questions/7103159/androids-addjavascriptinterface-equivalent-in-ios