CentOS 上 Redis 集群一键部署脚本:从环境准备到故障切换验证
简介这份资源面向需要在 CentOS 7.X 上快速搭建 Redis 集群的运维与后端开发人员提供一套可复用的自动化部署方案省去手工编译、逐台配置的繁琐流程。压缩包共 5 个文件以 3 个 shell 脚本为主辅以 1 个 Redis 5.0.0 源码压缩包和 1 份说明文档整体约 1.86MB体积轻巧便于分发。脚本覆盖安装、配置与卸载环节可自动完成源码解压编译、节点参数写入、集群槽位分配与故障转移相关设置并处理防火墙端口与 SELinux 策略等常见阻碍说明文档则给出修改 IP、端口等关键变量的指引读者只需按需调整即可在多台机器上批量执行。目前已有 775 人学习下载适合希望理解主从复制、16384 槽分配与分布式哈希机制并借助脚本快速落地集群环境的中高级使用者参考。1. 从一台干净的 CentOS 说起为什么我劝你别再手搓 Redis 集群上周帮一个朋友救火他负责的一套业务系统在凌晨两点挂了原因说出来有点哭笑不得——半年前他手动搭的三主三从 Redis 集群其中一台从节点所在的宿主机磁盘写满触发主从切换后新的主节点配置没同步上整个集群进入 fail 状态业务侧连接池全部超时。他翻出当时的部署笔记发现连自己都记不清那几个redis.conf里到底改了哪些参数。这不是个例我见过太多团队在 CentOS 上装 Redis 集群第一次靠搜索引擎拼凑命令第二次靠记忆第三次就彻底失控。Redis 集群本身不算复杂但「在 CentOS 上从零把它装稳」这件事坑远比想象中密集系统自带的源版本太老、ruby 环境缺失导致redis-trib.rb跑不起来、防火墙和 SELinux 把集群总线端口拦掉、节点配置文件里cluster-config-file路径写错导致重启后集群信息丢失。这些问题单看都不难凑在一起就变成玄学。这份redis集群一键自动部署脚本.rar想解决的就是把上面这些重复劳动和记忆负担收进一个可复用的流程里让一台干净的 CentOS 机器能在十几分钟内变成可用的集群节点。它适合两类人一是第一次在 CentOS 上搭 Redis 集群、不想被环境问题劝退的新手二是已经搭过但每次都要重新查参数、想把这套流程固化下来的运维。接下来我按实际落地顺序把版本选择、脚本拆解、配置项取舍和验证方法一层层拆开讲。2. 环境准备与版本选择CentOS 7/8 下装什么、从哪拿2.1 系统版本与依赖清单CentOS 7 和 CentOS 8 在 Redis 集群部署上的差异主要不在 Redis 本身而在包管理器和默认软件版本。CentOS 7 默认的yum源里 Redis 是 3.2CentOS 8 的dnf源里是 5.0这两个版本都偏旧而且 CentOS 8 已经停止维护很多镜像源需要手动换。我一般不会用系统源装 Redis而是直接编译安装版本可控路径清晰。在动手之前先把依赖装齐。下面这套命令在 CentOS 7 和 8 上都能跑区别只是yum和dnf的写法我统一用yumCentOS 8 上yum是dnf的软链不影响# 基础编译工具链gcc 版本别太低CentOS 7 默认 4.8.5 够用 yum install -y gcc gcc-c make # tcl 是 Redis 自带的测试套件依赖不装 make test 会报错 yum install -y tcl # ruby 和 rubygems 是 redis-trib.rb 的前置Redis 5 之后用 redis-cli --cluster 可以替代 yum install -y ruby rubygems # 如果打算用 redis-trib.rb还需要装 redis gem gem install redis这里有个版本取舍Redis 5.0 开始官方把集群管理工具从redis-trib.rb迁移到了redis-cli --cluster不再依赖 ruby。如果你选 Redis 5 或 6上面 ruby 那两行可以省掉少一个环境变量和 gem 源的问题。我现在的习惯是直接用 Redis 6.2.x稳定、支持 ACL、集群命令成熟而且redis-cli --cluster的报错信息比老版本清楚得多。2.2 下载与目录规划Redis 源码从官方站点拿版本我选6.2.14这是 6.2 分支后期的一个稳定版修了不少集群相关的边界问题。下载和解压# 统一放在 /usr/local/src 下方便后续清理 cd /usr/local/src wget https://download.redis.io/releases/redis-6.2.14.tar.gz tar -zxvf redis-6.2.14.tar.gz cd redis-6.2.14编译之前先想好安装路径。我一般不用make install默认装到/usr/local/bin而是指定PREFIX把二进制和配置文件分开管理# PREFIX 指定安装根目录后续所有节点共用这一份二进制 make PREFIX/usr/local/redis6 MALLOClibc -j$(nproc) make PREFIX/usr/local/redis6 installMALLOClibc这个参数在 CentOS 上建议加上默认的 jemalloc 在某些内核版本下会有内存碎片问题libc 的 malloc 更稳。-j$(nproc)是按 CPU 核数并行编译能快不少。装完之后/usr/local/redis6/bin下会有redis-server、redis-cli、redis-benchmark等可执行文件。目录规划上我习惯给每个节点单独一个目录比如/data/redis/7001、/data/redis/7002每个目录里放自己的redis.conf、日志、RDB/AOF 文件和集群配置文件。这样后面脚本生成配置时路径替换逻辑简单出问题也好定位是哪个节点。提示CentOS 8 的wget如果提示证书问题先yum install -y ca-certificates更新根证书再重试。3. 脚本拆解与手动部署一键背后到底做了什么3.1 脚本的目录结构与执行入口拿到redis集群一键自动部署脚本.rar之后先解压看结构。这类脚本通常包含一个主入口 shell、一个配置模板、一个节点生成逻辑可能还有一份 README。解压命令# 安装 unrarCentOS 默认没有 yum install -y unrar unrar x redis集群一键自动部署脚本.rar /opt/redis-cluster-script/ cd /opt/redis-cluster-script/ ls -l假设解压后看到deploy.sh、redis.conf.tpl、nodes.conf.tpl这几个文件。deploy.sh是入口redis.conf.tpl是配置模板脚本会读取模板里的占位符替换成每个节点的端口、路径、集群总线端口然后生成实际的redis.conf。这种模板替换的做法比在脚本里硬编码sed命令要清晰改参数只需要动模板。执行前先给脚本加执行权限并且用bash -x跑一遍看它到底执行了哪些命令这一步很重要能提前发现路径写死、变量未定义之类的问题chmod x deploy.sh # -x 打印每条执行的命令-n 只做语法检查不执行 bash -n deploy.sh bash -x deploy.sh 21 | head -50如果脚本里写死了/usr/local/redis这种路径而你的二进制装在/usr/local/redis6就需要改脚本里的REDIS_HOME变量。我一般会在脚本开头找REDIS_HOME、NODE_COUNT、BASE_PORT这几个变量确认它们和实际环境一致再往下走。3.2 节点配置模板的关键参数不管脚本怎么封装最终落到每个节点上的redis.conf才是决定集群能不能起来的东西。下面这份是脚本模板里最核心的一段我按参数逐个说明# 节点端口集群模式下每个节点必须不同 port 7001 # 集群总线端口默认是 port 10000节点间通信走这个端口 cluster-enabled yes # 集群配置文件记录节点 ID、槽位分配、主从关系必须可写 cluster-config-file nodes-7001.conf # 节点超时时间单位毫秒超过这个时间没响应就认为节点下线 cluster-node-timeout 15000 # 开启 AOF 持久化集群模式下建议开RDB 在故障恢复时可能丢更多数据 appendonly yes appendfilename appendonly-7001.aof # 绑定地址集群节点间需要互通不能只绑 127.0.0.1 bind 0.0.0.0 # 关闭保护模式否则外部无法连接 protected-mode no # 后台运行 daemonize yes # 日志和数据的存放路径每个节点独立 dir /data/redis/7001 logfile /data/redis/7001/redis.logcluster-node-timeout这个值我一般设 15000默认的 15000 在虚拟机或跨机房场景下偏短容易误判。如果节点部署在同一台机器上做测试5000 也能跑但生产环境别低于 10000。cluster-config-file的路径一定要和dir配合好脚本生成时如果只写了文件名Redis 会把它放在dir下这没问题但如果写了绝对路径而目录不存在节点启动会直接失败。appendonly yes在集群里不是必须但一旦某个主节点挂了从节点提升为主AOF 能让数据恢复更完整。代价是磁盘 IO 和文件体积测试环境可以关掉换性能。3.3 手动跑一遍集群创建命令脚本封装得再好你也得知道它背后调的是什么。Redis 6 用redis-cli --cluster创建集群假设六个节点分别在 7001 到 7006三主三从# 先逐个启动节点 for port in 7001 7002 7003 7004 7005 7006; do /usr/local/redis6/bin/redis-server /data/redis/$port/redis.conf done # 创建集群--cluster-replicas 1 表示每个主节点配一个从节点 /usr/local/redis6/bin/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执行后会提示你确认槽位分配方案输入yes回车。如果卡在Waiting for the cluster to join八成是集群总线端口没通检查防火墙有没有放行 17001 到 17006。脚本通常会自动处理这些但手动跑一遍能让你在脚本出问题时知道卡在哪一步。注意--cluster-replicas 1里的 1 是每个主节点的从节点数量不是从节点总数。六个节点三主三从这个值就是 1如果九个节点三主六从要写 2。4. 避坑与排查集群起不来时先看这五条4.1 现象节点启动后cluster_state:fail原因通常是槽位没有完全分配或者有节点没加入集群。用redis-cli -p 7001 cluster info看cluster_state如果是fail再看cluster slots有没有覆盖 0 到 16383。解决方法是重新执行--cluster create或者在已有集群上用--cluster fix修复/usr/local/redis6/bin/redis-cli --cluster fix 127.0.0.1:7001fix会尝试重新分配槽位和修复主从关系但前提是节点之间网络是通的。4.2 现象Waiting for the cluster to join一直不结束这是最经典的坑。原因有两个一是集群总线端口被防火墙拦了二是bind配置只绑了 127.0.0.1节点间用内网 IP 通信时连不上。解决# 放行集群总线端口假设节点端口 7001-7006 firewall-cmd --permanent --add-port17001-17006/tcp firewall-cmd --reload # 或者临时关掉防火墙排查生产别这么干 systemctl stop firewalld同时确认redis.conf里bind 0.0.0.0或者绑了正确的内网 IPprotected-mode no。4.3 现象重启后集群信息丢失节点变成独立实例原因是cluster-config-file指向的nodes-*.conf被删了或者路径不可写。这个文件记录节点 ID 和集群状态Redis 启动时会读它读不到就当新节点处理。解决检查dir目录权限确保 Redis 运行用户有写权限脚本生成配置时别把nodes.conf放在/tmp这种会被清理的目录。4.4 现象gem install redis报错Unable to require openssl这是 CentOS 7 上 ruby 环境的老问题openssl-devel没装或者 ruby 编译时没链接到 openssl。解决yum install -y openssl-devel # 如果还不行换用 redis-cli --cluster彻底绕开 ruby这也是我推荐 Redis 5 以上版本的原因少一层依赖少一堆事。4.5 现象脚本执行到一半报Permission denied原因通常是脚本里用了sudo但当前用户不在 sudoers 里或者目标目录属主不对。解决用 root 执行或者提前chown -R redis:redis /data/redis。我一般会创建一个专用用户跑 Redis不用 root降低误操作风险。5. 装完怎么验证从集群状态到读写压测走一遍集群创建完不算完得验证它真的能扛住读写和故障切换。我习惯按下面这个顺序走一遍每一步都有明确的预期结果。第一步看集群整体状态。在任意节点执行/usr/local/redis6/bin/redis-cli -p 7001 cluster info预期输出里cluster_state:ok、cluster_slots_assigned:16384、cluster_known_nodes:6、cluster_size:3。这四个值对不上说明集群没建完整回到第 4 章排查。第二步看槽位分配和主从关系/usr/local/redis6/bin/redis-cli -p 7001 cluster nodes输出里每个节点一行master和slave角色清楚从节点后面会跟着它对应的主节点 ID。确认三主三从且每个主节点都有从节点挂载。第三步做一次跨槽读写。集群模式下redis-cli要加-c参数才会自动重定向到正确节点# -c 开启集群模式key 会被重定向到对应槽位的节点 /usr/local/redis6/bin/redis-cli -c -p 7001 set foo bar /usr/local/redis6/bin/redis-cli -c -p 7001 get foo如果set返回OKget返回bar说明读写链路通了。再试一个会落到不同槽位的 key比如set hello world观察它是否被重定向到另一个节点。第四步模拟故障切换。找到 7001 对应的从节点端口假设是 7004先kill掉 7001 的进程然后等cluster-node-timeout时间15 秒过去再看cluster nodes# 杀掉主节点进程 kill $(cat /data/redis/7001/redis.pid) # 等待 15 秒以上观察从节点是否提升为主 sleep 20 /usr/local/redis6/bin/redis-cli -p 7002 cluster nodes预期是 7004 从slave变成master并且接管了 7001 原来的槽位。如果没切换检查cluster-node-timeout是不是设太长或者从节点和主节点之间的网络是不是有问题。第五步用redis-benchmark做一轮压测确认集群在负载下不崩# -c 并发连接数-n 总请求数--cluster 让 benchmark 走集群模式 /usr/local/redis6/bin/redis-benchmark -h 127.0.0.1 -p 7001 -c 50 -n 10000 --cluster看requests per second和latency两个指标只要没有大量 error延迟在可接受范围这套集群就算跑通了。最后说个我自己的习惯每次装完集群我会把cluster nodes的输出和redis.conf里改过的参数一起存一份到/data/redis/cluster-snapshot-$(date %F).txt。半年前那次救火如果朋友当时留了这份快照恢复时至少能省两个小时。从那以后我每次部署完都强制走一遍这个快照留存不管多熟的流程。希望这套脚本和上面的验证步骤能帮你把 Redis 集群在 CentOS 上真正跑稳。本文还有配套的精品资源点击获取

