首先查看系统CPU架构及系统版本:
粗略信息:
hostnamectl
详细系统版本:
cat /etc/os-release
一、Redis 编译安装需要哪些环境
Redis 本身依赖不多,核心是:
| 软件 | 作用 | 是否必须 |
|---|---|---|
| gcc | C 编译器 | 必须 |
| gcc-c++ | C++ 编译支持 | 建议 |
| make | 编译工具 | 必须 |
| tcl | Redis 测试工具 | 可选 |
| jemalloc-devel | Redis 内存分配优化 | 建议 |
| tar | 解压源码 | 必须 |
麒麟 V10 基本兼容 CentOS/RHEL 生态。
二、先在离线服务器检测环境
下面给你一个完整检测脚本。
创建脚本:
mkdir /opt/redis_make
vi /opt/redis_make/check_redis_env.sh
内容:
#!/bin/bash
echo "=============================="
echo " Redis 编译环境检测"
echo "=============================="
missing=0
check_cmd () {
if ! command -v $1 >/dev/null 2>&1; then
echo ""
echo "[缺失] $1"
echo "作用: $2"
echo "必要性: $3"
missing=1
fi
}
check_rpm () {
if ! rpm -q $1 >/dev/null 2>&1; then
echo ""
echo "[缺失] $1"
echo "作用: $2"
echo "必要性: $3"
missing=1
fi
}
# 检测命令
check_cmd gcc "Redis源码编译所需C编译器" "必须"
check_cmd make "执行Makefile完成Redis编译" "必须"
check_cmd tar "解压Redis源码包" "必须"
# 检测rpm包
check_rpm gcc-c++ "部分依赖可能需要C++环境" "建议"
check_rpm jemalloc-devel "Redis高性能内存管理库" "不用,redis自带"
check_rpm tcl "Redis执行make test需要" "可选"
echo ""
if [ $missing -eq 0 ]; then
echo "检测结果: Redis编译环境已满足"
else
echo "检测结果: 存在缺失环境"
echo "请根据缺失项准备对应rpm安装包"
fi
三、赋予执行权限
chmod +x /opt/redis_make/check_redis_env.sh
执行:
/opt/redis_make/check_redis_env.sh
四、如何准备离线 rpm 包
在另一台联网的麒麟/CentOS/RHEL机器下载 rpm 包,再拷贝进去
如果不知道下载那个版本
看 glibc 判断生态
情况1:glibc 2.28
通常兼容:
- CentOS8
- Rocky8
- AlmaLinux8
- RHEL8
可用 EL8 rpm
情况2:glibc 2.17
通常兼容:
- CentOS7
- RHEL7
可用 EL7 rpm
五、联网机器下载 Redis 编译依赖
方式1(推荐):使用 yumdownloader
先安装:
yum install yum-utils -y
创建目录:
mkdir redis_rpms
cd redis_rpms
下载:
yumdownloader --resolve \
gcc \
gcc-c++ \
make \
tcl \
jemalloc-devel \
tar
作用:
--resolve
会自动下载依赖链。
方式2:在联网服务器中查看版本,并在网上下载
先搜索联网服务器中相关版本,入vim:
rpm -qf $(which vim)
得出相关版本到对应发行商rpm源中下载:
查不出具体的系统版本,可以去系统默认的rpm源查看,系统指向的那个路径,一般路径中就有对应的版本
进入源存放目录:
cd /etc/yum.repos.d/
查看目录下源内容
#麒麟服务器系统:
cat kylin_x86_64.repo
#openEuler:
cat openEuler.repo
麒麟V10: [Index of /NS/V10/V10SP3/os/adv/lic/base/x86_64/Packages/](Index of /NS/V10/)
openEuler: repo.openeuler.org/openEuler-24.03-LTS-SP2/OS/x86_64/Packages/
下在对应rpm,并上传
安装:
rpm -ivh *********.rpm
六、拷贝到离线服务器
可以用:
- U盘
- SCP
- WinSCP
- rz/sz
例如:
scp *.rpm root@离线服务器IP:/opt/redis_rpms/
七、离线安装 rpm 包
进入目录:
cd /opt/redis_make
执行:
rpm -Uvh *.rpm --force --nodeps
如果依赖顺序问题严重:
推荐:
yum localinstall -y *.rpm
即使离线也能安装本地 rpm。
八、再次检测环境
重新执行:
./check_redis_env.sh
直到:
检测结果: Redis编译环境已满足
九、准备 Redis 源码包
联网机器下载:
推荐稳定版:
redis-6.2.22.tar.gz
官方下载:
或者源码:
上传到服务器:
例如:
/opt/redis/
十、解压 Redis
移动文件:
mv redis-6.2.22.tar.gz /opt/redis_make/
进入目录:
cd /opt/redis_make/
解压:
tar -zxvf redis-6.2.22.tar.gz -C /opt/redis_make/
进入源码目录:
cd redis-6.2.22
十一、开始编译 Redis
直接编译:
make
正常会看到:
Hint: It's a good idea to run 'make test'
表示编译成功。
十二、如果编译失败(最常见)
1、gcc 不存在
报错:
cc: command not found
说明 gcc 没装。
2、jemalloc 编译失败
报错类似:
jemalloc/jemalloc.h: No such file
解决:
make MALLOC=libc
这是离线环境最常用方案。
完整命令:
make MALLOC=libc
十三、安装 Redis
创建安装目录:
mkdir -p /opt/redis6
执行:
make PREFIX=/opt/redis6/ install
说明:
| 参数 | 作用 |
|---|---|
| PREFIX | 安装目录 |
安装后可查看目录下/opt/redis6/bin是否包含:
redis-server
redis-cli
redis-benchmark
十四、创建 Redis 运行目录
mkdir -p /opt/redis6/conf
mkdir -p /opt/redis6/data
mkdir -p /opt/redis6/logs
十五、复制配置文件
cp /opt/redis_make/redis-6.2.22/redis.conf /opt/redis6/conf/
十六、修改 Redis 配置
编辑:
vi /opt/redis6/conf/redis.conf
如何在vi 编辑文档时查找内容
[!TIP]
打开文件(如果尚未打开):
vi /opt/redis6/conf/redis.conf进入命令模式:
按Esc键,确保你处于命令模式(左下角没有-- INSERT --提示)。输入搜索命令:
输入/requirepass然后按Enter。
/表示向下搜索requirepass是你要查找的文本跳转结果:
- 按
n键:跳到下一个匹配项- 按
N键:跳到上一个匹配项
修改:
*(必须配置)、日志文件
logfile "/opt/redis6/logs/redis.log"
*(必须配置)、后台运行
daemonize yes
*(必须配置)、数据目录
dir /opt/redis6/data
1、绑定IP
允许远程:
bind 0.0.0.0
仅本机:
bind 127.0.0.1
2、关闭保护模式(内网可关闭)
protected-mode no
3、端口
port 6379
4、添加密码
requirepass cqabj208
十七、启动 Redis
/opt/redis6/bin/redis-server /opt/redis6/conf/redis.conf
十八、检查 Redis 是否启动
查看进程:
ps -ef | grep redis
查看端口:
netstat -lntp | grep 6379
如果没有 netstat:
ss -lntp | grep 6379
十九、连接 Redis
/opt/redis6/bin/redis-cli
执行:
ping
返回:
PONG
说明安装成功。
二十、配置 systemd 服务(推荐)
创建:
vi /usr/lib/systemd/system/redis.service
内容:
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
ExecStart=/opt/redis6/bin/redis-server /opt/redis6/conf/redis.conf
ExecStop=/opt/redis6/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
二十一、加载服务
加载服务:
systemctl daemon-reload
记得停止刚刚启动Redis
ps -ef | grep redis #查询出PID,使用 kill -9 [PID] 杀掉进程
启动:
systemctl start redis
查看状态:
systemctl status redis
开机启动:
systemctl enable redis
二十二、离线环境最容易踩的坑
1、glibc 版本不兼容
联网机器下载 rpm 时:
必须:
- 同版本麒麟
- 同CPU架构
查看:
cat /etc/os-release
uname -m
2、gcc版本太低
Redis 7 推荐 GCC 5+
查看:
gcc -v
3、make 编译卡死
通常是:
- 内存不足
- swap不足
查看:
free -h
二十三、企业里更推荐的方法(非常重要)
很多生产环境:
不会源码编译 Redis。
而是:
直接准备编译好的二进制包
因为:
- 避免 gcc 环境
- 避免依赖地狱
- 更稳定
- 更容易标准化部署
也就是:
联网机器编译好:
make PREFIX=/opt/redis6 install
然后直接打包:
tar -zcvf /opt/redis6.tar.gz /opt/redis6
离线服务器直接解压即可运行。
这个是很多内网生产环境真实做法。

572

被折叠的 条评论
为什么被折叠?



