Redis-海量存储高并发问题4:RedisCluster搭建和扩容(伪集群:4主4从)

Redis-海量存储高并发问题:RedisCluster搭建和扩容(伪集群:4主4从)


关键词

分片集群优点:

  1. 海量数据存储:
    集群中有多个master,每个master保存不同的数据 ,数据存储上限取决于master数量
  2. 高并发写的问题:
    集群中有多个master,每个master包含多个slave,主从并发度都比较高
  3. 不需要哨兵:
    多个master之间互相ping,监测彼此的健康状态,主从切换
  4. 访问方式:
    客户端请求可以访问集群任意节点,最终都会被转发到正确节点

在这里插入图片描述



如图:

在这里插入图片描述

功能:

(1)搭建Redis集群,要求三主三从
(2)能够添加一主一从(Master4和Slaver4)
(3)能够通过JedisCluster向RedisCluster添加数据和取出数据




一、RedisCluster 搭建(伪集群)

1.1 RedisCluster 集群配置 清单

节点名称访问地址
Master1192.168.80.77:5555
Master2192.168.80.77:5556
Master3192.168.80.77:5557
Slave1192.168.80.77:5558
Slave2192.168.80.77:5559
Slave3192.168.80.77:5560
Master4192.168.80.77:5561
Slave4192.168.80.77:5562

1.2 搭建集群

下载redis-5.0.5

	wget http://download.redis.io/releases/redis-5.0.5.tar.gz

在这里插入图片描述

创建redis集群目录redis-cluster,存放所有redis节点

在这里插入图片描述

解压缩redis安装包

	tar -zxvf redis-5.0.5.tar.gz

在这里插入图片描述

cd切换到redis解压目录下,执行编译

在这里插入图片描述

安装并指定安装目录安装redis

	make install PREFIX=/opt/redis-cluster/redisMaster1

在这里插入图片描述

从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录生成的bin目录中

在这里插入图片描述

修改 redis.conf 文件,修改如下参数

	# 1. 设置端口
	port 5555
	
	# 2. 将`daemonize`由`no`改为`yes`
	daemonize yes
	
	# 3. 默认绑定的是回环地址,默认不能被其他机器访问
	# bind 127.0.0.1
	
	# 4. 是否开启保护模式,由yes该为no
	protected-mode no 
	
	# 5. 开启集群模式
	cluster-enabled yes

拷贝已经安装完毕得redisMaster1,拷贝出6个redis实例(注意:端口修改)

在这里插入图片描述按照master和slave进行主从节点得区分
在这里插入图片描述

修改端口

在这里插入图片描述

编写批处理脚本,启动所有的Redis实例:

	#创建start.sh,启动所有的实例
	vi redisStart.sh

在这里插入图片描述

赋写脚本得执行的权限,并执行脚本,启动三主三从redis实例

在这里插入图片描述

node.conf中记录了所有的节点以及槽的对应关系:目前只有当前节点得信息(实例id和实例标识等信息)
在这里插入图片描述

创建Redis集群(创建时Redis里不要有数据)(进入任何一个redis都可以)

	./redis-cli --cluster create 192.168.80.77:5555 192.168.80.77:5556 192.168.80.77:5557 
	          192.168.80.77:5558 192.168.80.77:5559 192.168.80.77:5560 --cluster-replicas 1

 	说明:--cluster-replicas 1 : 设置一主一从,前三台为主,后三天随机和主进行配对
	[root@redisCluster bin]# ./redis-cli --cluster create 192.168.80.77:5555 192.168.80.77:5556 192.168.80.77:5557 192.168.80.77:5558 192.168.80.77:5559 192.168.80.77:5560 --cluster-replicas 1



	>>> Performing hash slots allocation on 6 nodes...
	Master[0] -> Slots 0 - 5460
	Master[1] -> Slots 5461 - 10922
	Master[2] -> Slots 10923 - 16383
	Adding replica 192.168.80.77:5559 to 192.168.80.77:5555
	Adding replica 192.168.80.77:5560 to 192.168.80.77:5556
	Adding replica 192.168.80.77:5558 to 192.168.80.77:5557
	>>> Trying to optimize slaves allocation for anti-affinity
	[WARNING] Some slaves are in the same host as their master
	M: 97bc293359e1fbaa3d37d7fc9547f95e8168a661 192.168.80.77:5555
	   slots:[0-5460] (5461 slots) master
	M: 94a7d264c4d93642dee1079203add2c7dde51742 192.168.80.77:5556
	   slots:[5461-10922] (5462 slots) master
	M: 4ea4b4d24be612e223f0fd1e2db61bd757130f4f 192.168.80.77:5557
	   slots:[10923-16383] (5461 slots) master
	S: a56b4edece031fd70347fd8677058237659ed7ae 192.168.80.77:5558
	   replicates 94a7d264c4d93642dee1079203add2c7dde51742
	S: 1d15dbd61215c9b7b29cd9917ae6c7b1cdc6684b 192.168.80.77:5559
	   replicates 4ea4b4d24be612e223f0fd1e2db61bd757130f4f
	S: bc3bf4315d5628b6ab4d9431eaada3b2448a1cd3 192.168.80.77:5560
	   replicates 97bc293359e1fbaa3d37d7fc9547f95e8168a661
	Can I set the above configuration? (type 'yes' to accept): yes
	>>> Nodes configuration updated
	>>> Assign a different config epoch to each node
	>>> Sending CLUSTER MEET messages to join the cluster
	Waiting for the cluster to join
	....
	>>> Performing Cluster Check (using node 192.168.80.77:5555)
	M: 97bc293359e1fbaa3d37d7fc9547f95e8168a661 192.168.80.77:5555
	   slots:[0-5460] (5461 slots) master
	   1 additional replica(s)
	S: 1d15dbd61215c9b7b29cd9917ae6c7b1cdc6684b 192.168.80.77:5559
	   slots: (0 slots) slave
	   replicates 4ea4b4d24be612e223f0fd1e2db61bd757130f4f
	S: bc3bf4315d5628b6ab4d9431eaada3b2448a1cd3 192.168.80.77:5560
	   slots: (0 slots) slave
	   replicates 97bc293359e1fbaa3d37d7fc9547f95e8168a661
	M: 4ea4b4d24be612e223f0fd1e2db61bd757130f4f 192.168.80.77:5557
	   slots:[10923-16383] (5461 slots) master
	   1 additional replica(s)
	S: a56b4edece031fd70347fd8677058237659ed7ae 192.168.80.77:5558
	   slots: (0 slots) slave
	   replicates 94a7d264c4d93642dee1079203add2c7dde51742
	M: 94a7d264c4d93642dee1079203add2c7dde51742 192.168.80.77:5556
	   slots:[5461-10922] (5462 slots) master
	   1 additional replica(s)
	[OK] All nodes agree about slots configuration.
	>>> Check for open slots...
	>>> Check slots coverage...
	[OK] All 16384 slots covered.
	[root@redisCluster bin]# 

