redis集群

redis cluster集群介绍

一、redis cluster概述

redis集群搭建的方式有多种,例如哨兵模式、使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存相应的数据和整个集群实例状态,每个节点都和其他所有节点相互连接;
群集实现需要一个中间件,然后这个中间件负责将我们需要存入redis中的数据的key通过一套算法计算得出一个值。然后根据这个值找到对应的redis节点,将这些数据存在这个redis的节点中;
在取值的时候,同样先将key进行计算,得到对应的值,然后就去找对应的redis节点,从对应的节点中取出对应的值;

在这里插入图片描述
上图中每一个蓝色的圈都代表一个redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作;

二、redis cluster群集节点数据存取实现原理

首先,在redis的每一个节点上,都会存放以下两种数据;
1.一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量,这个变量的取值范围是:0-16383;
2.一个就是cluster,这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作;

在这里插入图片描述

三、redis cluster集群结构特点
1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽;
2.节点的fail是通过集群中超过半数的节点检测失效时才生效;
3.客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可;
4.redis-cluster把所有的物理节点映射到 [0-16383]slot上(不一定是平均分配),cluster 负责维护node <—> slot <—> value;
5.redis集群预分好16384个桶,当需要在redis集群中放置一个key-value时,根据CRC16(key)mod 16384的值,决定将一个key放到哪个桶中;
四、安装
1.安装环境
系统环境IP实例端口所需软件
centos7.8192.168.100.101 (rd1)6379、6380redis-5.0.4.tar.gz
centos7.8192.168.100.102 (rd2)6379、6380redis-5.0.4.tar.gz
centos7.8192.168.100.103 (rd3)6379、6380redis-5.0.4.tar.gz
2.安装部署redis环境,三处节点部署一致
[root@rd1 ~]# wget http://download.redis.io/releases/redis-5.0.4.tar.gz
[root@rd1 ~]# tar xf redis-5.0.4.tar.gz
[root@rd1 ~]# cd redis-5.0.4/
[root@rd1 redis-5.0.4]# make
3.准备实例,每个节点两个实例
[root@rd1 ~]# mkdir /usr/local/redis{6379..6380}
[root@rd1 ~]# cp redis-5.0.4/src/redis-server /usr/local/redis6379/	#准备实例主程序
[root@rd1 ~]# cp redis-5.0.4/src/redis-server /usr/local/redis6380/
[root@rd1 ~]# cp redis-5.0.4/src/redis-cli /usr/local/redis6379/	#准备实例客户端程序
[root@rd1 ~]# cp redis-5.0.4/src/redis-cli /usr/local/redis6380/
[root@rd1 ~]# cp redis-5.0.4/redis.conf /usr/local/redis6379/		#准备实例主配置文件
[root@rd1 ~]# cp redis-5.0.4/redis.conf /usr/local/redis6380/
[root@rd1 ~]# mkdir /usr/local/redis6379/data	#准备实例数据存放位置
[root@rd1 ~]# mkdir /usr/local/redis6380/data
4.修改实例主配置文件,注意多个实例端口不一致
[root@rd1 ~]# vi /usr/local/redis6379/redis.conf
bind 192.168.100.101		#本机IP
port 6379		#实例1端口6379、实例2端口6380
daemonize yes	#设置redis后台运行
pidfile /var/run/redis_6379.pid		#pidfile文件
logfile "/usr/local/redis6379/redis.log"		#日志位置
dir /usr/local/redis6379/data/		#数据文件存放位置,手动创建
masterauth <123123>		#密码根据实际情况设置
requirepass 123123		#两处密码一致,根据实际情况设置
appendonly yes		# aof日志开启,有需要就开启,时间长了文件会很大
cluster-enabled yes		#开启cluster集群模式
cluster-config-file nodes-7000.conf		#cluster集群配置文件,无需创建,自动生成
cluster-node-timeout 15000				#cluster节点超时时间,默认15秒
5.启动redis实例进程,三处节点一致
[root@rd1 ~]# /usr/local/redis6379/redis-server /usr/local/redis6379/redis.conf
[root@rd1 ~]# /usr/local/redis6379/redis-server /usr/local/redis6380/redis.conf
验证端口状态
[root@rd1 ~]# netstat -utpln |grep redis
tcp        0      0 192.168.100.101:6379    0.0.0.0:*               LISTEN      23798/redis-server  
tcp        0      0 192.168.100.101:6380    0.0.0.0:*               LISTEN      23790/redis-server  
tcp        0      0 192.168.100.101:16379   0.0.0.0:*               LISTEN      23798/redis-server  
tcp        0      0 192.168.100.101:16380   0.0.0.0:*               LISTEN      23790/redis-server
6.创建redis集群
[root@rd1 ~]# /usr/local/redis6379/redis-cli -a 123123 --cluster create 192.168.100.101:6379 192.168.100.101:6380 192.168.100.102:6379 192.168.100.102:6380 192.168.100.103:6379 192.168.100.103:6380 --cluster-replicas 1
#-a	用户设置密码
#--cluster create:创建集群
#--cluster-replicas 1:表示一个master 对应一个slave

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

