Redis是一套内存内键-值存储方案,向来以出色的灵活性、性能与广泛的语言支持能力而著称。今天,我们将共同了解如何在Ubuntu 16.04服务器上安装并配置Redis。
先决条件
要完成本教程,大家首先需要接入一套Ubuntu 16.04服务器。另外,还需要一个非root用户并以sudo权限执行各项命令。
准备就绪后,利用sudo用户登入Ubuntu 16.04服务器。
安装Build并测试关联性
为了获取Redis的最新版本,我们需要从来源编译并安装该软件。在代码下载完成后,我们需要满足build关联性以编译该软件。
首先从Ubuntu库安装build-essential meta-package。另外还需要下载tcl软件包以用于二进制代码测试。
我们可以通过以下命令更新本地apt软件包缓存并安装关联性:
- sudo apt-get update
- sudo apt-get install build-essential tcl
下载、编译并安装Redis
接下来对Redis进行build。
下载并提取源代码
由于我们不需要长期保留源代码,因此可以直接在/tmp目录内进行build:
- cd /tmp
现在下载Redis最新版本,大家可以使用稳定下载URL:
- curl -O http://download.redis.io/redis-stable.tar.gz
解压tar:
- tar xzvf redis-stable.tar.gz
前往Redis源目录:
- cd redis-stable
Build并安装Redis
现在对Redis二进制代码进行编译:
- make
编译完成后,运行测试套件以确保built正确:
- make test
这一过程通常需要几分钟。完成后,大家可以使用以下命令进行安装:
- sudo make install
配置Redis
Redis已经安装完成,接下来进行配置。首先创建一个配置目录,这里我们使用/etc/redis目录:
- sudo mkdir /etc/redis
将Redis源归档文件内的示例Redis配置文件复制进来:
- sudo cp /tmp/redis-stable/redis.conf /etc/redis
而后打开文件并进行调整:
- sudo nano /etc/redis/redis.conf
在文件中找到supervised命令。现在其被设置为no。由于我们运行的操作系统使用systemd init系统,因此需要将其变更为systemd:
/etc/redis/redis.conf
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .
下面找到dir目录。此选项指定Redis用于放置持久数据的目录。我们需要挑选合适的位置,并确保Redis有权限写入但普通用户无权查看。
这里我们使用/var/lib/redis目录,稍后进行创建:
/etc/redis/redis.conf
. . .
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
. . .
完成后保存并退出。
创建Redis systemd Unit文件
接下来,我们可以创建一个systemd unit文件,从而利用该init系统管理Redis进程。
首先创建并打开/etc/systemd/system/redis.service文件:
- sudo nano /etc/systemd/system/redis.service
在这里,我们在[Unit]部分处添加一条描述,定义要求网络在服务启动前必须处于可用状态:
/etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
在[Service]部分,我们需要指定该服务的运作方式。出于安全考虑,我们不应以root方式运行服务。我们应当使用专用用户及群组,并以此调用redis。我们稍后再创建这部分内容。
要启动服务,我们只需要在配置中调用redis-server二进制文件。要将其关闭,则可使用Reids的shutdown命令,其可利用redis-cli加以执行。另外,由于我们希望Redis能够在故障情况下得到恢复,因此需要将Restart指令设定为“always”:
/etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]User=redisGroup=redisExecStart=/usr/local/bin/redis-server /etc/redis/redis.confExecStop=/usr/local/bin/redis-cli shutdownRestart=always
最后在[Install]部分,我们将systemd定义为在该服务可用时始终关联(即在引导过程中即行启动):
/etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]WantedBy=multi-user.target
完成后保存并退出。
创建Redis用户、群组与目录
现在我们创建前两个文件所引用的用户、群组与目录。
首先创建reids user与group,命令如下:
- sudo adduser --system --group --no-create-home redis
现在创建/var/lib/redis目录:
- sudo mkdir /var/lib/redis
为redis user与group分配此目录的所有权:
- sudo chown redis:redis /var/lib/redis
调整权限以确保普通用户无法访问该位置:
- sudo chmod 770 /var/lib/redis
启动并测试Redis
现在,我们可以启动Redis服务器了。
启动Redis服务
下面启动此systemd服务:
- sudo systemctl start redis
检查服务中是否存在错误:
- sudo systemctl status redis
结果应如下所示:
Output
redis.service - Redis Server
Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2016-05-11 14:38:08 EDT; 1min 43s ago
Process: 3115 ExecStop=/usr/local/bin/redis-cli shutdown (code=exited, status=0/SUCCESS)
Main PID: 3124 (redis-server)
Tasks: 3 (limit: 512)
Memory: 864.0K
CPU: 179ms
CGroup: /system.slice/redis.service
└─3124 /usr/local/bin/redis-server 127.0.0.1:6379
. . .
测试Redis实例功能
要测试服务是否正常起效,首先使用以下命令接入Redis服务器:
- redis-cli
在提示符中测试连接情况:
- ping
输出结果如下:
Output
PONG
大家可以设置需要的返回结果:
- set test "It's working!"
Output
OK
现在再次检查:
- get test
取得的则为预存值:
Output
"It's working!"
退出Redis提示符并返回shell:
- exit
作为最后一步测试,我们重启Redis实例:
- sudo systemctl restart redis
现在再次接入客户端并确认测试值仍然可用:
- redis-cli
- get test
返回的值应该仍然为:
Output
"It's working!"
完成后再次返回shell:
- exit
确保Redis在引导过程中启用
如果测试圆满成功,接下来要做的是确保Redis在引导过程中自动启用。
具体命令如下:
- sudo systemctl enable redis
Output
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.
总结
现在大家已经完成了Redis实例的安装与配置。要了解更多与Redis保护相关的内容,请参阅如何在Ubuntu 14.04上保护Redis (从第三步开始)。虽然此文面向Ubuntu 14.04编写,但基本完全适用于16.04版本。