redis集群

本文详细介绍了RedisCluster的分布式存储方案,包括其原理(数据分片、哈希槽和主从复制),创建集群的过程,以及哨兵模式和proxy_responses的作用。重点在于高可用性和数据一致性保障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、redis-cluster集群概述:

redis3.0之后引入的分布式存储方案

集群由多个node节点组成,redis的数据是分布在这些节点之中。

在集群之中也分为主节点和从节点,

集群模式中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读

集群模式自带哨兵模式,可以自动实现故障切换,在故障切换完成之前,整个集群都将不可用。切换完毕之后,集群会立刻恢复

集群模式是按照数据分:

  1. 数据分片:是集群的核心功能,每个主都可以对外提供读、写的功能,但是数据一一对应写入主的对应从节点。在集群模式中,可以容忍数据的不完整。
  2. 高可用:集群的主要目的就是高可用

数据分片的实现:

redis的集群引入了哈希槽的概念

redis集群中,有16384个哈希槽位。(0-16383)

根据集群中的主从节点数,分配哈希槽位,每个主从节点只负责一部分哈希槽位。

每次读写都涉及到哈希槽位,key通过校验机制CRC16校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位。通过这个值找到对应的槽位所在的节点,然后直接跳转到这个节点进行存取操作。

哈希槽位的值是连续的,如果出现不连续的哈希值,或者有哈希槽位没有被全部分配,整个集群将会报错

主从复制的意义:

一旦主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希槽位。保证集群的正常工作

故障切换的过程中,会提示集群不可用。切换完成,整个集群恢复继续工作

创建集群的时候,所有数据库不能有任何数据

二、redis实验:

关闭防火墙安全机制

六台主从服务节点全部相同配置:

vim /etc/redis/6379.conf

70行

89行

保护模式关闭

137行

开启守护进程

700行

aof持久化打开

832行

开启集群

841行

读取集群的配置文件

847行

设置的超时时间

重启redis

redis-cli -h 20.0.0.41 --cluster create 20.0.0.41:6379 20.0.0.42:6379 20.0.0.43:6379 20.0.0.44:6379 20.0.0.45:6379 20.0.0.46:6379 --cluster-replicas 1

replicas 1:规定一个主只有一个从

主从的配合是随机分配的

在集群模式当中,只能选择0库,集群不能切换库

查看集群的所有节点

cluster nodes

在主节点1 上创建数据,看对应到的从节点是否同步

从节点同步,但不能查看

自带的哨兵模式

从ping主检测

monitor

键值对对应哈希槽,哈希槽对应集群中的主机,相应的操作只能在对应的主机上操作

集群的整个的流程:

  1. 集群自带主从和哨兵
  2. 每个主从节点之间互相隔离的,可以容忍数据的不完整,目的是高可用
  3. 哈希槽位决定没个节点的读写操作,在创建key时,系统已经分配好了指定槽位。
  4. MOVED情况不是报错,只是提醒客户端去分配的槽位节点获取数据。

proxy_responses 1;在集群之中只要有一个节点响应,然后代理服务器就会把响应传递给客户端,可以增加整个系统的稳定性,只要有一个节点可以响应,那么客户端就可以继续发起请求。不会因为某个节点失效,导致整个请求失败。

### Redis 集群的搭建与配置 #### 一、Redis 集群简介 Redis 是一种高性能的键值存储系统,支持多种数据结构操作。通过集群模式可以实现分布式存储和高可用性。Redis 集群允许多个 Redis 实例协同工作,提供更高的吞吐量和更强的数据持久化能力。 --- #### 二、环境准备 在开始之前,需确认以下条件已满足: - 所有服务器的操作系统版本一致(如 CentOS 7 或 Windows),并安装了相同版本的 Redis 软件。 - 已关闭防火墙或开放必要的端口(默认 Redis 使用 6379 及其衍生端口)。 - 每台服务器上至少有两个 Redis 实例运行,分别作为主节点和从节点[^1]。 --- #### 三、具体步骤 ##### 1. 下载并解压 Redis 文件 下载指定版本的 Redis 压缩包(如 Redis 6.2.5 或更高版本),将其解压到目标路径下。例如,在 Linux 中执行以下命令: ```bash wget http://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5.tar.gz cd redis-6.2.5 make ``` ##### 2. 创建多个实例目录 为每个 Redis 实例创建独立的工作目录,并复制 `redis.conf` 至对应文件夹中。例如: ```bash mkdir -p /service/redis/{6379,6380} cp redis.conf /service/redis/6379/ cp redis.conf /service/redis/6380/ ``` ##### 3. 修改配置文件 编辑每个实例下的 `redis.conf` 文件,设置不同的监听端口号和其他必要参数。以下是关键配置项: - 设置绑定 IP 地址:`bind 0.0.0.0` - 关闭保护模式:`protected-mode no` - 开启集群功能:`cluster-enabled yes` - 指定集群配置文件位置:`cluster-config-file nodes-{port}.conf` - 设定日志级别:`loglevel notice` ##### 4. 启动 Redis 实例 依次启动各个 Redis 实例。例如: ```bash redis-server /service/redis/6379/redis.conf redis-server /service/redis/6380/redis.conf ``` 如果是在多台物理机上部署,则需要远程登录每台机器重复上述过程[^2]。 ##### 5. 构建集群拓扑 利用 `redis-cli` 的集群管理工具完成初始化操作。假设当前存在六个节点分布在三台主机上,则可输入如下指令构建集群关系: ```bash redis-cli --cluster create \ 192.168.x.y:6379 192.168.x.z:6379 ... \ --replicas 1 ``` 其中 `--replicas` 参数表示每个主节点分配几个副本[^4]。 ##### 6. 验证集群状态 最后可以通过以下方式验证集群是否正常运作: ```bash redis-cli -c -h {任意IP} -p {任一口号} CLUSTER INFO CLUSTER NODES PING SET key value GET key ``` --- #### 四、注意事项 - 如果使用 Docker 容器来部署 Redis 集群,请确保容器间网络互通良好。 - 对于 Windows 平台上的开发测试场景,可通过批处理脚本来简化服务启动流程[^3]。 --- #### 五、示例代码片段 下面展示了一个简单的 Python 程序用于连接至 Redis 集群并向其中写入一条记录: ```python import redis r = redis.StrictRedisCluster(startup_nodes=[{"host": "127.0.0.1", "port": "6379"}], decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值