如何在CentOS 7上安装Redis服务器
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