Redis集群

对于 Redis主从复制(读写分离)配置 和 Redis哨兵模式 文章中,都只是有一个 master 主节点,但是一个的性能有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave成为集群。

一、Redis集群特点

1. 每个节点知道彼此之间的关系,也会知道自己的角色,当然他们也会知道自己存在与一个集群环境中,他们彼此之间可以交互和通信,比如ping pong。那么这些关系都会保存到某个配置文件中,每个节点都有,这个我们在搭建的时候会做配置的。

2. 客户端要和集群建立连接的话,只需要和其中一个建立关系就行。

3. 某个节点挂了,也是通过超过半数的节点来进行的检测,客观下线后执行主从切换,和我们之前在哨兵模式中提到的是一个道理。

4. Redis中存在很多的插槽,又可以称之为槽节点,用于存储数据,这个先不管,后面再说。

二、配置

1. 架构

这里使用6个计算机节点构建Redis集群,三主三从的结构,每个master都配备一个slave,这也是最经典的Redis集群,容错性更佳。

 2. 对这6个redis节点中的每一个 redis.conf 文件都作如下配置:

# 开启集群模式
cluster-enabled yes
# 每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行
cluster-config-file nodes-6379.conf
# 超时时间,超时则认为master宕机,随后主备切换
cluster-node-timeout 5000
# 开启持久化机制AOF
appendonly yes

另外如果工作空间目录下之前存在  rdb、aof格式的文件(持久化机制产生的文件),需要清空一下,这两种文件是作为单机生成的,而集群后就不需要了,甚至有了启动会报错;

# 移动到工作空间,我的工作空间是在/usr/local/redis/working/
cd /usr/local/redis/working/ 
rm appendonly.aof dump.rdb

然后重启这6个redis.

3. 创建集群

redis-cli --cluster -help (可以打开redis集群命令帮助手册)

#####
# 注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意
# 注意2:以下为新版的redis构建方式
#####

# 创建集群,-a didiok是指redis密码, cluster-replicas是指主节点和从节点比例为1,1-3为主,4-6为从,一个主节点对应一个从节点,这也是最经典用的最多的集群模式
redis-cli -a didiok --cluster create 192.168.1.201:6379 192.168.1.202:6379 192.168.1.203:6379 192.168.1.204:6379 192.168.1.205:6379 192.168.1.206:637 --cluster-replicas 1

输入之后,会出现如下界面

 创建之后,可以检查集群

#检查集群,每个节点输出的信息都一样(这6个节点已经是一个整体了,输出的也是整体信息), -a didiok 是指密码
redis-cli -a didiok --cluster check 192.168.1.201:6379

 4. 集群控制台

进入集群控制台命令:

# 进入集群控制台 -a didiok 为redis密码
redis-cli -c -a didiok -h 192.168.1.201 -p 6379

进入控制台后,可以输入以下命令进行操作

cluster info # 查看集群信息
cluster nodes # 查看集群的节点信息

 5. 槽节点slot

创建完集群后,三个主节点会分配有槽节点slot,如下

总共有16384个槽节点,会平均分配给集群里面的所有master,slave是没有槽节点这个概念的。对槽的理解可以类比主板上有多个内存槽,那么就可以插入多个内存条来使用,槽节点是用来插入数据的。

 往 redis 中 set 数据时,会对key 进行hash,得到的值 对16384进行取模,得到存储这个key的那个槽节点,数据存入该槽节点,也就是会存入对应的Redis节点上。

当使用 get key 命令时,会redirect重定向到对应持有这个数据所在的redis节点上去,keys * 命令只会列出 本节点上 持有的数据

6. SpringBoot 集成 Redis 集群

在 application.yml文件中,配置如下

spring:
  redis:
    password: didiok # redis密码
    cluster:
      nodes: 192.168.1.201:6379,192.168.1.202:6379,192.168.1.203:6379,192.168.1.204:6379,192.168.1.205:6379,192.168.1.206:6379  # 集群所有节点的ip和端口号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值