redis集群搭建

目录

一、Redis Cluster(Redis集群)简介

二、集群搭建需要的环境 

三、集群搭建具体步骤如下(注意要关闭防火墙) 

四 主从扩容

主从缩容


一、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个节点

二、集群搭建需要的环境 

  • Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
  • 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。

三、集群搭建具体步骤如下(注意要关闭防火墙) 

3.1.在usr/local目录下新建redis-cluster目录,用于存放集群节点 

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

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

 

 3-3. 删除redis01目录下的快照文件dump.rdb,并且修改该目录下的redis.conf文件,具体修改两处地方:一是端口号修改为7001,二是开启集群创建模式,打开注释即可。分别如下图所示:
删除dump.rdb文件

 

  3-4.将redis-cluster/redis01文件复制5份到redis-cluster目录下(redis02-redis06),创建6个redis实例,模拟Redis集群的6个节点。然后将其余5个文件下的redis.conf里面的端口号分别修改为7002-7006。分别如下图所示:
 

 

 

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

 cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

3-6.创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:

chmod +x start-all.sh

  3-7.执行start-all.sh脚本,启动6个redis节点

 

 3-8.ok,至此6个redis节点启动成功,接下来正式开启搭建集群,以上都是准备条件。大家不要觉得图片多看起来冗长所以觉得麻烦,其实以上步骤也就一句话的事情:创建6个redis实例(6个节点)并启动。

3-9.然后使用该脚本文件搭建集群,指令如下:

redis-cli --cluster create 192.168.80.130:7001 192.168.80.130:7002 192.168.80.130:7003 192.168.80.130:7004 192.168.80.130:7005 192.168.80.130:7006 --cluster-replicas 1

 进入某个redis客户端

redis-cli -h 192.168.80.130 -p 7001 -c

 注意:一定要加上-c,不然节点之间是无法自动跳转的

 使用命令查看集群信息

cluster info    #查看当前集群信息
cluster nodes    #查看集群有多少节点
cluster slots    #cluser查看每个主节点管理的slot和从节点
redis-cli --cluster check 192.168.80.130:7001    #检查集群状况

cluster info 

cluster nodes 

cluster slots 

 

四 主从扩容

新建 并启动7007 7008 节点

先复制,并修改配置文件 复制方式和上面相同

启动服务器

 将新增的7007作为master节点加入集群

redis-cli --cluster add-node 自己实际IP地址:7007 自己实际IP地址:7001

 

 检查集群状态

 从新分配槽号

redis-cli --cluster reshard 192.168.80.130:7001

 

 

 

输入all为从所有主节点(7001,7002,7003)中分别抽取相应的槽数指定到新节点中,抽取的总槽数为4096个

也可以通过某个id进行分配(指定的id进行槽位的分配)填入节点id done 进行槽位分配

后面的步骤输入yes即可

这里就重新分配成功了

重新查看集群状态

现在为7007节点分配从节点

命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

例如:

redis-cli --cluster add-node 192.168.80.130:7008 192.168.80.130:7007 --cluster-slave --cluster-master-id  b89abb6f1f3efb29d25d985f090f7903a85ec16d

 

 重新查看集群状态

 至此,集群扩容成功。

五 主从缩容

目的:让7007和7008下线

先删从节点,在删主节点

检查集群情况,获得7008的节点id

 命令:redis-cli --cluster del-node ip:从机端口 从机7008节点ID

 检查集群状态

 

 从节点7008被删除

重新分配槽号,先将7007的槽号清空,清空后将7007的槽号分配给7001

 

 重新查看集群状态

 删除7007节点

 

 再次查看集群状态

 总结

搭建集群 一主一从

redis-cli --cluster create 192.168.80.130:7001 192.168.80.130:7002 192.168.80.130:7003 192.168.80.130:7004 192.168.80.130:7005 192.168.80.130:7006 --cluster-replicas 1

检查集群状态

redis-cli --cluster check 192.168.80.130:7001

进入某个客户端

redis-cli -h 192.168.80.130 -p 7001 -c

重新分配哈希槽

redis-cli --cluster reshard 192.168.80.130:7001

向集群添加节点(7007添加到7001)

redis-cli --cluster add-node 192.168.80.130:7007 192.168.80.130:7001

分配从节点(7007为主节点,7008为从节点)

redis-cli --cluster add-node 192.168.80.130:7008 192.168.80.130:7007 --cluster-slave --cluster-master-id  b89abb6f1f3efb29d25d985f090f7903a85ec16d(主节点id7007)

删除节点

redis-cli --cluster del-node 192.168.80.130:7008 丛机节点id

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值