查看执行日志:

	55主节点,对应59从节点
	56主节点,对应60从节点
	57主节点,对应58从节点

在这里插入图片描述

在这里插入图片描述
查看node.conf,了解所有的节点以及槽的对应关系
在这里插入图片描述

命令客户端连接集群,并进行set/get操作

	./redis-cli -h 127.0.0.1 -p 5555 -c
	注意:-c 表示是以redis集群方式进行连接

在这里插入图片描述
不管存储的数据在那个槽上,最终都将定位到相应的节点上去。

查看集群状态(需要先登陆)

在这里插入图片描述

二、JedisCluster

JedisCluster是Jedis根据RedisCluster的特性提供的集群智能客户端

	JedisCluster为每个节点创建连接池,并跟节点建立映射关系缓存(Cluster slots)
	JedisCluster将每个主节点负责的槽位一一与主节点连接池建立映射缓存
	JedisCluster启动时,已经知道key,slot和node之间的关系,可以找到目标节点
	JedisCluster对目标节点发送命令,目标节点直接响应给JedisCluster

如果JedisCluster与目标节点连接出错,则JedisCluster会知道连接的节点是一个错误的节点此时节点返回moved异常给JedisCluster

JedisCluster会重新初始化slot与node节点的缓存关系,然后向新的目标节点发送命令,目标命令执行命令并向JedisCluster响应

如果命令发送次数超过5次,则抛出异常"Too many cluster redirection!"

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

demo下载地址 JedisCluster


三、扩容(添加主节点redisMaster4和redisSlave4到当前集群)

先创建redisMaster4节点 (无数据)

在这里插入图片描述

复制配置文件 redis.conf

在这里插入图片描述

修改 redis.conf 文件

	# 1. 设置端口
	port 5562
	
	# 2. 将`daemonize`由`no`改为`yes`
	daemonize yes
	
	# 3. 默认绑定的是回环地址,默认不能被其他机器访问
	# bind 127.0.0.1
	
	# 4. 是否开启保护模式,由yes该为no
	protected-mode no 
	
	# 5. 开启集群模式
	cluster-enabled yes

复制从节点redisSlave4:

在这里插入图片描述

启动新添加的主节点redisMaster4:

在这里插入图片描述

进入集群中的某一个主节点的客户端进行节点添加:添加新节点,并启动

	./redis-cli --cluster add-node 192.168.80.77:5561  192.168.80.77:5555

在这里插入图片描述

查看集群结点发现7007已添加到集群中

	hash槽重新分配(数据迁移)
	添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。
	查看集群中槽占用情况,redis集群有16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占用情况。

在这里插入图片描述

给刚添加的7007结点分配槽

	第一步:连接上集群(连接集群中任意一个可用结点都行)
		./redis-cli --cluster reshard 192.168.127.128:5561

	第二步:输入要分配的槽数量
		How many slots do you want to move (from 1 to 16384)? 3000
		输入:3000,表示要给目标节点分配3000个槽


	第三步:输入接收槽的结点id
		What is the receiving node ID?
		输入:50b073163bc4058e89d285dc5dfc42a0d1a222f2
		PS:这里准备给7007分配槽,通过cluster nodes查看7007结点id为:
				50b073163bc4058e89d285dc5dfc42a0d1a222f2


	第四步:输入源结点id
		Please enter all the source node IDs.
		Type 'all' to use all the nodes as source nodes for the hash slots.
		Type 'done' once you entered all the source nodes IDs.


	第五步:输入yes开始移动槽到目标结点id
		输入:yes

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

添加从节点,添加redisSlave4从结点,将redisSlave4作为redisMaster4的从结点

	./redis-cli --cluster add-node 新节点的ip和端口  旧节点ip和端口 --cluster-slave --cluster-master-id 主节点id
启动新得从节点

在这里插入图片描述

添加redisSlave4从结点,将redisSlave4作为redisMaster4的从结点
	./redis-cli --cluster add-node 192.168.80.77:5562 192.168.80.77:5561 --cluster-slave --cluster-master-id a42ac5608328fd997732dd577029c9f91c844512

在这里插入图片描述

查看:

在这里插入图片描述

搭建完毕,后续会更新关于redis更细致得内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿城大饼

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值