安装Redis到CentOS系统的完整流程 – wiki基地

CentOS 系统 Redis 安装全攻略:从源码编译到集群部署

Redis 作为一个高性能的键值对(Key-Value)数据库,以其内存存储、数据结构丰富、支持持久化、以及高并发读写等特性,在现代 Web 应用、缓存系统、消息队列等场景中扮演着至关重要的角色。本文将深入探讨在 CentOS 系统上安装 Redis 的完整过程,从源码编译安装到配置优化,再到集群部署,力求提供一份全面、细致且易于理解的安装指南。

一、 准备工作:确保系统环境就绪

在开始安装 Redis 之前,我们需要确保 CentOS 系统满足一些基本要求,并进行必要的准备工作。

  1. CentOS 版本: 本文以 CentOS 7/8 为例进行演示,但大部分步骤也适用于其他较新版本的 CentOS。 建议使用较新且稳定的 CentOS 版本,以便获得更好的性能和安全性。

  2. 系统更新: 确保系统软件包是最新的,这可以避免潜在的兼容性问题,并获得最新的安全补丁。

bash
sudo yum update -y

  1. 安装依赖包: Redis 的编译和运行需要一些基本的开发工具和库。

bash
sudo yum install -y gcc make wget tcl

*   `gcc`: GNU 编译器套件,用于编译 Redis 源码。
*   `make`: 构建工具,用于自动化编译过程。
*   `wget`: 文件下载工具,用于下载 Redis 源码包。
*   `tcl`: Tcl 脚本语言,用于运行 Redis 测试。
  1. 关闭防火墙或配置规则(可选): 如果你的 CentOS 系统启用了防火墙(firewalld 或 iptables),你需要关闭防火墙或添加相应的规则,以允许 Redis 端口(默认为 6379)的访问。

  2. 关闭 firewalld (不推荐):

    bash
    sudo systemctl stop firewalld
    sudo systemctl disable firewalld

  3. 配置 firewalld 规则 (推荐):

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

    如果需要修改端口,将6379改为需要的端口号

  4. 关闭 SELinux (可选): SELinux (Security-Enhanced Linux) 是 CentOS 的一个安全增强模块。在某些情况下,SELinux 可能会阻止 Redis 的正常运行。你可以临时禁用 SELinux 或修改其策略。

  5. 临时禁用 SELinux (不推荐):

    bash
    sudo setenforce 0

  6. 永久禁用 SELinux(不推荐):
    编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled, 然后重启服务器

  7. 修改 SELinux 策略 (推荐): 这通常比较复杂,需要根据具体情况进行配置,这里不做详细介绍。

二、 源码编译安装 Redis:掌握核心步骤

虽然可以通过包管理器(如 yum)安装 Redis,但源码编译安装可以让你更好地控制安装过程,并获得最新的稳定版本或特定版本。

  1. 下载 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为例子,请下载需要的版本

  1. 解压源码包:

bash
tar xzf redis-6.2.6.tar.gz

同样,请注意将文件名替换为你下载的版本

  1. 进入解压后的目录:

bash
cd redis-6.2.6

  1. 编译 Redis:

bash
make

如果编译成功,会生成一个名为 src的目录,其中包含redis-server, redis-cli等可执行程序

  1. 运行测试 (可选): 编译完成后,建议运行 Redis 的测试套件,以确保编译的 Redis 可以正常工作。

bash
make test

这会执行一系列测试,可能需要一些时间。如果所有测试都通过,说明编译成功。
  1. 安装 Redis: 将编译好的 Redis 可执行文件安装到系统目录中。

bash
sudo make install

默认情况下,这会将 `redis-server`、`redis-cli` 等可执行文件安装到 `/usr/local/bin` 目录下。

三、 配置 Redis:定制你的专属服务

Redis 安装完成后,我们需要对其进行配置,以满足我们的具体需求。

  1. 创建 Redis 配置文件: Redis 的配置文件通常位于 /etc/redis.conf。你可以从源码包中的 redis.conf 复制一份作为模板。

bash
sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/6379.conf # 建议使用端口号作为文件名

  1. 编辑 Redis 配置文件: 使用你喜欢的文本编辑器打开 /etc/redis/6379.conf,根据需要修改以下配置项:

  2. bind: 默认情况下,Redis 只监听本地回环地址 (127.0.0.1)。如果你希望其他机器也能访问 Redis,需要将其修改为服务器的 IP 地址或 0.0.0.0(监听所有接口)。

    bind 0.0.0.0

  3. port: Redis 监听的端口号,默认为 6379。

    port 6379

  4. daemonize: 是否以守护进程模式运行 Redis,默认为 no。建议设置为 yes

    daemonize yes

  5. pidfile: Redis 进程 ID 文件路径,默认为 /var/run/redis_6379.pid

    pidfile /var/run/redis_6379.pid

  6. logfile: Redis 日志文件路径,默认为 ""(标准输出)。建议设置为一个文件路径。

    logfile /var/log/redis_6379.log

  7. dir: Redis 数据目录,默认为 ""(当前目录)。建议设置为一个专门的目录。

    dir /var/lib/redis/6379

  8. requirepass: Redis 访问密码,默认为空(无密码)。为了安全起见,强烈建议设置一个强密码。

    requirepass your_strong_password

  9. maxmemory: Redis 最大内存限制,默认为 0(无限制)。如果你的服务器内存有限,建议设置一个合理的值,以避免 Redis 占用过多内存导致系统崩溃。可以使用单位(如 1gb100mb)。

    maxmemory 1gb

  10. maxmemory-policy: 当 Redis 达到最大内存限制时,采取的内存淘汰策略。常见的策略有:

    • noeviction: 不淘汰任何数据,直接返回错误。
    • allkeys-lru: 从所有键中淘汰最近最少使用的键(LRU)。
    • volatile-lru: 从设置了过期时间的键中淘汰最近最少使用的键(LRU)。
    • allkeys-random: 从所有键中随机淘汰键。
    • volatile-random: 从设置了过期时间的键中随机淘汰键。
    • volatile-ttl: 从设置了过期时间的键中淘汰 TTL(Time To Live)最小的键。

    maxmemory-policy allkeys-lru

  11. appendonly: 是否开启 AOF 持久化,默认为 no。如果需要更高的持久化保证,可以设置为 yes

    appendonly yes

  12. appendfilename: AOF 文件名,默认为 appendonly.aof

    appendfilename "appendonly.aof"

  13. 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发生了改变,就保存。

  14. 创建数据目录和日志目录:

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,我们可以将其配置为系统服务,使其能够开机自动启动,并在后台运行。

  1. 创建 Redis 用户和组: 为了安全起见,建议创建一个专门的 Redis 用户和组,用于运行 Redis 服务。

