Redis 安装与配置:CentOS 系统优化教程 – wiki基地

Redis 安装与配置:CentOS 系统优化教程

Redis,作为一款高性能的键值对存储数据库,因其速度快、功能丰富、易于使用等特点,被广泛应用于缓存、会话管理、消息队列等场景。在 CentOS 系统上搭建 Redis 服务,需要仔细进行安装和配置,并针对系统进行优化,以充分发挥 Redis 的性能。本文将详细介绍如何在 CentOS 系统上安装和配置 Redis,并提供一系列系统优化建议,助你打造一个稳定、高效的 Redis 服务。

一、Redis 安装

本教程将采用源码编译安装方式,以确保 Redis 的灵活性和可定制性。

1. 安装编译依赖

在编译 Redis 之前,需要安装必要的编译依赖包。使用 yum 命令安装:

bash
sudo yum update -y
sudo yum install -y gcc make tcl

  • sudo yum update -y: 更新 yum 软件包管理器并升级已安装的软件包到最新版本。-y 参数表示自动同意所有提示。
  • sudo yum install -y gcc make tcl: 安装 gcc 编译器、make 工具和 tcl 脚本语言,它们是编译 Redis 所必需的。

2. 下载 Redis 源码

访问 Redis 官网 (https://redis.io/) 下载最新稳定版本的 Redis 源码包。也可以通过 wget 命令直接下载:

bash
wget http://download.redis.io/releases/redis-latest.tar.gz

redis-latest.tar.gz 将被下载到当前目录。 注意替换 redis-latest 为实际的最新版本号,例如 redis-6.2.6.tar.gz

3. 解压 Redis 源码

解压下载的源码包:

bash
tar xzf redis-latest.tar.gz

这将在当前目录下创建一个名为 redis-latest 的目录。

4. 编译 Redis

进入解压后的 Redis 源码目录:

bash
cd redis-latest

然后执行 make 命令进行编译:

bash
make

如果编译过程中出现错误,请检查是否安装了所有必要的编译依赖。

5. 安装 Redis

编译完成后,执行 make install 命令将 Redis 安装到系统目录:

bash
sudo make install PREFIX=/usr/local/redis

PREFIX=/usr/local/redis 指定了 Redis 的安装目录。如果不指定,默认安装到 /usr/local/bin 目录。

6. 创建 Redis 目录

创建 Redis 的配置文件目录和数据存储目录:

bash
sudo mkdir -p /usr/local/redis/etc
sudo mkdir -p /usr/local/redis/data

7. 复制配置文件

将 Redis 源码目录中的 redis.conf 配置文件复制到 /usr/local/redis/etc 目录:

bash
sudo cp redis.conf /usr/local/redis/etc/

8. 配置环境变量 (可选)

为了方便使用 Redis 命令,可以将 Redis 的安装目录添加到系统的环境变量中。编辑 /etc/profile 文件:

bash
sudo vi /etc/profile

在文件末尾添加以下内容:

export PATH=$PATH:/usr/local/redis/bin

保存并退出,然后执行以下命令使环境变量生效:

bash
source /etc/profile

二、Redis 配置

安装完成后,需要对 Redis 进行配置以满足实际应用需求。

1. 修改配置文件 redis.conf

打开 /usr/local/redis/etc/redis.conf 文件进行编辑。

  • 绑定 IP 地址: 默认情况下,Redis 监听所有 IP 地址。建议将其绑定到指定 IP 地址,以提高安全性。 找到 bind 127.0.0.1 -::1 并将 127.0.0.1 替换为服务器的实际 IP 地址,或者注释掉该行以允许监听所有 IP 地址(不推荐)。例如:bind 192.168.1.100
  • 修改监听端口: 默认端口为 6379。如果需要修改,找到 port 6379 并修改为新的端口号。
  • 设置密码: 为了防止未经授权的访问,建议设置 Redis 密码。找到 # requirepass foobared 并取消注释,并将 foobared 替换为自己的密码。 例如:requirepass myStrongPassword
  • 设置持久化方式: Redis 提供了两种持久化方式:RDB 和 AOF。
    • RDB (Redis DataBase): 定期将内存中的数据快照保存到磁盘。 找到 save 900 1save 300 10save 60 10000 等行,可以修改保存的频率和条件。 save <seconds> <changes> 表示在 秒内发生了 次修改就进行保存。
    • AOF (Append Only File): 将每个写操作追加到日志文件中。 找到 appendonly no 并将其修改为 appendonly yes 以启用 AOF 持久化。 还可以配置 AOF 的同步策略:
      • appendfsync always: 每次写入都进行同步,性能最差,但数据安全性最高。
      • appendfsync everysec: 每秒同步一次,性能和数据安全性之间取得了平衡。
      • appendfsync no: 由操作系统决定何时同步,性能最好,但数据安全性最低。
  • 设置最大内存: 为了防止 Redis 占用过多内存,可以设置最大内存限制。 找到 # maxmemory <bytes> 并取消注释,并将 <bytes> 替换为实际的内存大小。 可以使用 maxmemory-policy 配置内存淘汰策略,例如:maxmemory-policy allkeys-lru (使用 LRU 算法淘汰所有键中最久未使用的键)。
  • 设置日志文件: 找到 logfile "" 并将其替换为日志文件的路径。 例如:logfile "/var/log/redis/redis-server.log"。 确保 Redis 用户对该目录有写入权限。
  • 守护进程模式: 找到 daemonize no 并将其修改为 daemonize yes 以使 Redis 在后台运行。

2. 创建 Redis 服务脚本

为了方便启动、停止和重启 Redis 服务,可以创建一个 Systemd 服务脚本。

bash
sudo vi /etc/systemd/system/redis.service

将以下内容复制到文件中:

“`
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
Restart=always

[Install]
WantedBy=multi-user.target
“`

  • User/Group: 指定 Redis 服务的运行用户和用户组。建议创建一个专门的 redis 用户和用户组。
  • ExecStart: 指定 Redis 服务器的启动命令和配置文件路径。
  • ExecStop: 指定 Redis 服务器的停止命令。
  • Restart: 指定服务异常退出时自动重启。

3. 创建 Redis 用户和用户组 (如果需要)

如果服务脚本中指定了 redis 用户和用户组,需要创建它们:

bash
sudo groupadd redis
sudo useradd -g redis redis -s /sbin/nologin
sudo chown -R redis:redis /usr/local/redis

4. 启动 Redis 服务

启用并启动 Redis 服务:

bash
sudo systemctl enable redis.service
sudo systemctl start redis.service

5. 检查 Redis 状态

使用以下命令检查 Redis 服务状态:

bash
sudo systemctl status redis.service

6. 使用 Redis CLI

使用 Redis 客户端连接到 Redis 服务器:

bash
redis-cli -h 127.0.0.1 -p 6379

如果设置了密码,需要使用 -a 参数提供密码:

bash
redis-cli -h 127.0.0.1 -p 6379 -a myStrongPassword

三、CentOS 系统优化

为了充分发挥 Redis 的性能,需要对 CentOS 系统进行优化。

1. 调整内核参数

  • 修改 vm.overcommit_memory: 该参数控制系统如何处理内存分配请求。建议将其设置为 1 或 2。

    bash
    sudo sysctl -w vm.overcommit_memory=1

    为了使设置永久生效,可以将其添加到 /etc/sysctl.conf 文件中:

    bash
    echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p

    • vm.overcommit_memory=0: 系统会谨慎地进行内存分配,可能会导致应用程序无法分配到足够的内存。
    • vm.overcommit_memory=1: 系统会过度分配内存,但不会允许分配超过物理内存加上交换空间的量。 推荐用于 Redis。
    • vm.overcommit_memory=2: 系统会允许分配超过物理内存和交换空间的量。
  • 修改 net.core.somaxconn: 该参数控制 listen 函数的最大连接队列长度。 高并发场景下建议增加该值。

    bash
    sudo sysctl -w net.core.somaxconn=65535

    添加到 /etc/sysctl.conf 文件:

    bash
    echo "net.core.somaxconn = 65535" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p

  • 修改 net.ipv4.tcp_max_syn_backlog: 该参数控制 TCP 连接 SYN 队列的长度。 高并发场景下建议增加该值。

    bash
    sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535

    添加到 /etc/sysctl.conf 文件:

    bash
    echo "net.ipv4.tcp_max_syn_backlog = 65535" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p

  • 修改 vm.swappiness: 该参数控制系统使用交换空间的倾向程度。 如果 Redis 对性能要求较高,建议降低该值,甚至设置为 0。

    bash
    sudo sysctl -w vm.swappiness=10

    添加到 /etc/sysctl.conf 文件:

    bash
    echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p

    • vm.swappiness=0: 尽可能避免使用交换空间。
    • vm.swappiness=100: 尽可能使用交换空间。

2. 关闭透明大页 (Transparent Huge Pages, THP)

THP 可能会导致 Redis 性能下降。 建议关闭 THP。

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

为了使设置永久生效,可以将其添加到 /etc/rc.local 文件中 (如果该文件不存在,需要创建)。 注意:CentOS 7 默认没有 /etc/rc.local, 需要手动创建并赋予执行权限:

bash
sudo touch /etc/rc.d/rc.local
sudo chmod +x /etc/rc.d/rc.local
sudo ln -s /etc/rc.d/rc.local /etc/rc.local

然后编辑 /etc/rc.local 文件,添加以下内容:

“`bash

!/bin/bash

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
exit 0
“`

3. 使用 Noop 或 Deadline I/O 调度器 (适用于 SSD)

如果使用 SSD,建议使用 Noop 或 Deadline I/O 调度器,它们更适合 SSD 的特性。查看当前 I/O 调度器:

bash
cat /sys/block/sda/queue/scheduler

其中 sda 是磁盘设备名。

修改 I/O 调度器:

bash
echo noop > /sys/block/sda/queue/scheduler

bash
echo deadline > /sys/block/sda/queue/scheduler

为了使设置永久生效,可以编辑 /etc/rc.local 文件,添加相应的命令。

4. 防火墙配置

确保防火墙允许 Redis 的监听端口通过。

bash
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload

5. 监控 Redis 性能

使用 redis-cli info 命令可以查看 Redis 的各种信息,包括内存使用情况、CPU 使用情况、连接数等。 还可以使用专门的 Redis 监控工具,例如 Redis Desktop Manager、RedisInsight 等。

四、总结

本文详细介绍了如何在 CentOS 系统上安装和配置 Redis,并提供了一系列系统优化建议。 通过遵循这些步骤,可以搭建一个稳定、高效的 Redis 服务,充分发挥 Redis 的性能。 在实际应用中,需要根据具体的业务需求和硬件环境,进行更细致的配置和优化。 例如,可以根据数据量调整 RDB 和 AOF 的配置,根据并发量调整连接数和线程数,根据内存大小调整最大内存限制和内存淘汰策略等。 持续监控 Redis 的性能,并根据监控结果进行调整,是保证 Redis 服务稳定性和性能的关键。

发表评论

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

滚动至顶部