Redis集群

本文深入解析Redis集群的概念、作用及优势,详细介绍集群结构设计、数据存储设计与内部通讯机制。探讨集群搭建配置、数据操作流程及主从切换策略,帮助读者全面理解Redis集群的运作原理。

简介

概念

集群就是使用网络将若干台计算机连通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。

作用

  • 分散单台服务器的访问压力,实现负载均衡
  • 分散单台服务器的存储压力,实现可扩展性
  • 降低单台服务器宕机带来的业务灾难

集群结构设计

数据存储设计

  • 通过算法设计,计算出key应该保存的位置
  • 将所有的存储空间计划切割成16384份,每台主机保存一部分,每份代表一个存储空间,注意不是key的保存空间
  • 将key按照计算出的结果放到对应的存储空间

计算过程:将key通过CRC16()函数加密,再取模%16384,最后得到一个值,这个值就是key在redis集群环境中存储的位置

优势

  • 增加集群的可扩展性

当集群需要新增或者减少机器的时候,各机器只需要平分存储空间即可。如果增加一台新的机器,redis会通过计算,将其他机器的存储空间挪一部分到新的机器;如果减少一台机器,则将这台机器的存储空间匀给其他机器。

集群内部的通讯设计

  • 各个数据库相互通信,保存各个库中槽(存储空间)的编号数据
  • 一次命中,直接返回
  • 一次未命中,告知具体位置,然后取数据返回

当通过key去redis集群取数据的时候,先通过算法得到key所在的存储空间编号,如果请求的机器正好存在我们需要的数据,则直接返回;如果不存在,所请求的机器会告诉我们:我们需要的数据在哪台机器上(每个库都有各库的槽编号),然后进行一个重定向的操作,最后拿到数据返回;也就是说,在redis集群中获取数据,最多请求两次,我们就可以拿到自己想要的数据。

cluster集群结构搭建

配置

最主要的几个配置
cluster-enabled yes --开启作为cluster的节点
cluster-config-file xxx.conf --cluster配置文件名称
cluster-node-timeout milliseconds --节点超时时间,也就是说超过这个时间无响应,该节点是否下线或切换为从节点
cluster-migration-barrier count -- master连接的slave的最小数量

通过命令redis-trib.rb启动cluster

redis-trib.rb create --replicas num ip:port ...

命令中的num表示一个master带几个slave;master对应的slave redis会通过添加的顺序去对应。

cluster启动后,master和slave会自动连接并同步数据。

PS:使用这个命令需要有ruby及gem环境

添加、获取数据

  • 添加数据
    redis-cli -c
    set name value
  • 获取数据
    redis-cli -c -p port
    get name

主从切换

  • slave宕机后,master会将其的状态标记为failing,并通知给其他master
  • 宕机后的slave恢复服务后,master清除failing状态,并通知给其他master,然后做数据同步
  • master宕机后,slave会不断尝试连接,超过重试次数后(一秒一次),仍然连不上,slave则变为master提供服务。此时,原master的状态被标记为fail
  • 宕机后的master恢复服务后,则作为新master的slave,清除fail状态,然后做数据同步

cluster命令

cluster nodes -- 查看集群节点信息
cluster replicate masterId -- 进入一个从节点,切换其主节点
cluster meet ip:port -- 发现一个新节点,新增主节点
cluster forget id -- 忽略一个没有槽(solt)的节点
cluster failover -- 手动故障转移

### 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、付费专栏及课程。

余额充值