在本文中,我们将详细介绍在 CentOS 7 上安装 Redis 7.4 集群的步骤。Redis 是一个高性能的内存数据库,而集群模式可以提供更高的可用性和扩展性。今天要分享的是使用2024年10月17日截止的最新的 Redis版本,我们将用最简单的方式搭建实战完整集群,其中包括主从部署、集群分片存储。
一、准备工作
- 确保你有三台 CentOS 7 服务器,可以通过 SSH 连接到这些服务器进行操作。
- 确保服务器上已经安装了必要的依赖项,如 gcc 和 tcl。如果没有安装,可以使用以下命令进行安装:
sudo yum install gcc tcl
如遇提示是否确认安装,输入 y ,然后 回车。
二、下载和安装 Redis
1. 在每台服务器上下载 Redis 7.4 的安装包:
可以通过源码编译的方式,将 Redis 安装到 usr/local/redis 目录下:
#创建redis目录
mkdir /usr/local/redis
#进入该目录
cd /usr/local/redis/
#下载Redis 7.4
wget https://download.redis.io/releases/redis-7.4.0.tar.gz
2. 解压压缩包:
tar -zxvf redis-7.4.0.tar.gz
3. 进入解压后的目录:
cd redis-7.4.0
4. 编译和安装 Redis:
make
sudo make install
三、配置 Redis 集群
1. 在每台服务器上创建一个专门用于存储 Redis 集群配置文件的目录:
mkdir /etc/redis-cluster
2. 复制 Redis 配置文件到集群配置目录,并进行修改。以一台服务器为例:
cp redis.conf /etc/redis-cluster/redis-7400.conf
cp redis.conf /etc/redis-cluster/redis-7401.conf
使用 vim /etc/redis-cluster/redis-7400.conf 修改 redis-7400.conf 配置文件,加入以下配置:
bind 0.0.0.0
requirepass 123456abc
protected-mode no
port 7400
cluster-enabled yes
cluster-config-file nodes-7400.conf
cluster-node-timeout 5000
appendonly yes
- bind 0.0.0.0:允许 Redis 服务器接受来自任何 IP 地址的连接请求。在生产环境中,谨慎使用这个设置,因为它可能会增加安全风险。可以考虑绑定到特定的 IP 地址或使用防火墙来限制对 Redis 服务器的访问。
- requirepass 123456abc:设置 Redis 服务器的访问密码为 “123456abc”。
- protected-mode no:关闭 Redis 服务器的保护模式,允许外部连接。在保护模式下,Redis 服务器只接受来自本地回环地址(127.0.0.1)、已绑定的 IP 地址或已配置的 Unix 域套接字的连接请求。
- port 7400:指定 Redis 服务器监听的端口为 7400。
- cluster-enabled yes:启用 Redis 集群模式。Redis 服务器将作为集群的一部分运行,可以与其他节点协同工作,实现数据的分布式存储和高可用性。
- cluster-config-file nodes-7400.conf:指定该节点在 Redis 集群中的配置文件名。这个文件将存储集群的节点信息、状态和配置等。每个节点都有自己的配置文件,文件名通常以节点的端口号或其他标识命名。在集群运行过程中不要手动修改配置文件,以免导致集群出现问题。
- cluster-node-timeout 5000:设置 Redis 集群节点超时时间为 5000 毫秒。当一个节点在指定的时间内没有响应时,其他节点将认为该节点出现故障,并进行相应的故障转移和重新配置。
- appendonly yes:启用 AOF 持久化模式,将写命令追加到文件以保证数据持久化。AOF 持久化会增加磁盘 I/O 开销,并且可能会影响 Redis 的性能。根据应用的需求和对数据持久性的要求,权衡是否启用 AOF 持久化。同时,要定期备份 AOF 文件,以防止数据丢失。
3. 配置其他服务器
重复上述步骤,为每台服务器上的不同 Redis 节点创建不同的配置文件,修改端口号和配置文件名称,最终完成6个节点配置(最少6个节点),即每台服务器有两个节点。
#服务器A
192.168.117.128:7400
192.168.117.128:7401
#服务器B
192.168.117.129:7402
192.168.117.129:7403
#服务器C
192.168.117.131:7404
192.168.117.131:7405
四、启动 Redis 节点
在每台服务器上,分别使用不同的配置文件启动 Redis 节点。例如,在第一台服务器上:
redis-server /etc/redis-cluster-server1/redis-7400.conf
redis-server /etc/redis-cluster-server1/redis-7401.conf
五、创建 Redis 集群
在其中一台服务器上(比如服务器一),进入 Redis 安装目录的 src 目录下执行以下命令:
redis-cli --cluster create 192.168.117.128:7400 192.168.117.128:7401 192.168.117.129:7402 192.168.117.129:7403 192.168.117.131:7404 192.168.117.131:7405 --cluster-replicas 1 -a 123456abc
出现以下提示,输入 yes:
Can I set the above configuration? (type 'yes' to accept):
- redis-cli --cluster create:使用 Redis 命令行客户端以创建集群的模式执行操作。
- 192.168.117.128:7400 192.168.117.128:7401 192.168.117.129:7402 192.168.117.129:7403 192.168.117.131:7404 192.168.117.131:7405:指定要创建集群的 Redis 节点的 IP 地址和端口号。这里列出了六个节点,分布在三个不同的 IP 地址上,每个 IP 地址上有两个端口不同的节点,通常会被配置为三主三从的集群架构。
- cluster-replicas 1:表示为每个主节点创建一个从节点。
- -a 123456abc:指定连接 Redis 时的密码。
六、测试 Redis 集群
1. 使用 CLUSTER NODES 查看集群节点详细信息
CLUSTER NODES
得到如下信息,说明Redis集群搭建成功:
7e4459532775b0b5b43f8ee516915508543f9ae7 192.168.117.128:7400@17400 master - 0 1729136577087 1 connected 0-5460
47840ce86f17af17f4b7d77c4dc209299dfe63ef 192.168.117.129:7403@17403 slave 7e4459532775b0b5b43f8ee516915508543f9ae7 0 1729136575000 1 connected
83f1b422afc4b6b1e9111aaf67dd3d8a980230c0 192.168.117.129:7402@17402 myself,master - 0 0 3 connected 5461-10922
d3427a92a210f78fa21740822a682c9ef0232541 192.168.117.128:7401@17401 slave a1edad65d10f0195e8109940152362fda9ce2ae3 0 1729136576583 5 connected
a1edad65d10f0195e8109940152362fda9ce2ae3 192.168.117.131:7404@17404 master - 0 1729136576096 5 connected 10923-16383
37c4830e2b6b3105fa25b52f854d853c55f3d927 192.168.117.131:7405@17405 slave 83f1b422afc4b6b1e9111aaf67dd3d8a980230c0 0 1729136575062 3 connected
2. 设置和查看缓存
设置两个 key:
set key1 value1
查看 key:
192.168.117.131:7404> get key1
-> Redirected to slot [9189] located at 192.168.117.129:7402
"value1"
192.168.117.129:7402> get key2
-> Redirected to slot [4998] located at 192.168.117.128:7400
"value2"
192.168.117.128:7400> get key3
"value3"
192.168.117.128:7400> get key4
-> Redirected to slot [13120] located at 192.168.117.131:7404
"value4"
以上操作中,我们在任意一台集群中的节点上设置了4个key ,分别存储到了三个不同的主节点上,为什么会分生这种现象?这其实是因为 Redis 集群的 分片算法。
七、深入Redis集群工作原理
分布式的 Redis 集群是使用 Redis 解决 高可用 和 可扩展性 的 最终解决方案:
1. 高可用性
- 如果其中一台服务器出现故障,集群仍然可以正常运行。例如,假设服务器一出现故障,服务器二和服务器三上的 Redis 节点可以继续处理请求,保证服务不中断。
- 当某台服务器的某个节点失效时,集群会自动进行故障转移。比如,一个主节点故障,其对应的从节点会被提升为主节点,继续提供服务。
2. 可扩展性
- 可以随着业务的增长轻松添加更多的节点。如果数据量和请求量增加,可以在不影响现有服务的情况下,添加新的服务器和 Redis 节点到集群中。
- 能够处理更大的负载,提高系统的整体性能。
3. 数据分布与缓存存储方式
Redis 集群采用哈希槽(Hash Slot)机制来分布数据。整个集群被划分为 16384 个哈希槽,每个节点负责一部分哈希槽。
例如:
- 以上集群示例中,有三个主节点:192.168.117.128:7400,192.168.117.129:7402,192.168.117.131:7404,每个主节点有一个从节点。
- 集群初始化时,会将 16384 个哈希槽分配给这三个主节点,主节点 7400 负责 0 - 5460 号哈希槽,主节点 7402 负责 5461 - 10922 号哈希槽,主节点 7404 负责 10923 - 16383 号哈希槽。
- 当有一个键值对需要存储时,Redis 会根据键的哈希值计算出对应的哈希槽。如果这个哈希槽属于节点 7400 负责的范围,那么这个键值对就会存储在节点 7400 上。 7400 是主节点,当有数据写入时,主节点会将数据 同步 到从节点,以实现数据备份。
这样的分布方式确保数据在集群中的各个节点上均匀分布,提高了存储容量和查询性能。同时,通过主从复制机制保证了数据的安全性和高可用性。
八、实战中的一些建议
- 如果可能,为 Redis 集群创建一个独立的网络环境,以减少与其他应用程序的网络干扰。
- 根据实际需求合理设置 Redis 的内存限制。避免内存不足导致的问题,同时也要考虑内存使用效率。
- 根据数据的重要性和性能要求选择合适的持久化策略,如 RDB(Redis Database)或 AOF(Append Only File)。可以结合使用两种策略以提高数据的安全性。
- 为每个主节点配置多个从节点,以提高数据的冗余性和可用性。当主节点出现故障时,多个从节点可以提供更快的故障转移。上文中每个服务器上有两个节点,即一主一从,这种方式只为示例讲解,实战中应该将主从节点分开。否则当这台服务器宕机时将造成部分分片不可用的状态。
- band 后面尽量不使用 0.0.0.0,这样会带来一些风险,正确的做法是仅设置允许访问的IP。
- 监控 Redis 集群的关键指标,如内存使用情况、CPU 使用率、连接数、命令执行时间、节点状态等。可以使用 Redis 自带的监控命令或第三方监控工具,如 Prometheus 和 Grafana。
- 设置合理的报警阈值,当监控指标超过阈值时及时发出报警。这可以帮助你快速发现问题并采取措施进行处理。
- 开启 Redis 的日志记录功能,以便在出现问题时进行故障排查。可以将日志发送到集中的日志管理系统进行分析。
- 使用防火墙或网络访问控制列表(ACL)限制对 Redis 端口的访问,只允许来自可信来源的连接。
- 定期对 Redis 集群进行备份,以防止数据丢失。可以使用 RDB 或 AOF 文件进行备份,并将备份存储在安全的位置。此外,也需要定期进行恢复测试,以确保备份的有效性和恢复过程的可靠性。这可以帮助你在实际发生故障时快速恢复数据。
结束语
Redis 7.4 集群搭建是一个复杂但重要的过程,首先要准备好三台或更多的服务器,确保安装必要的依赖并正确安装 Redis 7.4。接着,在每台服务器上创建合适的配置文件,开启集群模式、设置端口、配置持久化等参数,并启动 Redis 节点。然后,使用 redis-cli 命令并结合特定参数在其中一台服务器上创建集群,指定各个节点的 IP 地址和端口号,以及设置主从节点比例。创建完成后,可通过多种方式如 INFO 命令、第三方监控工具、日志监控和客户端监控来持续监测集群的健康状态。在实践中,要注重硬件和网络环境的可靠性、选择合适的 Redis 版本、优化配置参数、合理设置主从配置、建立完善的监控和报警机制、加强安全设置,并做好备份和恢复以及扩展性规划,以确保 Redis 7.4 集群的高可用性、高性能和数据安全性,为业务应用提供稳定可靠的缓存服务。