新闻详情

新闻详情

首页 / 资讯中心 / 详情

银河麒麟V10源码编译安装Redis 7.0.14完整指南

发布时间:2026/10/2 6:58:02来源:尧图网络
银河麒麟V10源码编译安装Redis 7.0.14完整指南
前阵子在银河麒麟V10服务器上部署Redis网上翻了不少帖子要么直接照搬Ubuntu那套流程要么写着“亲测可用”结果一跑就崩。折腾了小半天踩了好几个坑最后把Redis 7.0.14在银河麒麟上稳定跑了起来。这篇就把整个安装过程、配置细节和排错办法完整记录一遍给需要在国产系统上装Redis的朋友做个参考。银河麒麟虽然底层是Linux命令习惯和CentOS比较接近但软件源、依赖库和主流发行版有差异装中间件时很多细节需要单独处理不能盲目抄别人的教程。1. 安装前的方案选择与整体思路1.1 银河麒麟系统的几个明显特点银河麒麟V10不是简单的换皮Linux它面向服务器和桌面场景做了很多定制。先说几个和Redis安装直接相关的点默认软件源里面不一定有Redis就算有版本也可能比较老跟不上需求。gcc、make这些编译工具未必预装或者预装的gcc版本偏低编译新版Redis会报错。系统的安全策略比如SELinux、firewalld默认状态不一定和CentOS一致会导致Redis启动后外部访问失败。文件目录权限管理比较严格尤其是用systemd托管服务时如果Redis工作目录的属主不对启动会直接失败。我之前在云服务器上装Redis习惯用yum直接装但在麒麟上执行yum list redis提示没有可用包。这就意味着不能用“懒人方式”要么自己找rpm包要么走源码编译。1.2 三种安装方式的对比我在正式动手前把几种常见安装方式做了个对比安装方式优点缺点我的判断软件源安装命令简单依赖自动处理麒麟默认源没有Redis需要额外配源版本不可控不推荐容易引入源管理问题第三方rpm包安装速度快不用编译rpm包和系统库版本可能不匹配遇到兼容问题很难排查看运气生产环境不推荐源码编译版本自主控制兼容性最稳步骤多需要编译工具耗时长最推荐亲测最可靠Redis本身是C语言写的编译依赖很少只要gcc、make、tcl这几个东西到位源码编译的成功率几乎百分之百。这也是我最终选择源码编译的原因。1.3 为什么不用Docker跑Redis我知道很多人会说“用Docker不就完事了”确实如果机器上已经装了Dockerdocker run redis一条命令就能搞定。但需要注意银河麒麟服务器在政企环境里往往对容器方案有额外要求而且Docker跑Redis还得处理数据卷映射、网络模式、日志收集如果宿主机本身没装Docker为了一个Redis装一套容器运行时反而把事情搞复杂了。我这边还涉及到和现有监控、备份脚本的对接直接以systemd服务方式跑原生二进制管理路径最清晰。2. 环境准备与依赖安装2.1 先确认系统版本、架构和当前用户安装之前先把底细摸清楚这几条命令必须执行cat /etc/os-release uname -a whoamios-release能看到系统名称和版本号uname -a能确认内核架构是x86_64还是aarch64这决定了下源码包之后编译方式和参数是否要调整。多数服务器是x86_64如果遇到ARM架构的机器后面编译命令不需要改但需要注意部分依赖库可能不同。同时确认当前用户。Redis编译安装不强制root但后续要写入/opt、创建系统用户、配置systemd服务这些都需要root权限。我建议直接用root操作或者使用sudo -i切换到root环境省得每条命令前面都加sudo也避免权限问题干扰判断。提示如果服务器正在跑业务先确认一下编译不会影响线上服务。Redis源码编译很轻量但在生产服务器上还是尽量避免在业务高峰时段编译大项目。2.2 安装编译工具和基础依赖麒麟系统的软件源里没有Redis但gcc、make、tcl这些基础工具还是有的。执行sudo yum install -y gcc make tcl为什么特意装tcl因为Redis源码编译后有个make test自检流程需要tcl脚本解释器。如果不装tcl测试阶段会报错“You need tcl 8.5 or newer in order to run the Redis test”虽然不影响最终编译但少了一层验证心里不踏实。依赖装完后用gcc --version和make --version确认版本。我这边gcc版本是4.8.5编译Redis 7.x是够用的如果低于4.8则建议先升级gcc。2.3 下载Redis源码包并校验完整性去Redis官网下载稳定版源码包。我用的是7.0.14这个版本经过了长时间验证稳定可靠。cd /usr/local/src wget https://download.redis.io/releases/redis-7.0.14.tar.gz下载完成后校验一下文件SHA256官网页面会给出校验值sha256sum redis-7.0.14.tar.gz这条命令的用途主要是防止下载过程中文件损坏。实际工作时经常有人跳过这一步结果编译到一半报“文件格式无法识别”再回头排查浪费大量时间。3. 源码编译与目录规划3.1 一步步完成解压、编译和自检解压源码包并进入目录tar xzf redis-7.0.14.tar.gz cd redis-7.0.14接下来编译-j4表示用4个并行任务加速编译如果服务器CPU核数少改成-j2即可make -j4编译过程中可能会看到一些warning比如“warning: ‘xxxx’ is deprecated”这些一般不影响使用不用过度紧张。真正需要关注的是是否有error字样出现error时编译会中断。编译完成后不要急着安装先跑一遍内建测试make test这一步会执行大量单元测试和集成测试时间可能要几分钟。看到最后输出类似\o/ All tests passed without errors!的提示就说明这套编译产物是可信的。我实测下来只要依赖安装正确测试基本都能通过。3.2 指定安装目录方便后期统一管理测试通过后执行安装命令。这里我用了PREFIX参数把Redis单独安装到一个独立目录make install PREFIX/opt/redis/redis-7.0.14安装完成后可执行文件在/opt/redis/redis-7.0.14/bin下包括redis-server、redis-cli、redis-benchmark、redis-check-aof等核心工具。为什么不直接用默认的/usr/local因为在运维规范要求严格的服务器上中间件统一放在/opt或/app下方便做目录隔离和后期批量升级。比如以后要升级Redis 7.2可以再解压一个新目录修改软链指向启动时一键切换回滚也快。为了让redis-cli命令全局可用我在/etc/profile.d/redis.sh里加入了环境变量export PATH$PATH:/opt/redis/redis-7.0.14/bin保存后执行source /etc/profile.d/redis.sh再执行redis-server --version验证Redis server v7.0.14 sha00000000:0 malloclibc bits64 buildxxxxxx到这里Redis本体已经安装成功接下来是配置和托管。4. 配置Redis和systemd管理4.1 准备配置目录、数据目录和日志目录Redis需要三个核心目录配置目录/etc/redis存放redis.conf数据目录/data/redis存放RDB和AOF持久化文件日志目录/var/log/redis存放运行日志命令如下mkdir -p /etc/redis mkdir -p /data/redis mkdir -p /var/log/redis然后把源码包里的默认配置复制到配置目录cp /usr/local/src/redis-7.0.14/redis.conf /etc/redis/redis.conf4.2 修改redis.conf中的关键配置项Redis默认配置适合本地开发生产环境必须手动调整几个点。我用vim打开配置文件逐项修改。先看daemonize。默认是daemonize no也就是前台运行。可能有人习惯改成yes让Redis后台运行但当我们用systemd托管时这个选项必须保持no。因为systemd需要直接管理前台进程如果Redis自己fork到后台systemd会认为服务已经退出导致管理混乱、状态不准确。再看网络访问控制bind 127.0.0.1 -::1默认只允许本机访问。如果Redis只给本机应用用保持默认完全没问题。但如果其他服务器需要连上来就需要修改bind。我这边改成bind 0.0.0.0 -::10.0.0.0表示监听所有IPv4地址。改完后要同步处理protected-mode和密码protected-mode yes requirepass MyStrongPassw0rdprotected-mode yes是一个安全兜底机制当Redis没有密码且监听所有网卡时只允许本机回环地址连接如果设置里要求远程访问就一定要配置requirepass。密码别用太简单的数字字母符号组合是基本要求。然后是持久化配置。为了保证数据重启不丢开启AOFappendonly yes appendfsync everysec dir /data/redis logfile /var/log/redis/redis.logdir /data/redis决定RDB文件和AOF文件的落盘位置必须和之前创建的目录一致。logfile指定日志位置不配置的话日志会输出到标准输出在systemd环境下容易收集不到。4.3 创建redis用户并设置文件属主安全加固角度不建议直接用root用户跑Redis服务。创建一个专用系统用户useradd -s /sbin/nologin -M redis创建完用户后把数据目录和日志目录的属主改成redis否则Redis进程写数据时没有权限chown -R redis:redis /data/redis chown -R redis:redis /var/log/redis4.4 编写systemd服务文件在/etc/systemd/system/redis.service中创建服务配置[Unit] DescriptionRedis Server Afternetwork.target [Service] Typesimple Userredis Groupredis ExecStart/opt/redis/redis-7.0.14/bin/redis-server /etc/redis/redis.conf ExecStop/opt/redis/redis-7.0.14/bin/redis-cli -a MyStrongPassw0rd shutdown Restartalways LimitNOFILE65535 [Install] WantedBymulti-user.target这里面有几个细节值得解释。Typesimple表示systemd将ExecStart启动的进程直接作为主服务进程。配合daemonize noRedis不会二次forksystemd能准确跟踪进程状态。Restartalways让异常退出后自动拉起对于常驻服务非常实用但要注意如果Redis因为配置错误反复崩溃systemd会快速重启排查时看日志更关键。LimitNOFILE65535提高文件描述符上限。Redis在连接数较多时默认1024不够用不设置的话会出现“Too many open files”错误。配置好后重新加载systemd并设置开机自启systemctl daemon-reload systemctl enable --now redis启动后查看状态systemctl status redis看到active (running)说明服务已经起来了。再用客户端测一下/opt/redis/redis-7.0.14/bin/redis-cli -a MyStrongPassw0rd ping输入正确密码后返回PONG表明Redis可以正常读写。4.5 快速验证性能安装完成后我用自带的redis-benchmark做了个简单压测主要看基础性能是否正常/opt/redis/redis-7.0.14/bin/redis-benchmark -h 127.0.0.1 -p 6379 -a MyStrongPassw0rd -n 100000 -c 50我这边结果大约是每秒10万次SET/GET对于单机Redis来说属于正常水平。这个压测不求跑分多高主要是验证服务在并发下的稳定性。5. 常见问题与排查技巧实录5.1 编译报错找不到jemalloc头文件这是我第一次编译时遇到的典型错误报错信息zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory原因Redis默认使用jemalloc内存分配器但系统源码树里没有对应的头文件。解决办法是编译时切换到libc内存分配器make MALLOClibc如果你的环境需要保留jemalloc也可以先安装jemalloc依赖再重新编译。但大多数场景下MALLOClibc就够了实测性能和jemalloc差距很小。5.2 systemd服务启动失败没有权限写日志如果看到这样的日志Could not create server TCP listening socket *:6379: bind: Permission denied或者Redis启动后立即退出去日志里查经常是/var/log/redis/redis.log无法创建。这是因为我用redis用户启动服务但目录属主还是root。解决办法就是前面说的chown -R redis:redis /var/log/redis chown -R redis:redis /data/redis5.3 远程连不上RedisRedis进程明明起来了但从其他机器用redis-cli -h 服务器IP连接提示超时或拒绝。排查顺序看redis.conf里bind是否已经改为0.0.0.0改完要重启服务生效。看protected-mode是否为yes并且没设密码。如果protected-mode yes且没有密码非本机连接会被拒绝。设了强密码通常没问题。看防火墙是否放行6379端口。银河麒麟的防火墙通常是firewalld放行端口命令sudo firewall-cmd --add-port6379/tcp --permanent sudo firewall-cmd --reload如果服务器开启了SELinux还得检查是否拦截。可以用getenforce查看状态如果是Enforcing考虑对Redis端口放行或者直接设置适当上下文。5.4 redis-cli连接提示NOAUTH提示NOAUTH Authentication required是因为没带密码。连接时加-a参数即可。但要注意-a在命令行会把密码暴露到历史记录里。我通常用环境变量方式export REDISCLI_AUTHMyStrongPassw0rd redis-cli ping这样既安全又方便。5.5 常见问题速查表症状原因解决方法编译报错jemalloc/jemalloc.h缺少jemalloc头文件make MALLOClibc运行make test报缺少tcl没装tclyum install -y tclsystemd启动失败日志显示Permission denied数据/日志目录属主不是redischown -R redis:redis对应目录远程连接超时防火墙未放行firewall-cmd --add-port6379/tcp --permanent连接后拒绝访问bind仅127.0.0.1修改bind并重启提示NOAUTH未认证使用-a或REDISCLI_AUTH6. 生产环境下的几个实用调优点6.1 内存上限和淘汰策略如果Redis不限制内存数据量大了会直接拖垮操作系统。打开redis.conf设置maxmemory 1gb maxmemory-policy allkeys-lrumaxmemory根据服务器物理内存合理配置别把系统内存耗光。allkeys-lru表示当内存达到上限时按LRU算法淘汰最久未使用的键适合大多数缓存场景。如果Redis存的是不可丢的重要数据需要仔细评估淘汰策略不能盲用。6.2 RDB和AOF的取舍Redis默认开启RDB快照但我额外开了AOF双保险。RDB适合快速恢复大规模数据AOF能保证最多丢失1秒的数据。配置里关键参数save 900 1 save 300 10 save 60 10000 appendonly yes appendfsync everysecappendfsync everysec是性能和安全的折中方案每秒钟同步一次AOF文件Redis官方也推荐这个值。如果对数据安全要求极高可以改成always但写入性能会明显下降实际使用要根据业务选。6.3 安全加固小技巧出于安全考虑我关闭了危险命令重命名或禁用。在redis.conf里加rename-command FLUSHALL rename-command FLUSHDB rename-command KEYS 这样即使Redis被入侵攻击者也执行不了清空操作。KEYS命令在线上也要慎用尤其大数据量时会阻塞单线程Redis我用SCAN替代。6.4 本地缓存和连接池建议Redis安装好只是第一步业务使用还要注意别频繁创建连接。在Java里用Lettuce或Jedis连接池时maxTotal别设置过大一般20到50足够了。连接数太大反而增加Redis压力。最后说几句这次在银河麒麟上装Redis最大的体会是“慢工出细活”。网上很多教程让你直接复制粘贴但忽略了各系统之间的差异。官方源码编译其实是最稳的路子一次配置好后面运维非常省心。还有一个小技巧redis.conf里daemonize这件事只要用systemd管理就一定要保持no。之前我有台机器一直设成yes导致每次systemctl restart redis都出现两个进程数据写入错乱查了很久才发现是这个参数的问题。如果后续要升级Redis建议不要覆盖旧目录而是下载新版本编译到独立目录改一下systemd服务里的ExecStart路径重启后看日志确认正常再切换。这样万一新版有问题随时能回滚。希望这篇折腾记录能帮到正在和银河麒麟斗智斗勇的朋友。如果遇到文章里没写到的问题欢迎在评论区把报错信息发出来共同讨论。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