bash
sudo groupadd redis
sudo useradd -g redis -s /sbin/nologin -M redis

  1. 创建 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: 指定该服务在哪些服务之后启动。
  • UserGroup: 指定运行 Redis 服务的用户和组。
  • ExecStart: 指定 Redis 启动命令。
  • ExecStop: 指定 Redis 停止命令 (注意替换 your_strong_password 为你的 Redis 密码)。
  • Restart: 指定在 Redis 进程退出后自动重启。
  • WantedBy: 指定该服务所属的目标。

  • 重新加载 systemd 配置:

bash
sudo systemctl daemon-reload

  1. 启动 Redis 服务:

bash
sudo systemctl start redis_6379

  1. 设置 Redis 开机自启动:

bash
sudo systemctl enable redis_6379

  1. 检查 Redis 服务状态:

bash
sudo systemctl status redis_6379

如果一切正常,你应该看到 Redis 服务正在运行。
  1. 使用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 工具进行集群创建的方法。

  1. 准备多台 Redis 服务器: 至少需要 6 台 Redis 服务器(3 主 3 从)才能组成一个基本的 Redis 集群。确保这些服务器之间网络互通,并且都已经按照前面的步骤安装和配置好了 Redis。

  2. 修改每台服务器的 Redis 配置文件: 除了前面提到的配置项外,还需要添加以下配置:

  3. cluster-enabled: 启用集群模式。

    cluster-enabled yes

  4. cluster-config-file: 集群配置文件名,每个节点都需要一个不同的文件名。

    cluster-config-file nodes-6379.conf

  5. cluster-node-timeout: 集群节点超时时间,单位为毫秒。

    cluster-node-timeout 5000

  6. cluster-announce-ip: 集群广播IP

    cluster-announce-ip your_server_ip
    请将your_server_ip改为当前服务器的真实IP

  7. 启动所有 Redis 实例: 在每台服务器上启动 Redis 服务。

  8. 使用 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

    “`

  9. --cluster create: 指定创建集群。

  10. 192.168.1.101:6379 ... 192.168.1.106:6379: 列出所有 Redis 节点的 IP 地址和端口号(请替换为你实际的 IP 地址和端口号)。
  11. --cluster-replicas 1: 指定每个主节点有一个从节点。
  12. -a your_strong_password: 指定 Redis 密码。

    redis-cli 会自动分配主从节点,并进行数据分片。

  13. 验证集群状态: 使用 redis-cli 连接到集群中的任意一个节点,并执行 cluster infocluster nodes 命令,查看集群信息和节点状态。

redis-cli -c -h 192.168.1.101 -p 6379 -a your_strong_password # -c 选项表示启用集群模式
cluster info
cluster nodes

六、 安全建议与性能优化

  1. 设置强密码: 务必为 Redis 设置一个强密码,并定期更换。

  2. 限制访问来源: 使用 bind 配置项限制只允许信任的 IP 地址访问 Redis。

  3. 禁用危险命令: 通过 rename-command 配置项禁用或重命名一些危险的命令,如 FLUSHALLFLUSHDBCONFIG 等。

    rename-command FLUSHALL ""
    rename-command FLUSHDB ""
    rename-command CONFIG ""

  4. 监控 Redis: 使用 Redis 自带的 redis-cli 工具或第三方监控工具(如 RedisLive、Prometheus + Grafana)监控 Redis 的运行状态、内存使用情况、命中率等指标。

  5. 合理配置持久化: 根据你的业务需求,选择合适的持久化方式(RDB 或 AOF),并配置合理的持久化策略。

  6. 优化内存使用: 使用合适的数据结构,避免存储过大的键值对,及时清理过期数据,设置合理的内存淘汰策略。

  7. 使用连接池: 在客户端使用连接池,避免频繁创建和销毁连接,提高性能。

  8. 避免阻塞操作: 尽量避免使用一些耗时较长的命令,如 KEYSSMEMBERS 等,可以使用 SCANSSCAN 等命令代替。

  9. 考虑主从复制与哨兵模式:对于需要高可用的场景,可以配置Redis主从复制,并使用哨兵(Sentinel)模式进行故障自动转移.

总结

本文详细介绍了在 CentOS 系统上安装和配置 Redis 的完整流程,包括源码编译安装、配置文件详解、系统服务创建、集群部署,以及安全建议和性能优化。希望这篇文章能够帮助你成功搭建一个稳定、高效、安全的 Redis 服务。 请根据你的实际需求,灵活调整配置,并不断学习和探索 Redis 的更多高级特性。

发表评论

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

滚动至顶部