相关新闻

Teamcenter结构管理器内嵌视图融合实战指南

Teamcenter结构管理器内嵌视图融合实战指南

1. 项目概述:在Teamcenter结构管理器中“嵌入式”展示其他视图,不是跳转,而是共存Teamcenter结构管理器(Structure Manager)是PLM系统中最常用、最核心的透视图之一,工程师每天花大量时间在这里展开BOM、拖…

2026/10/16 13:09:08 阅读更多 →
Perplexity 给运通会员发“商务技能“:AI 大厂开始把 Skills 当会员权益卖了

Perplexity 给运通会员发“商务技能“:AI 大厂开始把 Skills 当会员权益卖了

Perplexity 给运通会员发"商务技能":AI 大厂开始把 Skills 当会员权益卖了 【免费下载链接】marketingskills Marketing skills for Claude Code and AI agents. CRO, copywriting, SEO, analytics, and growth engineering. 项目地址: https://gitcode…

2026/10/16 13:08:08 阅读更多 →
C++学生类设计:从语法练习到面向对象思维训练

C++学生类设计:从语法练习到面向对象思维训练

1. 这道题不是考语法,是考“人怎么想清楚一件事”刚看到这个标题时,我下意识皱了眉头——不是因为难,而是因为它太典型:表面是C类定义练习,实则是一次对“抽象能力”的现场压力测试。很多学生写完代码跑通了&#xff0…