openrig 编排方案:统一管理 Claude Code 与 Codex 的模型接入配置 2026/10/2 7:52:28

openrig 编排方案:统一管理 Claude Code 与 Codex 的模型接入配置

1. openrig 到底想解决什么问题第一次看到openrig这个名字,我下意识把它拆成了 "open" "rig" 两个部分。rig 在工程语境里通常指"装配、搭台、把一堆零件组合成能跑的系统",而 open 则暗示了开放、可插拔、不绑定单一供应…

阅读更多 →
AI Skill 查不到数据?scripts、CLI、MCP 三种接口调用方式详解与排查指南 2026/10/2 7:52:28

AI Skill 查不到数据?scripts、CLI、MCP 三种接口调用方式详解与排查指南

装了个 AI Skill 却查不了数据,这种事儿我最近真没少碰。上个月给 AI Agent 配了个销售数据查询类 Skill,装完之后信心满满,上来就让 AI"查一下本月华东区销售额",结果它愣是给我回了一句"我无法直接访问数据库&am…

阅读更多 →
从概念到量产:新产品开发六阶段流程与评审PPT设计指南 2026/10/2 7:52:22

从概念到量产:新产品开发六阶段流程与评审PPT设计指南

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

阅读更多 →
AI审图系统从零搭建:图纸解析与规则引擎的工程实践 2026/10/2 7:52:22

AI审图系统从零搭建:图纸解析与规则引擎的工程实践

1. 审图这件苦差事,凭什么值得AI来做?我自己搭过两套AI审图系统,一套是给建筑设计施工图用的,一套是给制造类图纸做一致性检查用的。说句实话,“AI审图系统”这六个字,在没有真正落地之前,听起来…

阅读更多 →
Dify+Ollama+DeepSeek搭建私有AI平台:本地优先云端兜底实战 2026/10/2 7:52:15

Dify+Ollama+DeepSeek搭建私有AI平台:本地优先云端兜底实战

我这两年最大的一个感触是:做 AI 应用,最不该先想着“写代码调 API”。API 这东西,按量付费、按 token 计费,短时间内看着便宜,真跑起来就成了无底洞。尤其是我这种喜欢折腾、手上有好几台机器、又不愿意把内部数据随便…

阅读更多 →
C语言main函数标准写法:int main(void)为何是唯一安全选择 2026/10/2 7:52:08

C语言main函数标准写法:int main(void)为何是唯一安全选择

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