redis 集群搭建: redis-cluster

前言

  redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧.

  那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢?

  正常思维, 都是, 一台电脑不够, 那我再加一台电脑嘛, 不就够了.

redis集群架构图

  

每一台redis server之间都是保持通讯的. 也就是说, 如果 server1 上面没有要查找的值, 会跳转到别的服务器上查找.

注: 

  如果其中有一个服务器挂了, 如 server4 挂了. redis是怎么处理的呢?

  redis集群中, 有一个投票机制, 当server4挂了之后, 会由server1, server2, server3 共同投票, 因为他们都与server4有通讯关系, 当大家都认定server4 确实挂了之后, 大家的投票结果就是, 大家可以休息了, 下班了.

  那很明显, 这里有不合理性. 那怎么解决呢?

  在集群中, 为了保证一台机子挂了之后, 系统任然正常运行, 一个常用的方法是加备份机.(备胎)

  redis中也是这样, 如果给每一台机子上加一台备份机, 那么大家投票认为server4挂了之后, 备胎就有福了. 可以取而代之. 这样就可以保证, 系统还可以正常运行.

搭建集群

根据上面的架构图, 以及投票机制和备胎机制, 一个合格的redis集群, 应该是要6台电脑. 作为我个人来讲, 我去哪里弄6台电脑啊, 装6台虚拟机还差不多. 但是同时跑6台虚拟机, 你累不累啊?

既然没有那么多电脑, 也不想装那么多虚拟机, 那么久来个伪集群吧. 到生产环境中, 需要多台电脑来搭建集群的时候, 步骤是一样的. 结果其实也是一样的, 没差, 甚至更简单点.

一. 搭建多个redis

  接着前面的篇幅中的redis文件.

1. 拷贝创建redis-cluster文件夹

  

2. 进入redis-cluster, 将bin文件重命名

  

3. 对redis1下的redis.conf文件进行端口和集群配置

vim ./redis1/redis.conf

  3.1 端口修改

  

  3.2 允许集成开关

  

  这里默认是被注释掉的. 只要打开注释就可以了

4. 将redis1复制5份出来, 分别命名为redis2,redis3, redis4, redis5, redis6

  

5. 修改redis2~redis6的端口号, 分别为7002~7006. 修改方式与3.1一样的.

6. 创建一把启动脚本. vim start-all.sh 

cd /usr/local/redis-cluster/redis1
./redis-server redis.conf
cd ../redis2
./redis-server redis.conf
cd ../redis3
./redis-server redis.conf
cd ../redis4
./redis-server redis.conf
cd ../redis5
./redis-server redis.conf
cd ../redis6
./redis-server redis.conf

7. 修改start-all.sh的权限

  如果不改权限, 直接运行, 是跑不起来的

[[email protected] redis-cluster]# chmod u+x start-all.sh

  修改完之后, 就可以牵出来溜一下, 看看是否都能跑起来

  

  通过ps看一下

  

8. 创建一把结束脚本 vim shutdown-all.sh

  有始有终, 一把开始, 当然也需要一把结束, 总不能一个一个去结束吧, 太麻烦了

cd /usr/local/redis-cluster/redis1
./redis-cli -p 7001 shutdown
cd ../redis2
./redis-cli -p 7002 shutdown
cd ../redis3
./redis-cli -p 7003 shutdown
cd ../redis4
./redis-cli -p 7004 shutdown
cd ../redis5
./redis-cli -p 7005 shutdown
cd ../redis6
./redis-cli -p 7006 shutdown

  同样的, 这个脚本也需要修改访问权限, 与上面是一样的.

chmod u+x shutdown-all.sh

  跑一下这个脚本看看

[[email protected] redis-cluster]# ./shutdown-all.sh 

  这时候, 再通过ps看看

  

  都关掉了.

 

二. 集群

注:

  在开始搭建之前, 有一些概念, 要搞清楚.

  在redis-cluster中, 吧所有的物理节点都映射到[0-16383]个slot(槽)上, 由cluster负责维护.

  那具体是怎么分配这些槽的呢?

  当有一个数据进来需要进行缓存时, redis会先对key使用crc16算法, 计算出一个结果, 然后对16384进行取余, 这样, 每个key都会得到一个在0-16383之间的数, 这个数, 就是他的槽值. 根据这个数, 将数据存入槽所在的电脑里面.

  也就是说, 如果有3台电脑A,B,C, A->[0, 5000], B->[5001, 10000], C->[10001, 16383]. 进来一个值, key计算最后结果是5005, 则会将这个值存入B电脑里面. 再进来一个值, key计算是10010, 则会存入C电脑中.

  这个槽点, 并不是key的个数, 这里需要注意以下. 理论来说, 可以进行16284台电脑的集群, 每台电脑分一个槽. 但是每个电脑, 肯定会存一堆值.

1. 拷贝redis-trib.rb文件到redis-cluster中

[[email protected] redis-cluster]# cd /usr/java/redis-4.0.6/src/
[[email protected] src]# cp redis-trib.rb /usr/local/redis-cluster/

  

2. 安装ruby

  上面拷贝的文件, 是rb后缀的, 从这个后缀, 应该能看出为啥要安装ruby吧

yum install ruby
yum install rubygems

  安装完成之后, 还需要安装一个 gem

gem install redis --version 3.0.0

3. 使用ruby脚本搭建集群

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

  在搭建集群的时候, 有可能会报一个错误

  

  这个是为啥呢?

  在集群的时候, 需要保证各redis都是空的, 里面不存数据的. 所以, 这里就需要我们手动来清一下数据.

  在将 各 redis 启动之后, 执行flushdb命令