2026/10/16 13:08:08 阅读更多 →

最新新闻

规范驱动开发三剑客:Spec Kit、Superpowers与OpenSpec选型指南

规范驱动开发三剑客:Spec Kit、Superpowers与OpenSpec选型指南

1. 规范驱动开发到底在解决什么问题1.1 从“代码先写、文档后补”到“规范先行”的转变做开发时间长了,你会发现一个很普遍的现象:需求文档写完就没人看了,代码写完也没人补文档,最后整个项目的知识全散落在不同人的脑子里。等到有…

2026/10/16 13:53:37 阅读更多 →
ResNet任意尺寸输入改造指南:从池化替换到全卷积实战

ResNet任意尺寸输入改造指南:从池化替换到全卷积实战

1. 问题诊断:ResNet为何会对输入尺寸“挑食” 做深度学习项目久了你一定会碰到这个场景:训练时图片尺寸是224x224,结果推理时来了张1920x1080的图,直接一缩放塞进去,小目标全糊了。更头疼的是,有时候连模型…

2026/10/16 13:53:37 阅读更多 →
横评 5 大 AI 决策模型:8B 开源黑马几乎逆袭 Jev,付费墙还能撑多久?

横评 5 大 AI 决策模型:8B 开源黑马几乎逆袭 Jev,付费墙还能撑多久?

