介绍
Redis 是一个开源的内存数据结构存储。您可以将其用作 Memcached 替代方案来存储简单的键值对、NoSQL 数据库,甚至是具有 Pub-Sub 模式的消息代理。本指南将向您展示如何在 CentOS 8 上安装、配置、微调和保护 Redis。
先决条件
- 一个CentOS的8服务器。
1.安装Redis
Remi 的 RPM 存储库是 CentOS 的一个长期且受社区信任的存储库。它的 Redis 包通常比 CentOS 的 Redis 包更新。
- 启用回购:
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
- 列出 Remi 存储库中所有可用的 Redis 包。
$ dnf module list | grep redis
结果应如下所示:
redis 5 [d] common [d] Redis persistent key-value database redis remi-5.0 common [d] Redis persistent key-value database redis remi-6.0 common [d] Redis persistent key-value database
上面第二列中的值对应于 Redis 的主要版本。
- 假设最新的主要版本是 6.0,请安装该版本:
$ sudo dnf module install redis:remi-6.0 -y
- 启用 Redis 服务以在启动时启动。
$ sudo systemctl enable redis.service
- 启动Redis。
$ sudo systemctl start redis.service
2.配置Redis
- 在您喜欢的编辑器中打开 Redis 配置文件:
$ sudo nano /etc/redis.conf
- 为您的应用程序设置所需的内存容量。
maxmemory 128mb
默认情况下,当达到maxmemory时,Redis 将停止写入新数据。如果你想让Redis通过自动删除旧数据来写入新数据,你必须告诉Redis如何删除它。该allkeys-LRU驱逐策略对于大多数用户来说是不错的选择。添加以下行:
maxmemory-policy allkeys-lru
在此处了解有关驱逐方法的更多信息。
- 设置保存到磁盘策略。默认情况下,Redis 将在指定时间段或指定数量的对数据库的写入操作后将其内存中的数据保存在磁盘上。默认设置为:
save 900 1 save 300 10 save 60 10000
这意味着将发生保存:
- 900 秒(15 分钟)后,如果至少更改了 1 个密钥
- 300 秒(5 分钟)后,如果至少更改了 10 个键
- 如果至少 10000 个密钥更改,则 60 秒后使用上面的默认设置,Redis 会在每次重启时将保存的数据加载到内存中。所以你之前的内存数据将被恢复。如果您不需要此功能,您可以通过注释掉这些行来完全禁用它:
# save 900 1 # save 300 10 # save 60 10000
如果您决定保留此功能,则应将服务器升级到更大的计划或添加适当的 Linux 交换文件,以确保 Redis 的内存是上面声明的maxmemory 的两倍。否则,在最坏的情况下,当达到maxmemory时,保存过程可能会导致您的服务器内存不足。
- 保存并关闭配置文件,然后重新启动 Redis 以应用更改。
$ sudo systemctl restart redis.service
3. 微调系统
- 检查Redis日志文件:
$ sudo tail /var/log/redis/redis.log
你会看到一些这样的信息:
5228:M 15 Aug 2020 04:14:29.133 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 5228:M 15 Aug 2020 04:14:29.133 # Server initialized 5228:M 15 Aug 2020 04:14:29.133 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 5228:M 15 Aug 2020 04:14:29.133 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
- 要修复第一个警告,请输入以下命令。
$ echo 'net.core.somaxconn = 512' | sudo tee -a /etc/sysctl.conf > /dev/null
- 要修复第二个警告,请输入以下命令。
$ echo 'vm.overcommit_memory = 1' | sudo tee -a /etc/sysctl.conf > /dev/null
- 重新加载 sysctl 值。
$ sudo sysctl -p
- 要修复最后一个警告,您需要在启动 Redis 服务之前在启动时禁用透明大页面。创建一个新的脚本文件:
$ sudo nano /usr/bin/disable-transparent-hugepage
将以下文本粘贴到文件中:
#!/bin/bash echo never > /sys/kernel/mm/transparent_hugepage/enabled exit 0
保存并关闭文件,然后使其可运行并由root帐户拥有:
$ sudo chown root:root /usr/bin/disable-transparent-hugepage $ sudo chmod 770 /usr/bin/disable-transparent-hugepage
接下来,为将在启动时调用脚本的 systemd 服务创建配置文件:
$ sudo nano /etc/systemd/system/disable-transparent-hugepage.service
将以下文本粘贴到文件中:
[Unit] Description=Disable Transparent Huge Pages (THP) for Redis. Before=redis.service [Service] Type=exec ExecStart=/usr/bin/disable-transparent-hugepage [Install] WantedBy=multi-user.target
保存并关闭文件,然后启用服务:
$ sudo systemctl enable disable-transparent-hugepage.service
4. 验证设置
- 重启Redis服务器:
$ sudo reboot
- 服务器重启后,检查Redis日志文件以确保没有任何警告:
$ sudo tail /var/log/redis/redis.log
- 使用redis-cli程序通过默认的环回 IP 127.0.0.1和端口6379连接到Redis 。
$ redis-cli -h 127.0.0.1 -p 6379
如果连接成功,您将看到 Redis 命令提示符:
127.0.0.1:6379>
- 输入一些 Redis 命令以确保其正常工作:
set testkey testvalue get testkey exit
如果您看到以下结果,则 Redis 工作正常。
127.0.0.1:6379> set testkey testvalue OK 127.0.0.1:6379> get testkey "testvalue" 127.0.0.1:6379> exit
5.(可选)配置Redis进行私网访问
如果您为应用程序设置具有多台服务器的生产环境,则应用程序服务器需要访问 Redis 服务器。为安全起见,建议使用专用网络。
配置专用网络
- 按照本指南为该 Redis 服务器和需要与 Redis 通信的应用服务器启用和配置专用网络。
- 更新firewalld服务以允许来自专用网络的传入连接:
$ sudo firewall-cmd --permanent --zone=trusted --change-interface=ens7
- 创建一个 systemd 服务来延迟 Redis 启动,直到私有接口启动并分配 IP 地址。
$ sudo nano /etc/systemd/system/redis.service.d/wait-for-ips.conf
将以下文本粘贴到文件中,然后保存并关闭它:
[Unit] After=network-online.target Wants=network-online.target
- 编辑Redis配置文件。
$ sudo nano /etc/redis.conf
- 添加Redis应该绑定到的私有IP地址。例如,如果 Redis 应该同时绑定到内部环回 (127.0.0.1) 和私有 IP 地址 (192.168.0.100):
bind 127.0.0.1 192.168.0.100
- 保存并关闭配置文件。
- 重新启动 Redis 以应用更改。
$ sudo systemctl restart redis.service
测试专用网络
- 通过 SSH 连接到您的专用网络上的应用程序服务器之一。
- 假设应用服务器也是CentOS 8,临时安装Redis,获取redis-cli软件。
$ sudo dnf install redis
- 使用redis-cli程序连接Redis服务器。
$ redis-cli -h 192.168.0.100 -p 6379
如果连接成功,您将看到 Redis 命令提示符:
192.168.0.100:6379>
- 输入一些 Redis 命令以确保其正常工作:
set testkey testvalue get testkey exit
- 如果您看到以下结果,则 Redis 工作正常。
127.0.0.1:6379> set testkey testvalue OK 127.0.0.1:6379> get testkey "testvalue" 127.0.0.1:6379> exit
- 卸载应用服务器上的redis包。
$ sudo dnf remove redis
结论
要了解有关 Redis 的更多信息,请参阅以下资源:
- Linux 查看磁盘空间
- Centos7 hostnamectl 设置主机名
- 在Debian 8上安装4.19.x内核
- 在Ubuntu 16.04上备份,还原或传输MySQL / MariaDB数据库
- chattr 解决项目.user.ini权限删除不掉
- 在Linux系统上快速创建大文件
- 在CentOS 6上使用WonderShaper限制流量
- [ Linux VPS ] Debian/Ubuntu/CentOS 网络安装/网络重装/纯净安装 一键脚本
- Linux查看端口占用情况,并强制释放占用的端口
- 在Arch Linux上使用Makepkg
- 在Arch Linux上构建软件包(包括AUR)
- 在Arch Linux上使用Devtools