2018-10-18 · Tools

如何在 CentOS 7 上安装 Redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

redis-logo

本文记录下在 CentOS7 上源码编译安装 Redis 所遇到的坑。

一、使用 EPEL 镜像安装

Step 1 - 使用 yum 安装 EPEL 源

sudo yum install -y epel-release

Step 2 - EPEL 安装成功后,使用 yum 安装 redis

sudo yum install -y redis

Step 3 - 启动 redis

sudo systemctl start redis.service

Step 4 - 现在可以验证以下

redis-cli ping

如果一切正常将输出

PONG

二、使用源码编译安装

Step 1 - 确保安装所需依赖包

yum groupinstall "Development Tools" -y

Step 2 - 使用 wget 命令下载最新稳定版压缩包并解压

wget -c http://download.redis.io/redis-stable.tar.gz

tar -xvzf redis-stable.tar.gz

写这篇文章的时候 Redis 的最新稳定版本号是 Redis 4.0.11

Step 3 - 编译源码

cd redis-stable

make

编译完成后会有如下输出

...

Hint: It's a good idea to run 'make test' ;)

make[1]: Leaving directory `/root/redis-stable/src'

根据提示 make test

make test

这个时候就遇到如下的异常信息:

cd src && make test
make[1]: Entering directory `/root/redis-stable/src'
    CC Makefile.dep
make[1]: Leaving directory `/root/redis-stable/src'
make[1]: Entering directory `/root/redis-stable/src'
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] Error 1
make[1]: Leaving directory `/root/redis-stable/src'
make: *** [test] Error 2

再次根据提示操作

cd src && make test

继续报错

You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1

根据提示安装 tcl 并再次 make test

sudo yum install -y tcl

make test

看见如下输出就代表已经通过了编译测试


\o/ All tests passed without errors!

Cleanup: may take some time... OK

如果你的安装过程中还遇到了其他的错误,请查找下面的解决方案。如果找不到的话,请仔细查看下源码包中的 README.md 文件

1. jemalloc/jemalloc.h: No such file or directory

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/data0/src/redis-2.6.2/src'
make: *** [all] Error 2

如果是一些编译依赖或原来编译遗留出现的问题引起的话 使用 make distclean 清理一下。

make disclean

如果还是有错误的话,就需要使用 MALLOC 变量来编译 make MALLOC=libc, 具体原因参考 Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No such file or directory解决方法

make MALLOC=libc

2. cc: Command not found

出现这个原因是因为没有安装 gcc ,所以解决也是安装 gcc

yum install -y gcc

Step 4 - 安装和启动

注册为系统服务的启动

上面的操作已经编译了源码,根据具体情况选择是否将 Redis 注册为服务。

如果需要注册为服务的可以执行脚本

bash ../utils/install_server.sh

看见如下信息就代表注册成功,中间的选项都可以默认。

...
Starting Redis server... 
Installation successful! 

通过查看系统服务列表,来取得服务名

chkconfig --list

部分输出

redis_6379
0:off	1:off	2:on	3:on	4:on	5:on	6:off

知道了服务名称启动就简单了

sudo systemctl start redis_6379.service

如果你需要在一台机器上配置集器等需求,那就注册多个服务。比如 redis_6380.service

可执行文件启动

如果你不想注册为服务的话,可以将 Redis 的可执行文件 copy 出来也行。
同时上面 Step 3 我们编译源码后,在 src 目录下面几个可执行文件:

文件名 描述
mkreleasehdr.sh Use SOURCE_DATE_EPOCH over unreproducible uname + date calls.
redis-benchmark redis 性能测试工具
redis-check-aof AOF 文件检查工具
redis-check-rdb RDB 文件检查工具
redis-cli redis 命令行客户端
redis-sentinel redis 哨兵可执行文件(监控、提醒、自动故障迁移)
redis-server redis 服务端
redis-trib.rb redis 集器搭建脚本

复制上面的可执行文件和根目录下的 redis.conf 文件到你想要的目录,如:

mkdir ~/redis

cp {mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redis-server,redis-trib.rb,../redis.conf} ~/redis/

启动 redis

cd ~/redis

./redis-server redis.conf

如果你需要搭建集群等需求, copy 出多个目录就行。