[[email protected] redis-cluster]# ./redis1/redis-cli -h 127.0.0.1 -p 7001
127.0.0.1:7001> flushdb
OK
127.0.0.1:7001>
[root@localhost redis-cluster]# ./redis1/redis-cli -h 127.0.0.1 -p 7002
127.0.0.1:7002> flushdb
OK
127.0.0.1:7002>
[root@localhost redis-cluster]# ./redis1/redis-cli -h 127.0.0.1 -p 7003
127.0.0.1:7003> flushdb
OK
127.0.0.1:7003>
[root@localhost redis-cluster]# ./redis1/redis-cli -h 127.0.0.1 -p 7004
127.0.0.1:7004> flushdb
OK
127.0.0.1:7004>
[root@localhost redis-cluster]# ./redis1/redis-cli -h 127.0.0.1 -p 7005
127.0.0.1:7005> flushdb
OK
127.0.0.1:7005>
[root@localhost redis-cluster]# ./redis1/redis-cli -h 127.0.0.1 -p 7006
127.0.0.1:7006> flushdb
OK
127.0.0.1:7006> 

  如果清除之后还不行, 则删除

  目录中的dum.rdb, nodes.conf, appendonly.aof 文件, 每一个redis都要删.

  做完了这些, 一件很重要的事情别忘了:  重启以下redis , 否则, 在集群的时候, 还是会报错的

  

4. 使用

  通过以上的步骤, 就将redis集群搭建好了, 接下来, 就是来验证一番.

  连接集群的时候和连接单机的时候, 稍有不同, 需要在连接指令后面加上 -c

[[email protected] redis-cluster]# ./redis1/redis-cli -p 7001 -c

  

  在存储的时候, 会根据key计算, 找到存放的电脑, 跳转过去存放

  那现在我存放了三个值, 分别在7002, 7003里面, 7001里面没有存值, 还是看的出来的. 现在我通过7001来取一下, 看看可能取出来

  

  在我取的时候, 也是会跳转到相应的存储服务器取数据.

原文地址:https://www.cnblogs.com/elvinle/p/8371690.html

时间: 2024-12-20 14:47:58

redis 集群搭建: redis-cluster的相关文章

25.redis集群搭建笔记

###Redis集群### 0.准备 软件: redis-3.0.0.gem redis-3.0.0.tar.gz#源码 1.安装ruby环境 redis基于ruby槽位计算,hash算法技术,key是用hash存在的,key分布在数组的槽位内(16384个槽位),下标从0到2^N,并且采用链表解决冲突. yum install -y ruby yum install -y rubygems 2.安装ruby和redis的接口程序 cp redis-3.0.0.gem /usr/local/ g

Redis集群搭建

Redis集群是一个提供在多个Redis节点间共享数据的程序集. Redis集群中不支持处理多个keys的命令. Redis集群通过分区来提供一定程度的可用性.在某个节点宕机或者不可用的时候可以继续处理命令. Redis集群数据分片 在Redis集群中,使用数据分片(sharding)而不是一致性hash(consistency hashing)来实现,一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都存在这些哈希槽中的某一个,通过CRC16校验后对16384取模

redis集群搭建及注意事项

上一篇:redis的安装及注意事项 这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出了6台机器了,然后在以这6个实例组建redis集群就可以了. 前提:redis已经安装,目录为/usr/local/redis-4.0.1 redis集群是用的ruby脚本,所以要想执行该脚本,需要ruby环境..对应redis的源码src目录下的redis-trib.rb,redis-trib.r

Redis集群搭建与简单使用【转】

Redis集群搭建与简单使用 安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. 两台虚拟机都是 oracle linux 6.6 ,一台(IP:192.168.31.245),一台(IP:192.168.31.210) . 安装过程 1. 下载并解压 cd /root/software wget http://download.redis.io/releases/redis-3.2.4.t

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

转载自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool 要搭建Redis集群,首先得考虑下面的几个问题; Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群? Redis集群搭建的目的其实也就是集群搭建的目的,所有的集群主要都是为了解决一个问题,横向扩展. 在集群的概念出现之前,我们使用的硬件资源都是纵向扩展的,但是纵向扩展很快就会达到一个极限,单台机器的Cpu的处理速度,内存大小,

Redis集群搭建最佳实践

要搭建Redis集群,首先得考虑下面的几个问题; Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群? Redis集群搭建的目的其实也就是集群搭建的目的,所有的集群主要都是为了解决一个问题,横向扩展. 在集群的概念出现之前,我们使用的硬件资源都是纵向扩展的,但是纵向扩展很快就会达到一个极限,单台机器的Cpu的处理速度,内存大 小,硬盘大小没办法一直满足需求,而且机器纵向扩展的成本是相当高的.集群的出现就是能够让多台机器像一台机器一样工作,实现了资源的横向扩展. Redis是内存型数

转:redis集群搭建及使用

转自:http://www.cnblogs.com/huangxincheng/p/5615037.html 现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境 曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这些都是我们及其不能容忍的,第一个必须要做到高可靠,其次才是高性能,好了,下面我来 逐一搭建一下. 一:Redis集群搭建 1. 下载 首先去官网下载较新的3.2.0版本,下载方式还是

Redis 集群搭建详细指南

先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司!为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛,「大」总有大的好.当然,如果你要有能力找一个胸大个子高就更完美了. Redis 集群简介 Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存.Redis 在3.0版本前只支持单实例模式,虽然支持主从模式.哨兵模式部署来解决单点故障,但是现在互

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

我们要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群. 1.启动Redis多个实例 我们在Redis安装目录下创建目录cluster,并编写7000.conf~7005.conf 6个配置文件,这6个配置文件用来启动6个实例,后面将使用这6个实例组成集群. 以7000.conf为例,配置文件需要填写如下几项. port 7000 //端口7000,7002,7003 bind 10.93.84.53 //默认ip为127.0.0.1 需要改为其他节点机器可访