Redis集群搭建

3. Redis集群

  • Redis集群解决了数据备份问题
  • Redis集群解决了故障转移问题
  • Redis集群解决了单节点并发压力问题和单节点内存和磁盘物理上限问题

3.1 集群

Redis在3.0后开始支持Cluster(集群)模式,目前redis的集群支持节点的自动发现,支持slave-master选举和容错,支持在线分片(sharding shard )等特性。reshard

3.2 集群架构图

在这里插入图片描述

3.3 集群细节

- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
- 节点的fail(宕机)是通过集群中超过半数的节点检测失效时才生效(建议集群结点的个数为奇数个). 
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
- redis-cluster把所有的物理节点(对外提供服务的节点)映射到[0-16383]slot(槽)上,cluster(集群)负责
  护node<->slot<->value,节点维护槽,槽维护value,每个结点必须有哈希槽
- 在新加入master时会让其他master拿出自己的槽分配一些给新的槽

在这里插入图片描述

  • 当master结点创建的时候,master结点必须拥有一个槽,通过槽去管理数据
  • Redis集群管理物理(master)结点,物理节点管理槽,槽管理数据
  • 无论客户端连接的是哪一个master,在客户端存储数据的过程中会对key进行CRC16算法定位到这个数据存储到哪个槽,所以也可能会重定向到其他master

3.4 集群搭建

  1. 环境准备

在Linux中运行下面的这条命令安装ruby

yum install ruby

将网盘中的 redis-3.2.1.gem 下载下来上传到Linux中,之后使用下面命令下载,下载完之后 redis-3.2.1.gem 就可以删除了。

链接:百度网盘
提取码:5rjc

gem install redis-3.2.1.gem

具体操作

我们来演示一下

在这里插入图片描述

我们使用了 SecureCRT 远程连接工具来方便操作,我们按 Alt + p 打开sftp窗口,之后将下载下来的

redis-3.2.1.gem 拖进到 sftp 窗口之中就上传完成了。

在这里插入图片描述

之后在 redis-3.2.1.gem 文件同目录下运行,运行之后删除 redis-3.2.1.gem 就好了

gem install redis-3.2.1.gem

rm redis-3.2.1.gem

在这里插入图片描述

  1. 创建结点

创建一个redis集群至少需要6个结点,但是为了方便测试,比如动态的添加结点,所以我们需要创建7个结点,因为只有一台机器,所以我们启动多个redis服务但是配置文件不同就可以模拟多个结点了

我们让这6个结点的端口号分别设为 7000 7001 7002 7003 7004 7005

创建7个文件,然后分别将还没有修改即默认的配置文件复制过去,接下来去修改

要搭建集群的话,配置文件需要满足下列条件

注意:首先一定要开启端口号

# 修改不同目录配置文件
- port 	7000 .....                		 //修改端口
- bind  0.0.0.0                   		 //开启远程连接
- daemonize yes												 //开启守护线程 [建议开启]
- appendonly  yes   		               //开启AOF持久化
- cluster-enabled  yes 	        			 //开启集群模式
- cluster-config-file  nodes-端口号.conf //集群节点配置文件
- cluster-node-timeout  5000      	   //集群节点超时时间,设置的短一点,方便日后slave更快选举

为了方便,已经将6个结点的配置文件设置好,使用时直接从网盘下载,然后上传到Linux就可以用了

链接:百度网盘
提取码:jim0

不过为了加深印象,我们这里来演示一下端口7000的结点的配置文件的如何修改

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 启动redis服务

启动 7个redis服务,之后查看redis进程查看7个redis服务是否启动成功

# 进入 /usr/redis/bin
cd /usr/redis/bin
# 运行7个redis服务
./redis-server  /root/7000/redis.conf
./redis-server  /root/7001/redis.conf
./redis-server  /root/7002/redis.conf
./redis-server  /root/7003/redis.conf
./redis-server  /root/7004/redis.conf
./redis-server  /root/7005/redis.conf
./redis-server  /root/7006/redis.conf
./redis-server  /root/7007/redis.conf
# 查看redis进程
ps aux|grep redis

在这里插入图片描述

  1. 创建集群
# 复制集群操作脚本到/usr/redis/bin目录下
cp /root/redis-4.0.10/src/redis-trib.rb /usr/redis/bin

# 在/usr/redis/bin目录下运行redis-trib.rb脚本创建集群,运行时后面要写上所有结点ip和端口

./redis-trib.rb create --replicas 1 192.168.72.130:7000 192.168.72.130:7001 192.168.72.130:7002 192.168.72.130:7003 192.168.72.130:7004 192.168.72.130:7005

上面的1代表指定每个物理节点(master)有1个副本结点,会把前三台机器作为master结点,后三台机器作为slave
前三个master永远不会变,如果启动后输入no,会重新规划各个从节点分别属于哪个主节点

在这里插入图片描述

  1. 关于集群的相关操作

以客户端的方式进行连接

./redis-cli -p 7000 -c

加入   -c    代表连接的是集群,日后执行会执行CRC16算法,不加 -c 代表连接的是单机
可以写集群中任意一个节点的端口(从节点也可以)

查看集群状态

# 1.查看集群状态 check [原始集群中任意节点] 
- ./redis-trib.rb check 192.168.72.130:7000

# 2.集群节点状态说明
- 主节点 
	主节点存在hash slots,且主节点的hash slots 没有交叉
	主节点不能删除
	一个主节点可以有多个从节点
	主节点宕机时多个副本之间自动选举主节点

- 从节点
	从节点没有hash slots
	从节点可以删除
	从节点不负责数据的写,只负责数据的同步

添加主节点

# 1.添加主节点 add-node [新加入节点] [原始集群中任意节点]
- ./redis-trib.rb  add-node 192.168.1.158:7006  192.168.1.158:7005
- 注意:
	1.该节点必须以集群模式启动
	2.默认情况下该节点就是以master节点形式添加

添加从节点

# 1.添加从节点 add-node --slave [新加入节点] [集群中任意节点]
- ./redis-trib.rb  add-node --slave 192.168.1.158:7006 192.168.1.158:7000
- 注意:
	当添加副本节点时没有指定主节点,redis会随机给副本节点较少的主节点添加当前副本节点
	
# 2.为确定的master节点添加主节点 add-node --slave --master-id master节点id [新加入节点] [集群任意节点]
- ./redis-trib.rb  add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006  127.0.0.1:7000

删除副本节点

# 1.删除节点 del-node [集群中任意节点] [删除节点id]
- ./redis-trib.rb  del-node 127.0.0.1:7002 0ca3f102ecf0c888fc7a7ce43a13e9be9f6d3dd1
- 注意:
 1.被删除的节点必须是从节点或没有被分配hash slots的节点

集群在线分片

# 1.在线分片 reshard [集群中任意节点] [无]
- ./redis-trib.rb  reshard  192.168.1.158:7000

主节点宕机后,它的从节点会选举出来一个作为master当旧的master恢复之后会成为slave

新节点加入后是没有slot的,必须调用reshard命令手动分配slot

3.5 SpringBoot操作集群

# SpringBoot操作集群
spring.redis.cluster.nodes=192.168.72.130:7000,192.168.72.130:7001,192.168.72.130:7002,192.168.72.130:7003,192.168.72.130:7004,192.168.72.130:7005

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值