7.验证集群状态
[root@rd1 ~]# /usr/local/redis6379/redis-cli -a 123123 -h 192.168.100.101 -p 6379 -c		#-c:表示集群,不可省略
192.168.100.101:6379> cluster nodes
ea7d12b13afa68dfc55db677c5e1f7e0e48aec54 192.168.100.103:6379@16379 master - 0 1645965731000 5 	connected 10923-16383
ea3bc664387735cef6254d0e4f905a1376218b0b 192.168.100.102:6380@16380 slave c8043ea17379327de9bdf21d8687e1b4d057e100 0 1645965731556 4 connected
1077ab28be4e60b782880b64eaf69c7ae762412b 192.168.100.101:6380@16380 slave ea7d12b13afa68dfc55db677c5e1f7e0e48aec54 0 1645965731000 5 connected
c8043ea17379327de9bdf21d8687e1b4d057e100 192.168.100.101:6379@16379 myself,master - 0 1645965732000 1 connected 0-5460
8d2e2b93298f1d02fdd08e783c1bebef147a242b 192.168.100.102:6379@16379 master - 0 1645965733000 3 connected 5461-10922
d2d03bfa6ae11db9d172276087c3bfa3afe57464 192.168.100.103:6380@16380 slave 8d2e2b93298f1d02fdd08e783c1bebef147a242b 0 1645965733604 6 connected
#master插入数据并验证
192.168.100.101:6379> set name zs
-> Redirected to slot [5798] located at 192.168.100.102:6379		#访问192.168.100.101的6379实例,插入数据时,被写入192.168.100.102的6379实例,并且将终端直接转入相应实例
OK
192.168.100.102:6379> keys *		#且对应实例可以查到相应数据
1) "name"
192.168.100.102:6379> get name
"zs"
192.168.100.102:6379>
#slave验证
[root@rd1 ~]# /usr/local/redis6379/redis-cli  -a 123123 -h 192.168.100.103 -p 6380 -c		#访问相应从节点也是可以看见数据
192.168.100.103:6380> keys *
1) "name"
192.168.100.103:6380> get name
-> Redirected to slot [5798] located at 192.168.100.102:6379
"zs"
8.总结

插入数据时,redis计算key值,将其存放到192.168.100.102的6379实例,会直接跳转到192.168.100.102的6379实例,查找数据时可以通过192.168.100.102的6379实例192.168.100.103的6380实例查看;这也是redis cluster的特点,它是去中心化,每个节点都是对等的,连接哪个节点都可以获取和设置数据;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Celery是一个Python分布式任务队列框架,而Redis是一个高性能的键值存储数据库。当它们结合在一起时,可以构建一个强大的分布式任务队列系统。 Celery和Redis集群的结合可以提供以下功能: 1. 异步任务处理:Celery可以将任务异步地发送到Redis集群中,然后由工作节点处理。这样可以避免任务阻塞主线程,提高系统的响应速度。 2. 分布式任务调度:Redis集群可以作为Celery的消息代理,负责存储和传递任务消息。多个Celery工作节点可以从Redis集群中获取任务,并进行并行处理。 3. 任务结果存储:Celery可以将任务的执行结果存储在Redis集群中,以便后续查询和使用。 4. 任务队列监控:Redis集群可以提供监控和管理Celery任务队列的功能,例如查看队列长度、清理过期任务等。 为了搭建Celery和Redis集群,你需要进行以下步骤: 1. 安装和配置Redis集群:根据你的需求,可以选择使用Redis Sentinel或Redis Cluster来搭建Redis集群。配置好集群后,确保所有节点都正常运行。 2. 安装和配置Celery:使用pip安装Celery库,并在Celery配置文件中指定Redis集群连接信息。 3. 编写任务代码:定义你的任务函数,并使用Celery的装饰器将其注册为Celery任务。 4. 启动Celery工作节点:在每个工作节点上启动Celery的工作进程,它们将从Redis集群中获取任务并执行。 5. 发布和调度任务:在你的应用程序中,使用Celery的API将任务发布到Redis集群中,并设置任务的调度规则。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值