Redis集群

Redis集群

Redis集群

Redis 集群(Redis Cluster)是 Redis 官方提供的分布式高可用方案,用于解决单节点 Redis 的容量上限与读写性能瓶颈问题,同时内置主从复制与故障自动转移能力,无需依赖哨兵。

故障检测与自动恢复机制:

集群节点之间通过 Gossip 协议交换状态信息,每秒互相发送 PING/PONG 消息进行心跳检测。若某个节点超过 node-timeout(默认 15 秒)未正常响应,其他节点会将其标记为疑似下线(PFAIL);当超过半数主节点都判定该节点为疑似下线时,节点会被标记为确认下线(FAIL)。主节点被标记为确认下线后,其对应的从节点会发起选举,获得半数以上主节点投票的从节点将升级为新主节点,并接管原主节点负责的所有哈希槽,集群随后更新路由信息并继续对外提供服务。

Redis集群部署与配置

下面演示基于 Redis 5 搭建 Redis Cluster 集群,需要注意的是 Redis 5.0 及以上版本正式弃用了基于 Ruby 实现的 redis-trib.rb 工具,将集群管理功能原生集成到 redis-cli 中,通过 redis-cli --cluster 命令完成集群的所有操作,无需再安装 Ruby 环境和相关依赖,降低了集群部署门槛。

在 /usr/local/src/redis 下创建集群目录和各个节点的日志与数据目录

bash 复制代码
mkdir -p ./redis-cluster/700{1..6}/{logs,data}

赋予权限,避免 Redis 启动时权限不足

bash 复制代码
chmod 777 -R ./redis-cluster

Redis Cluster 节点的核心配置是 cluster-enabled yes(开启集群模式),

下面用脚本批量生成 7001~7006 集群节点的配置文件,可一次性复制到命令行中运行,也可以编写到 redis.conf 中:

bash 复制代码
# 定义基础目录
BASE_DIR="/usr/local/src/redis/redis-cluster"
mkdir -p ${BASE_DIR}/700{1..6}/{logs,data}  

# IP获取:只取第一个非127.0.0.1的IPv4地址
IP=`ip a|grep 'inet' |grep -v '127.0.0.1'|grep -v 'inet6'|awk '{print $2}'|awk -F'/' '{print $1}'|head -n1`
for i in {1..6}
do
cat > ${BASE_DIR}/700${i}/redis.conf <<EOF
daemonize yes 
port 700${i} 
cluster-enabled yes 
cluster-config-file cluster-nodes-700${i}.conf
cluster-node-timeout 15000
appendonly yes
bind ${IP}
protected-mode no
dbfilename dump-700${i}.rdb
logfile ${BASE_DIR}/700${i}/logs/redis.log
pidfile ${BASE_DIR}/700${i}/data/redis.pid
dir ${BASE_DIR}/700${i}/data
appendfilename "appendonly-700${i}.aof"
EOF
done

进入 /usr/local/src/redis/redis-cluster 目录下启动所有节点

bash 复制代码
for i in {1..6}; do
/usr/local/src/redis/redis-5.0.4/src/redis-server ./700${i}/redis.conf
done

检查启动状态

bash 复制代码
ps -ef | grep redis-server | grep -E "700[1-6]"

执行 redis-cli --cluster create 命令初始化集群时,通过 --cluster-replicas 参数指定主从比例,会自动分配主从节点

bash 复制代码
cd /usr/local/src/redis/redis-cluster

/usr/local/src/redis/redis-5.0.4/src/redis-cli --cluster create \
  172.25.49.72:7001 172.25.49.72:7002 172.25.49.72:7003 \
  172.25.49.72:7004 172.25.49.72:7005 172.25.49.72:7006 \
  --cluster-replicas 1

/usr/local/src/redis/redis-5.0.4/src/redis-cli:Redis 客户端程序的绝对路径,是执行集群管理的入口;

--cluster:表示以集群管理模式运行 redis-cli,而非普通的连接模式;

create:--cluster模式下的核心子命令,含义是创建一个新的 Redis 集群;

172.25.49.72:7001 ... 172.25.49.72:7006:指定加入集群的所有节点,必须是已启动且配置了cluster-enabled yes 的节点;

--cluster-replicas 1:用于指定每个主节点对应的从节点数量。

需要注意的是从前面的 ps 命令输出可以看到,Redis 节点绑定的是内网 IP 172.25.49.72,而不是默认的 127.0.0.1,这意味着 Redis 服务只监听在这个内网 IP 上,所以用 127.0.0.1 去连接会被拒绝,需要使用绑定的是内网 IP 地址。

验证主从关系是否建立,使用集群模式连接7001节点:

bash 复制代码
/usr/local/src/redis/redis-5.0.4/src/redis-cli -c -h 172.25.49.72 -p 7001

cluster nodes 用于查询集群结点信息

cluster info 用于查询集群状态信息

相关推荐
小高不会迪斯科10 小时前
CMU 15445学习心得(二) 内存管理及数据移动--数据库系统如何玩转内存
数据库·oracle
e***89011 小时前
MySQL 8.0版本JDBC驱动Jar包
数据库·mysql·jar
l1t11 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
2601_9491465311 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天11 小时前
大模型幻觉问题
运维·服务器
失忆爆表症12 小时前
03_数据库配置指南:PostgreSQL 17 + pgvector 向量存储
数据库·postgresql
Gofarlic_OMS12 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师12 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
AI_567812 小时前
Excel数据透视表提速:Power Query预处理百万数据
数据库·excel
dixiuapp12 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化