Redis集群的搭建(具体步骤)

Redis集群搭建

Redis的单机版安装:https://blog.csdn.net/qq_43412289/article/details/99815373

Redis的window版安装:https://blog.csdn.net/qq_43412289/article/details/99817555

一、Redis Cluster(Redis集群)简介

  • redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;
  • redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
  • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
  • 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
  • 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
  • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
  • 综上所述,每个Redis集群理论上最多可以有16384个节点。

二、集群搭建需要的环境
2.1 Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
2.2 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
2.3 安装ruby
三、集群搭建具体步骤如下(注意要关闭防火墙)
3.1 在usr/local目录下新建redis-cluster目录,用于存放集群节点


3.2 把redis目录下的bin目录下的所有文件复制到/usr/local/redis-cluster/redis01目录下,不用担心这里没有redis01目录,会自动创建的。操作命令如下(注意当前所在路径):

cp -r redis/bin/ redis-cluster/redis01

 依次复制5份同样的操作,修改端口号,打开集群模式

cp -r  redis01/ redis02

cp -r  redis01/ redis03

cp -r  redis01/ redis04

cp -r  redis01/ redis05

cp -r  redis01/ redis06

3.3 删除redis01目录下的快照文件dump.rdb,并且修改该目录下的redis.cnf文件,

具体修改两处地方:一是端口号修改为7001,二是开启集群创建模式,打开注释即可。分别如下图所示:
删除dump.rdb文件 必须得删除不然搭建集群的时候会报错

 

修改配置文件 redis.conf文件里的端口号分别为7001,7002,7003,7004,7005,7006 默认是6379

将cluster-enabled yes 的注释打开

3.5 接着启动所有redis节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动redis节点的脚本文件,命令为start-all.sh,文件内容如下:

#!/bin/bash
for I in {01,02,03,04,05,06}
do
echo "start redis$I redis"
cd /usr/local/redis-cluster/redis$I
./redis-server redis.conf
echo "redis$I redis started"
done

设置关闭命令 vim stop-all.sh 

#!/bin/bash
for I in {01,02,03,04,05,06}
do
echo "stop redis$I redis"
cd /usr/local/redis-cluster/redis$I
./redis-cli -p 70$I shutdown
echo "redis$I redis stoped"
done

创建脚本完毕之后,需要修改脚本的权限,(权限修改完之后会变成绿色)使它能够执行命令:

chmod +x start-all.sh

chmod +x stop-all.sh

3.7 执行start-all.sh脚本,启动6个redis节点,可以通过命令查看进程是否开启存在

ps -ef|grep redis

或者

ps -aux|grep redis

 3.8 要搭建集群的话,需要使用一个工具(脚本文件),这个工具在redis解压文件的源代码里。

linux连网设置:https://blog.csdn.net/qq_43412289/article/details/99815036

因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,就相当于java语言的运行需要在jvm上。所以需要安装ruby,指令如下:

yum install ruby

yum install rubygems

 然后需要把ruby相关的包安装到服务器,我这里用的是redis-3.0.0.gem,大家需要注意的是:redis的版本和ruby包的版本最好保持一致。
将Ruby包安装到服务器:需要先下载再安装,如图

下载地址:链接: https://pan.baidu.com/s/17mhKew7Z-hF7PozKjUMSpg 提取码: afh7

安装命令如下:

gem install redis-3.0.0.gem

 

3.9 上一步中已经把ruby工具所需要的运行环境和ruby包安装好了,接下来需要把这个ruby脚本工具复制到usr/local/redis-cluster目录下。那么这个ruby脚本工具在哪里呢?之前提到过,在redis解压文件的源代码里,即redis/src目录下的redis-trib.rb文件。

3.10 将该ruby工具(redis-trib.rb)复制到redis-cluster目录下,指令如下:

cp redis-trib.rb /usr/local/redis-cluster

然后使用该脚本文件搭建集群,运行 redis-trib.rb 脚本指令如下:

./redis-trib.rb create --replicas 1 192.168.81.142:7001 192.168.81.142:7002

192.168.81.142:7003 192.168.81.142:7004 192.168.81.142:7005 192.168.81.142:7006

注意:此处大家应该根据自己的服务器ip输入对应的ip地址!

中途有个地方需要手动输入yes即可

至此,Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。

3.11 最后连接集群节点,连接任意一个即可:

随便找一台机器连接即可,但是要加-c 参数 代表连接的是集群

redis01/redis-cli -p 7001 -c

注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:

如果没有再添加数据报错出现 (error) CLUSTERDOWN The cluster is down

解决方法:https://blog.csdn.net/qq_43412289/article/details/99761556

原因:没有删除dump.rdb文件

redis集群基本命令:


1.查看当前集群信息

cluster info

2.查看集群里有多少个节点

cluster nodes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值