介绍

Redis 是一种内存中键值存储,以其灵活性、性能和广泛的语言支持而闻名。在本指南中,我们将演示如何在 Ubuntu 16.04 服务器上安装和配置 Redis。

先决条件

要完成本指南,您将需要访问 Ubuntu 16.04 服务器。您将需要一个具有权限的非 root 用户sudo来执行此过程所需的管理功能。您可以按照我们的Ubuntu 16.04 初始服务器设置指南了解如何设置具有这些权限的帐户。

当您准备好开始时,请使用您的用户登录到您的 Ubuntu 16.04 服务器sudo并继续下面的操作。

安装构建和测试依赖项

为了获得最新版本的 Redis,我们将从源代码编译并安装该软件。在下载代码之前,我们需要满足构建依赖关系,以便我们可以编译软件。

为此,我们可以build-essential从 Ubuntu 存储库安装元包。我们还将下载该tcl包,我们可以用它来测试我们的二进制文件。

我们可以通过键入以下内容来更新本地apt包缓存并安装依赖项:

sudo apt-get update
sudo apt-get install build-essential tcl

下载、编译和安装Redis

接下来我们就可以开始搭建Redis了。

下载并解压源代码

由于我们不需要保留长期编译的源代码(我们总是可以重新下载它),因此我们将在目录中构建/tmp。现在让我们搬到那里:

cd /tmp

现在,下载最新的稳定版本的 Redis。这始终可以通过稳定的下载 URL获得:

curl -O http://download.redis.io/redis-stable.tar.gz

通过键入以下内容解压缩 tarball:

tar xzvf redis-stable.tar.gz

进入刚刚提取的Redis源目录结构:

cd redis-stable

构建并安装 Redis

现在,我们可以通过键入以下内容来编译 Redis 二进制文件:

make

编译二进制文件后,运行测试套件以确保一切都正确构建。您可以通过键入以下内容来执行此操作:

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 单元文件

接下来,我们可以创建一个systemd单元文件,以便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二进制文件,指向我们的配置。要停止它,我们可以使用 Redisshutdown命令,该命令可以通过redis-cli二进制文件执行。另外,由于我们希望 Redis 在可能的情况下从故障中恢复,因此我们将指令设置Restart为“always”:

/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]节中,我们可以定义服务应附加到的 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 用户、组和目录
现在,我们只需创建我们在前两个文件中引用的用户、组和目录。

首先创建redis用户和组。这可以通过键入以下命令在单个命令中完成:

sudo adduser --system --group --no-create-home redis

现在,我们可以/var/lib/redis通过键入以下内容来创建目录:

sudo mkdir /var/lib/redis

我们应该授予redis用户和组对此目录的所有权:

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

在随后的提示中,通过键入以下内容来测试连接:

127.0.0.1:6379> ping
你应该看到:

Output
PONG

检查您是否可以通过键入以下内容来设置键:

127.0.0.1:6379> set test "It's working!"
Output
OK

现在,通过键入以下内容检索值:

127.0.0.1:6379> get test

您应该能够检索我们存储的值:

Output
"It's working!"

退出 Redis 提示符以返回 shell:

127.0.0.1:6379> exit

作为最后的测试,让我们重新启动 Redis 实例:

sudo systemctl restart redis

现在,再次与客户端连接并确认您的测试值仍然可用:


redis-cli
get test

您的密钥的值应该仍然可以访问:

Output
"It's working!"

完成后再次返回 shell:

exit

启用 Redis 开机自启动

如果所有测试都有效,并且您希望在服务器启动时自动启动 Redis,则可以启用 systemd 服务。

为此,请键入:

sudo systemctl enable redis
Output
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.

结论

您现在应该已经在 Ubuntu 16.04 服务器上安装并配置了 Redis 实例。要了解有关如何保护您的 Redis 安装的更多信息,请查看我们的如何在 Ubuntu 14.04 上保护您的 Redis 安装(从步骤 3 开始)。尽管它是针对 Ubuntu 14.04 编写的,但它也应该主要适用于 16.04。

By zk

一个程序员

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注