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 1
、save 300 10
、save 60 10000
等行,可以修改保存的频率和条件。save <seconds> <changes>
表示在秒内发生了 次修改就进行保存。 - AOF (Append Only File): 将每个写操作追加到日志文件中。 找到
appendonly no
并将其修改为appendonly yes
以启用 AOF 持久化。 还可以配置 AOF 的同步策略:appendfsync always
: 每次写入都进行同步,性能最差,但数据安全性最高。appendfsync everysec
: 每秒同步一次,性能和数据安全性之间取得了平衡。appendfsync no
: 由操作系统决定何时同步,性能最好,但数据安全性最低。
- RDB (Redis DataBase): 定期将内存中的数据快照保存到磁盘。 找到
- 设置最大内存: 为了防止 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 -pvm.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 -pvm.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 服务稳定性和性能的关键。