在 CentOS 8 上安装和配置Redis
作者: 分类:Linux浏览(381)2021-7-5

介绍

Redis 是一个开源的内存数据结构存储。您可以将其用作 Memcached 替代方案来存储简单的键值对、NoSQL 数据库,甚至是具有 Pub-Sub 模式的消息代理。本指南将向您展示如何在 上安装、配置、微调和保护 Redis。

先决条件

  • 一个CentOS的8服务器。

1.安装Redis

Remi 的 RPM 存储库是 CentOS 的一个长期且受社区信任的存储库。它的 Redis 包通常比 CentOS 的 Redis 包更新。

  1. 启用回购:
    $ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
    
  2. 列出 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 的主要版本。

  3. 假设最新的主要版本是 6.0,请安装该版本:
    $ sudo dnf module install redis:remi-6.0 -y
    
  4. 启用 Redis 服务以在启动时启动。
    $ sudo systemctl enable redis.service 
    
  5. 启动Redis。
    $ sudo systemctl start redis.service 
    

2.配置Redis

  1. 在您喜欢的编辑器中打开 Redis 配置文件:
    $ sudo nano /etc/redis.conf
    
  2. 为您的应用程序设置所需的内存容量。
    maxmemory 128mb
    

    默认情况下,当达到maxmemory时,Redis 将停止写入新数据。如果你想让Redis通过自动删除旧数据来写入新数据,你必须告诉Redis如何删除它。该allkeys-LRU驱逐策略对于大多数用户来说是不错的选择。添加以下行:

    maxmemory-policy allkeys-lru
    

    在此处了解有关驱逐方法的更多信息。

  3. 设置保存到磁盘策略。默认情况下,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
    

    如果您决定保留此功能,则应将服务器升级到更大的计划或添加适当的 交换文件,以确保 Redis 的内存是上面声明的maxmemory 的两倍。否则,在最坏的情况下,当达到maxmemory时,保存过程可能会导致您的服务器内存不足。

  1. 保存并关闭配置文件,然后重新启动 Redis 以应用更改。
    $ sudo systemctl restart redis.service 
    

3. 微调系统

  1. 检查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.
    
  2. 要修复第一个警告,请输入以下命令。
    $ echo 'net.core.somaxconn = 512' | sudo tee -a /etc/sysctl.conf > /dev/null
    
  3. 要修复第二个警告,请输入以下命令。
    $ echo 'vm.overcommit_memory = 1' | sudo tee -a /etc/sysctl.conf > /dev/null
    
  4. 重新加载 sysctl 值。
    $ sudo sysctl -p
    
  5. 要修复最后一个警告,您需要在启动 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. 验证设置

  1. 重启Redis服务器:
    $ sudo reboot
    
  2. 服务器重启后,检查Redis日志文件以确保没有任何警告:
    $ sudo tail /var/log/redis/redis.log
    
  3. 使用redis-cli程序通过默认的环回 IP 127.0.0.1和端口6379连接到Redis 。
    $ redis-cli -h 127.0.0.1 -p 6379
    

    如果连接成功,您将看到 Redis 命令提示符:

    127.0.0.1:6379> 
    
  4. 输入一些 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 服务器。为安全起见,建议使用专用网络。

配置专用网络

  1. 按照本指南为该 Redis 服务器和需要与 Redis 通信的应用服务器启用和配置专用网络。
  2. 更新firewalld服务以允许来自专用网络的传入连接:
    $ sudo firewall-cmd --permanent --zone=trusted --change-interface=ens7
    
  3. 创建一个 systemd 服务来延迟 Redis 启动,直到私有接口启动并分配 IP 地址。
    $ sudo nano /etc/systemd/system/redis.service.d/wait-for-ips.conf
    

    将以下文本粘贴到文件中,然后保存并关闭它:

    [Unit]
    After=network-online.target
    Wants=network-online.target
    
  4. 编辑Redis配置文件。
    $ sudo nano /etc/redis.conf
    
  5. 添加Redis应该绑定到的私有IP地址。例如,如果 Redis 应该同时绑定到内部环回 (127.0.0.1) 和私有 IP 地址 (192.168.0.100):
    bind 127.0.0.1 192.168.0.100
    
  6. 保存并关闭配置文件。
  7. 重新启动 Redis 以应用更改。
    $ sudo systemctl restart redis.service 
    

测试专用网络

  1. 通过 SSH 连接到您的专用网络上的应用程序服务器之一。
  2. 假设应用服务器也是CentOS 8,临时安装Redis,获取redis-cli软件。
    $ sudo dnf install redis
    
  3. 使用redis-cli程序连接Redis服务器。
    $ redis-cli -h 192.168.0.100 -p 6379
    

    如果连接成功,您将看到 Redis 命令提示符:

    192.168.0.100:6379> 
    
  4. 输入一些 Redis 命令以确保其正常工作:
    set testkey testvalue
    get testkey
    exit
    
  5. 如果您看到以下结果,则 Redis 工作正常。
    127.0.0.1:6379> set testkey testvalue
    OK
    127.0.0.1:6379> get testkey
    "testvalue"
    127.0.0.1:6379> exit
    
  6. 卸载应用服务器上的redis包。
    $ sudo dnf remove redis
    

结论

要了解有关 Redis 的更多信息,请参阅以下资源:

图片压缩在线工具 tools online