横评 5 大 AI 决策模型:8B 开源黑马几乎逆袭 Jev,付费墙还能撑多久? 【免费下载链接】openjev 项目地址: https://ai.gitcode.com/hf_mirrors/AlexWortega/openjev 2026 年 9 月,TypeSafe AI 前 OpenAI 研究员 Diogo Alme…

2026/10/16 13:53:37 阅读更多 →
Star Rat 3.1源码升级版:内网资产盘点与状态监控实践

Star Rat 3.1源码升级版:内网资产盘点与状态监控实践

简介:Star Rat 3.1源码升级版是一套面向Windows平台的远程控制软件源代码,适合有C/C基础的安全开发人员、系统管理员及对远控原理感兴趣的进阶学习者。其核心价值在于提供完整可编译的工程,较为全面地展示了远控软件的通信、控制与界面实现思…

2026/10/16 13:53:37 阅读更多 →
为什么做智能分类要选fast-decisions?GLiNER2.5-Decide决策数据套件初探

为什么做智能分类要选fast-decisions?GLiNER2.5-Decide决策数据套件初探

【免费下载链接】fast-decisions 项目地址: https://ai.gitcode.com/hf_mirrors/fastino/fast-decisions 点击查看 免费下载 fast-decisions 是 Fastino 官方为 GLiNER2.5-Decide 智能分类模型发布的一套决策数据套件:17 个真实业务领域、每个领域 100 …

2026/10/16 13:53:37 阅读更多 →
Mosaico全景解读:面向Physical AI的机器人数据平台,5大核心能力让你告别.bag文件

Mosaico全景解读:面向Physical AI的机器人数据平台,5大核心能力让你告别.bag文件

【免费下载链接】mosaico Mosaico - The data platform for Physical AI 项目地址: https://gitcode.com/gh_mirrors/mosai/mosaico 点击查看 免费下载 Mosaico 是一款面向 Physical AI 与机器人场景的开源数据平台,能把 ROS .bag、.mcap 这类单体传感器…

2026/10/16 13:52:36 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →