当前位置:网站首页>Redis(八)集群

Redis(八)集群

2022-08-09 07:55:00 谁是黄黄

前置:
为什么会选择集群:单个Redis的吞吐能力不能满足项目的需求。

一.集群原理

Redis 集群运行原理如下:

  1. 所有的 Redis 节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽,所有的节点直接会互相发消息确保对方是在线的。
  2. 一个节点的``失效确定(fail)是当超过半数的节点连接不到此节点时候才被认定为失效状态。
  3. 客户端与 Redis 节点直连,不需要中间 代理(proxy) 层
  4. 客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可,即连接任意一个节点都能够去操作整个集群
  5. Redis-cluster 把所有的物理节点映射到 [0-16383]哈希槽slot 上,cluster (簇)负责维护 node<->slot<->value。Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个key-value 时,Redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,Redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

在这里插入图片描述

二.集群投票流程

投票过程是集群中所有master参与,如果半数意思master节点与master节点通信超过cluster-node-timeout设置的时间,认为当前master节点挂掉

三.怎么判定节点是不可用的

1.如果集群任意master挂掉,且当前master没有slave集群进入fail状态,也可以理解成集群的slot映射【0-16383】不完整进入fail状态。
2.如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态,当集群不可用的时候,所有对集群操作都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

redis5之前,集群是通过Ruby环境去搭建集群

redis5之前,集群是通过Ruby环境去搭建的
Redis集群管理攻击redis-trib.rb依赖ruby环境,首先要安装ruby环境:安装ruby:

yum install ruby
yum install rubygems

这里浅提一下

集群搭建

第一步,设计集群

1.假设我的集群中一共有三个节点,每个节点一个主机一个从机,这样我一共需要 6 个 Redis 实例。
2.首先创建 redis-cluster 文件夹,在该文件夹下分别创建 7001、7002、7003、7004、7005、7006 文件夹,用来存放我的 Redis 配置文件,如下

第二步,配置节点

2.1 配置节点

在这里插入图片描述

1.直接:%s/6379/7001/g,把所有的6379端口配置替换成7001的
2.#bind 127.0.0.1
4.protected no

2.2 开启两个注释掉的配置

daemonize yes
cluster-enabled yes
在这里插入图片描述
配置主机密码:masterauth 123

在这里插入图片描述

第三步:开启所有节点

此时虽然开启了所有节点,但是这个了六个节点相互之间都是独立的,并没有建立成一个集群
在这里插入图片描述

第四步:联成一个集群

在这里插入图片描述

./src/redis-cli --cluster create --cluster-replicas 1 1.12.235.192:7001 1.12.235.192:7002 1.12.235.192:7003 1.12.235.192:7004 1.12.235.192:7005 1.12.235.192:7006 -a 123
就是靠这一行来配置集群的,记得把ip改成你的ip,如果端口号不同也要改
注意,replicas 后面的 1 表示每个主机都带有 1 个从机,执行过程如下:

另外,记得输入yes进行集群的配置

第五步:进入集群

-c 表示以集群的方式进入
在这里插入图片描述

查看集群中7001节点配置:

cluster info

在这里插入图片描述
在这里插入图片描述

第六步:添加主节点

在这里插入图片描述

./src/redis-cli -a 123 -p 7001 --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

添加节点成功:
但是新加进来的master没有哈希槽,我们要去手动的分配哈希槽,注意:新加进来的一定是master
在这里插入图片描述

分配哈希槽(重要):

#分配哈希槽 ,-p 第一个节点16, 127.0.0.1:要分配的槽
#分多少个? 自己选
#谁出槽? 选一个主节点出来,数据槽的来源
#怎么分 填all所有槽均匀给他分
done : 先填写槽id,可以是一个,可以是若干个,再填写done,若干个就是若干个均匀分配
src/redis-cli -a 123 -p 7016 --cluster reshard 127.0.0.1:7024

注意:哈希槽操作不仅仅可以添加,还可以删除,即
分多少个 ? 要删除的节点有多少个就分多少个
谁出槽? 要删除的槽
怎么分? done: 填自己的id,再填写done

在这里插入图片描述

后面的地址为任意一个节点地址,在分配的过程中,我们一共要输入如下几个参数:

第七步:添加从节点

#7023从7017 17id f9cf6b2d3615f12f3d5e77b3441e31cb14e4598c 24id
#添加从节点,24从17(主),
#前面怎么填都行,但是最后的id一定是主节点的id
src/redis-cli -a 123 -p 7016 --cluster add-node 1.12.235.192:7024 127.0.0.1:7017 --cluster-slave --cluster-master-id f9cf6b2d3615f12f3d5e77b3441e31cb14e4598c

在这里插入图片描述

第八步:删除节点

#删除节点,7016第一个id,最后填入要删除的id即5bc6aef904beee91ffd1ad017ee6168faf8c0ce0 为7024的id
src/redis-cli -a 123 -p 7016 --cluster del-node 127.0.0.1:7024 5bc6aef904beee91ffd1ad017ee6168faf8c0ce0

在这里插入图片描述
查看有无7024节点,明显已经被删除掉了
在这里插入图片描述

原网站

版权声明
本文为[谁是黄黄]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43189971/article/details/126226532