如何在CentOS 7上安装Redis服务器

时间:2020-03-05 15:28:10  来源:igfitidea点击:

Redis是用ANSI C编写的开源多平台数据存储,它直接使用内存中的数据集来实现极高的性能。
它支持各种编程语言,包括Lua,C,Java,Python,Perl,PHP等。
它基于简单性,大约有3万行代码可以“完成”一些事情,但效果却不错。
尽管我们在内存上进行工作,但持久性可能存在,并且它对高可用性和群集具有相当合理的支持,这在确保数据安全方面很有好处。

构建Redis

没有可用的官方RPM软件包,我们需要从源代码构建它,为此,我们需要安装Make和GCC。

如果尚未安装GNU Compiler Collection,请使用yum进行安装。

yum install gcc make

从redis下载页面下载压缩包。

curl http://download.redis.io/releases/redis-3.0.4.tar.gz -o redis-3.0.4.tar.gz

提取压缩包内容

tar zxvf redis-3.0.4.tar.gz

输入Redis我们提取的目录

cd redis-3.0.4

使用Make生成源文件

make

安装

在src目录中输入

cd src

将Redis服务器和客户端复制到/usr/local/bin

cp redis-server redis-cli /usr/local/bin

复制哨兵,基准测试和检查也很不错。

cp redis-sentinel redis-benchmark redis-check-aof redis-check-dump /usr/local/bin

设置Redis配置目录

mkdir /etc/redis

在/var/lib/redis下创建一个工作和数据目录

mkdir -p /var/lib/redis/6379

系统参数

为了使Redis正常工作,我们需要设置一些内核选项

将vm.overcommit_memory设置为1,这意味着总是这样,这将避免数据被截断,请在此处查看更多信息。

sysctl -w vm.overcommit_memory=1

将backlog连接的最大数量更改为某个值,该值比redis.conf的tcp-backlog选项的值(默认为511)高。
我们可以在kernel.org上的基于sysctl的IP网络“ tunning”中找到更多信息。

sysctl -w net.core.somaxconn=512.

禁用透明的大页面支持,已知这会导致Redis引起延迟和内存访问问题。

echo never > /sys/kernel/mm/transparent_hugepage/enabled

redis.conf

Redis.conf是Redis配置文件,但是我们将在此处看到名为6379.conf的文件,其中的编号与正在侦听的网络端口相同。
如果要运行多个Redis实例,则建议使用此名称。

将示例redis.conf复制到/etc/redis/6379.conf。

cp redis.conf /etc/redis/6379.conf

现在编辑文件并设置一些参数。

vi /etc/redis/6379.conf

守护

将守护进程设置为no,systemd需要将其置于前台,否则Redis会突然死亡。

daemonize no

pid文件

将pidfile设置为/var/run下的redis_6379.pid。

pidfile /var/run/redis_6379.pid

港口

如果不使用默认端口,请更改网络端口

port 6379

日志级别

设置日志级别。

loglevel notice

日志文件

将日志文件设置为/var/log/redis_6379.log

logfile /var/log/redis_6379.log

目录

将目录设置为/var/lib/redis/6379

dir /var/lib/redis/6379

安全

我们可以采取以下一些措施来加强安全性。

Unix套接字

在许多情况下,客户端应用程序与服务器位于同一台计算机上,因此无需侦听网络套接字。
如果是这种情况,我们可能要改用unix套接字,为此,我们需要将port选项设置为0,然后使用以下选项启用unix套接字。

设置套接字文件的路径

unixsocket /tmp/redis.sock

设置套接字文件的受限权限

unixsocketperm 700

现在,要使用redis-cli进行访问,我们应该使用-s标志指向套接字文件

redis-cli -s /tmp/redis.sock

要求通行证

我们可能需要远程访问,如果需要,则应使用密码,在执行任何操作之前都需要此密码。

requirepass "bTFBx1NYYWRMTUEyNHhsCg"

重命名命令

想象下一个命令的输出。
是的,它将转储服务器的配置,因此我们应尽可能拒绝访问此类信息。

CONFIG GET *

通过使用rename-command来限制甚至禁用此命令和其他命令。
我们必须提供命令名称和替换名称。
要禁用此功能,请将替换字符串设置为“”(空白),这样做会更安全,因为它可以防止有人猜到命令名称。

rename-command FLUSHDB "FLUSHDB_MY_SALT_G0ES_HERE09u09u"
rename-command FLUSHALL ""
rename-command CONFIG "CONFIG_MY_S4LT_GO3S_HERE09u09u"

通过UNIX套接字访问密码和命令更改

快照

默认情况下,Redis会定期将其数据集转储到我们设置的数据目录上的dump.rdb中。
我们可以配置通过save命令更新rdb文件的频率,第一个参数是以秒为单位的时间范围,第二个参数是对数据文件执行的许多更改。

如果至少有1次密钥更改,则每15小时

save 900 1

每5小时至少进行10次主要变更

save 300 10

每分钟至少进行10000次密钥更改

save 60 10000

/var/lib/redis/6379/dump.rdb文件包含自上次保存以来内存中数据集的转储。
因为它创建了一个临时文件然后替换了原始文件,所以没有损坏的问题,我们始终可以直接复制它而不必担心。

从启动开始

我们可以使用systemd将Redis添加到系统启动中

将示例init_script复制到/etc/init.d,并注意脚本名称上的端口号

cp utils/redis_init_script /etc/init.d/redis_6379

我们将使用systemd,因此在/etc/systems/system下创建一个名为redis_6379.service的单元文件。

vi /etc/systemd/system/redis_6379.service

输入此内容,请尝试使用man systemd.service以获得详细信息

[Unit]
Description=Redis on port 6379
[Service]
Type=forking
ExecStart=/etc/init.d/redis_6379 start
ExecStop=/etc/init.d/redis_6379 stop
[Install]
WantedBy=multi-user.target

现在,将我们之前设置的内存过量使用和最大积压选项添加到/etc/sysctl.conf文件中。

vm.overcommit_memory = 1
net.core.somaxconn=512

对于透明的大页面支持,没有sysctl指令,因此我们可以将命令放在/etc/rc.local的末尾

echo never > /sys/kernel/mm/transparent_hugepage/enabled