周顺的技术博客

  • 一、Redis集群概述
  • 1、什么是Redis集群
  • 2、创建目录
  • 3、下载源码并解压编译
  • 二、Redis集群配置
  • 1、创建配置文件
  • 2、配置文件内容
  • 3、启动节点
  • 4、启动集群
  • 5、关闭集群
  • 6、集群原理
  • 首页
  • 榜上有名
  • 文章归档
  • 读者排行
  • 豆瓣书影
  • 友情链接
  • DevOps (4)
  • Docker (4)
  • k8s (9)
  • linux (11)
  • Mysql (9)
  • Python (2)
  • Redis (1)
  • Shell (6)
  • 主题 (0)
  • 未分类 (0)

Redis集群

  • xiaoteng
  • 2025-07-11
  • 0

一、Redis集群概述

1、什么是Redis集群

2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,使集群的构建方式复杂度大大降低。关于集群的更新可以在 Redis5 的版本说明中看到,如下:

The cluster manager was ported from Ruby (redis-trib.rb) to C code inside redis-cli. check redis-cli --cluster help for more info.

可以查看Redis官网查看集群搭建方式,连接如下

https://redis.io/topics/cluster-tutorial

以下步骤是在一台 Linux 服务器上搭建有6个节点的 Redis集群。

注:实际运维工作中,大概需要3台机器,每台机器2个节点。但是详细规划主从关系,尽量不要把一组主从放在同一台服务器中。

Redis01 Redis02 Redis03

1主 1从

2主 2从

3从 3主

2、创建目录

IP地址:10.1.1.27

主机名称:redis.itcast.cn

新建目录:/redis

3、下载源码并解压编译

yum install wget -y
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make

二、Redis集群配置

1、创建配置文件

注:6个配置文件不能在同一个目录,此处我们定义如下:

# mkdir /redis/conf/700{1..6}
/redis/conf/7001/redis.conf
/redis/conf/7002/redis.conf
/redis/conf/7003/redis.conf
/redis/conf/7004/redis.conf
/redis/conf/7005/redis.conf
/redis/conf/7006/redis.conf

2、配置文件内容

port 7001 #端口
cluster-enabled yes #启用集群模式
cluster-config-file nodes_7001.conf
cluster-node-timeout 5000 #超时时间
appendonly yes
daemonize yes #后台运行
protected-mode no #非保护模式
pidfile /var/run/redis_7001.pid

注:其中 port 和 pidfile 需要随着文件夹的不同递增,一键配合脚本

#!/bin/bash
for i in $(seq 7001 7006)
do
cat > /redis/conf/$i/redis.conf <<EOF
port $i
cluster-enabled yes
cluster-config-file nodes_$i.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_$i.pid
EOF
done

3、启动节点

#!/bin/bash
for i in $(seq 7001 7006)
do
/root/redis-5.0.5/src/redis-server /redis/conf/$i/redis.conf
done

4、启动集群

/root/redis-5.0.5/src/redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

至此,Reids5 集群搭建完成。

测试:

# /root/redis-5.0.5/src/redis-cli -c -p 7001
注:一定要添加-c选项,否则redis-cli默认启动是不以集群方式启动

5、关闭集群

配置文件

# vim /root/redis-5.0.5/utils/create-cluster/create-cluster
端口PORT设置为7000,NODES为6,工具会自动累加1 生成 7001-7006 六个节点 用于操作

关闭集群

cd /root/redis-5.0.5/utils/create-cluster
./create-cluster stop

启动集群

./create-cluster start

6、集群原理

redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

3主 3从 = 正常

1主 3从 = 1 < (1+3)/2 = 2 = 集群失效

© 2026 周顺的技术博客
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}