CentOS 系统 Redis 安装全攻略:从源码编译到集群部署
Redis 作为一个高性能的键值对(Key-Value)数据库,以其内存存储、数据结构丰富、支持持久化、以及高并发读写等特性,在现代 Web 应用、缓存系统、消息队列等场景中扮演着至关重要的角色。本文将深入探讨在 CentOS 系统上安装 Redis 的完整过程,从源码编译安装到配置优化,再到集群部署,力求提供一份全面、细致且易于理解的安装指南。
一、 准备工作:确保系统环境就绪
在开始安装 Redis 之前,我们需要确保 CentOS 系统满足一些基本要求,并进行必要的准备工作。
-
CentOS 版本: 本文以 CentOS 7/8 为例进行演示,但大部分步骤也适用于其他较新版本的 CentOS。 建议使用较新且稳定的 CentOS 版本,以便获得更好的性能和安全性。
-
系统更新: 确保系统软件包是最新的,这可以避免潜在的兼容性问题,并获得最新的安全补丁。
bash
sudo yum update -y
- 安装依赖包: Redis 的编译和运行需要一些基本的开发工具和库。
bash
sudo yum install -y gcc make wget tcl
* `gcc`: GNU 编译器套件,用于编译 Redis 源码。
* `make`: 构建工具,用于自动化编译过程。
* `wget`: 文件下载工具,用于下载 Redis 源码包。
* `tcl`: Tcl 脚本语言,用于运行 Redis 测试。
-
关闭防火墙或配置规则(可选): 如果你的 CentOS 系统启用了防火墙(firewalld 或 iptables),你需要关闭防火墙或添加相应的规则,以允许 Redis 端口(默认为 6379)的访问。
-
关闭 firewalld (不推荐):
bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld -
配置 firewalld 规则 (推荐):
bash
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent
sudo firewall-cmd --reload
如果需要修改端口,将6379改为需要的端口号 -
关闭 SELinux (可选): SELinux (Security-Enhanced Linux) 是 CentOS 的一个安全增强模块。在某些情况下,SELinux 可能会阻止 Redis 的正常运行。你可以临时禁用 SELinux 或修改其策略。
-
临时禁用 SELinux (不推荐):
bash
sudo setenforce 0 -
永久禁用 SELinux(不推荐):
编辑/etc/selinux/config
文件,将SELINUX=enforcing
改为SELINUX=disabled
, 然后重启服务器 -
修改 SELinux 策略 (推荐): 这通常比较复杂,需要根据具体情况进行配置,这里不做详细介绍。
二、 源码编译安装 Redis:掌握核心步骤
虽然可以通过包管理器(如 yum)安装 Redis,但源码编译安装可以让你更好地控制安装过程,并获得最新的稳定版本或特定版本。
- 下载 Redis 源码包: 访问 Redis 官方网站 ( https://redis.io/download ) 或 GitHub 仓库 ( https://github.com/redis/redis ),找到你需要的 Redis 版本,并获取其下载链接。
bash
wget http://download.redis.io/releases/redis-6.2.6.tar.gz # 替换为你需要的版本
请注意,这里以6.2.6为例子,请下载需要的版本
- 解压源码包:
bash
tar xzf redis-6.2.6.tar.gz
同样,请注意将文件名替换为你下载的版本
- 进入解压后的目录:
bash
cd redis-6.2.6
- 编译 Redis:
bash
make
如果编译成功,会生成一个名为 src
的目录,其中包含redis-server
, redis-cli
等可执行程序
- 运行测试 (可选): 编译完成后,建议运行 Redis 的测试套件,以确保编译的 Redis 可以正常工作。
bash
make test
这会执行一系列测试,可能需要一些时间。如果所有测试都通过,说明编译成功。
- 安装 Redis: 将编译好的 Redis 可执行文件安装到系统目录中。
bash
sudo make install
默认情况下,这会将 `redis-server`、`redis-cli` 等可执行文件安装到 `/usr/local/bin` 目录下。
三、 配置 Redis:定制你的专属服务
Redis 安装完成后,我们需要对其进行配置,以满足我们的具体需求。
- 创建 Redis 配置文件: Redis 的配置文件通常位于
/etc/redis.conf
。你可以从源码包中的redis.conf
复制一份作为模板。
bash
sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/6379.conf # 建议使用端口号作为文件名
-
编辑 Redis 配置文件: 使用你喜欢的文本编辑器打开
/etc/redis/6379.conf
,根据需要修改以下配置项: -
bind
: 默认情况下,Redis 只监听本地回环地址 (127.0.0.1)。如果你希望其他机器也能访问 Redis,需要将其修改为服务器的 IP 地址或0.0.0.0
(监听所有接口)。bind 0.0.0.0
-
port
: Redis 监听的端口号,默认为 6379。port 6379
-
daemonize
: 是否以守护进程模式运行 Redis,默认为no
。建议设置为yes
。daemonize yes
-
pidfile
: Redis 进程 ID 文件路径,默认为/var/run/redis_6379.pid
。pidfile /var/run/redis_6379.pid
-
logfile
: Redis 日志文件路径,默认为""
(标准输出)。建议设置为一个文件路径。logfile /var/log/redis_6379.log
-
dir
: Redis 数据目录,默认为""
(当前目录)。建议设置为一个专门的目录。dir /var/lib/redis/6379
-
requirepass
: Redis 访问密码,默认为空(无密码)。为了安全起见,强烈建议设置一个强密码。requirepass your_strong_password
-
maxmemory
: Redis 最大内存限制,默认为 0(无限制)。如果你的服务器内存有限,建议设置一个合理的值,以避免 Redis 占用过多内存导致系统崩溃。可以使用单位(如1gb
、100mb
)。maxmemory 1gb
-
maxmemory-policy
: 当 Redis 达到最大内存限制时,采取的内存淘汰策略。常见的策略有:noeviction
: 不淘汰任何数据,直接返回错误。allkeys-lru
: 从所有键中淘汰最近最少使用的键(LRU)。volatile-lru
: 从设置了过期时间的键中淘汰最近最少使用的键(LRU)。allkeys-random
: 从所有键中随机淘汰键。volatile-random
: 从设置了过期时间的键中随机淘汰键。volatile-ttl
: 从设置了过期时间的键中淘汰 TTL(Time To Live)最小的键。
maxmemory-policy allkeys-lru
-
appendonly
: 是否开启 AOF 持久化,默认为no
。如果需要更高的持久化保证,可以设置为yes
。appendonly yes
-
appendfilename
: AOF 文件名,默认为appendonly.aof
。appendfilename "appendonly.aof"
-
appendfsync
: AOF 文件同步策略,默认为everysec
。always
: 每次写入都同步,最安全但性能最差。everysec
: 每秒同步一次,性能和安全性折中。no
: 不主动同步,由操作系统决定,性能最好但最不安全。
appendfsync everysec
*save
: RDB文件保存策略, 默认有三个策略, 策略之间可以共存。
save 900 1
save 300 10
save 60 10000
这些策略意味着,如果900秒内至少1个key发生了改变,就保存一次RDB快照。如果300秒内有10个key发生了改变,就保存。如果60秒内有10000个key发生了改变,就保存。 -
创建数据目录和日志目录:
bash
sudo mkdir -p /var/lib/redis/6379
sudo mkdir -p /var/log/redis
sudo chown redis:redis /var/lib/redis/6379
sudo chown redis:redis /var/log/redis
这里假定后面会创建一个名为redis
的用户和组。
四、 创建系统服务:让 Redis 自动启动
为了方便管理 Redis,我们可以将其配置为系统服务,使其能够开机自动启动,并在后台运行。
- 创建 Redis 用户和组: 为了安全起见,建议创建一个专门的 Redis 用户和组,用于运行 Redis 服务。
bash
sudo groupadd redis
sudo useradd -g redis -s /sbin/nologin -M redis
- 创建 systemd 服务文件: 在
/etc/systemd/system
目录下创建一个名为redis_6379.service
的文件,并添加以下内容:
“`
[Unit]
Description=Redis Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/6379.conf
ExecStop=/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a your_strong_password shutdown
Restart=always
[Install]
WantedBy=multi-user.target
“`
Description
: 服务描述。After
: 指定该服务在哪些服务之后启动。User
和Group
: 指定运行 Redis 服务的用户和组。ExecStart
: 指定 Redis 启动命令。ExecStop
: 指定 Redis 停止命令 (注意替换your_strong_password
为你的 Redis 密码)。Restart
: 指定在 Redis 进程退出后自动重启。-
WantedBy
: 指定该服务所属的目标。 -
重新加载 systemd 配置:
bash
sudo systemctl daemon-reload
- 启动 Redis 服务:
bash
sudo systemctl start redis_6379
- 设置 Redis 开机自启动:
bash
sudo systemctl enable redis_6379
- 检查 Redis 服务状态:
bash
sudo systemctl status redis_6379
如果一切正常,你应该看到 Redis 服务正在运行。
- 使用redis-cli测试redis是否可以正常运行
redis-cli -h 127.0.0.1 -p 6379 -a your_strong_password ping
如果返回 PONG, 则说明redis正在正常运行
五、 Redis 集群部署 (可选):扩展你的存储能力
如果单台 Redis 服务器无法满足你的性能或存储需求,你可以考虑搭建 Redis 集群。Redis 集群通过数据分片(Sharding)的方式,将数据分散存储在多个 Redis 节点上,从而实现水平扩展。
Redis 集群的部署方式有多种,这里介绍一种使用 Redis 自带的 redis-cli
工具进行集群创建的方法。
-
准备多台 Redis 服务器: 至少需要 6 台 Redis 服务器(3 主 3 从)才能组成一个基本的 Redis 集群。确保这些服务器之间网络互通,并且都已经按照前面的步骤安装和配置好了 Redis。
-
修改每台服务器的 Redis 配置文件: 除了前面提到的配置项外,还需要添加以下配置:
-
cluster-enabled
: 启用集群模式。cluster-enabled yes
-
cluster-config-file
: 集群配置文件名,每个节点都需要一个不同的文件名。cluster-config-file nodes-6379.conf
-
cluster-node-timeout
: 集群节点超时时间,单位为毫秒。cluster-node-timeout 5000
-
cluster-announce-ip
: 集群广播IPcluster-announce-ip your_server_ip
请将your_server_ip
改为当前服务器的真实IP -
启动所有 Redis 实例: 在每台服务器上启动 Redis 服务。
-
使用
redis-cli
创建集群: 在其中一台 Redis 服务器上执行以下命令:“`
redis-cli –cluster create 192.168.1.101:6379 192.168.1.102:6379 192.168.1.103:6379 192.168.1.104:6379 192.168.1.105:6379 192.168.1.106:6379 –cluster-replicas 1 -a your_strong_password“`
-
--cluster create
: 指定创建集群。 192.168.1.101:6379 ... 192.168.1.106:6379
: 列出所有 Redis 节点的 IP 地址和端口号(请替换为你实际的 IP 地址和端口号)。--cluster-replicas 1
: 指定每个主节点有一个从节点。-
-a your_strong_password
: 指定 Redis 密码。redis-cli
会自动分配主从节点,并进行数据分片。 -
验证集群状态: 使用
redis-cli
连接到集群中的任意一个节点,并执行cluster info
和cluster nodes
命令,查看集群信息和节点状态。
redis-cli -c -h 192.168.1.101 -p 6379 -a your_strong_password # -c 选项表示启用集群模式
cluster info
cluster nodes
六、 安全建议与性能优化
-
设置强密码: 务必为 Redis 设置一个强密码,并定期更换。
-
限制访问来源: 使用
bind
配置项限制只允许信任的 IP 地址访问 Redis。 -
禁用危险命令: 通过
rename-command
配置项禁用或重命名一些危险的命令,如FLUSHALL
、FLUSHDB
、CONFIG
等。rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "" -
监控 Redis: 使用 Redis 自带的
redis-cli
工具或第三方监控工具(如 RedisLive、Prometheus + Grafana)监控 Redis 的运行状态、内存使用情况、命中率等指标。 -
合理配置持久化: 根据你的业务需求,选择合适的持久化方式(RDB 或 AOF),并配置合理的持久化策略。
-
优化内存使用: 使用合适的数据结构,避免存储过大的键值对,及时清理过期数据,设置合理的内存淘汰策略。
-
使用连接池: 在客户端使用连接池,避免频繁创建和销毁连接,提高性能。
-
避免阻塞操作: 尽量避免使用一些耗时较长的命令,如
KEYS
、SMEMBERS
等,可以使用SCAN
、SSCAN
等命令代替。 -
考虑主从复制与哨兵模式:对于需要高可用的场景,可以配置Redis主从复制,并使用哨兵(Sentinel)模式进行故障自动转移.
总结
本文详细介绍了在 CentOS 系统上安装和配置 Redis 的完整流程,包括源码编译安装、配置文件详解、系统服务创建、集群部署,以及安全建议和性能优化。希望这篇文章能够帮助你成功搭建一个稳定、高效、安全的 Redis 服务。 请根据你的实际需求,灵活调整配置,并不断学习和探索 Redis 的更多高级特性。