前提:处理好配置文件。
一、通过配置文件启动三个Redis实例。
执行命令:redis-server /opt/redis/cluster/16381/16381.conf
二、因为 Redis 集群至少需要 3 个主节点。所以这三个都是主节点,暂不考虑从节点。
创建一个包含 3 个主节点的 Redis 集群,每个主节点有 0个从节点
执行命令:redis-cli -a 123456 --cluster create 10.22.12.34:16379 10.22.12.34:16380 10.22.12.34:16381 --cluster-replicas 0
--cluster-replicas
:后面跟随的是要为每个主节点创建的从节点副本的数量。<nodeX_ip>:<nodeX_port>
:这些是集群中每个 Redis 节点的 IP 地址和端口号。- -a 密码
成功创建了一个Redis集群:
创建集群过程中遇到的问题处理:
(1)、[ERR] Node 10.22.82.33:16379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
错误信息[ERR] Node 10.22.12.34:16379 is not empty
表明您尝试创建Redis集群时,指定的节点不为空。这可能意味着该节点已经是另一个集群的一部分,或者它包含数据库0中的一些键。以下是解决这个问题的几个步骤:
-
检查现有节点: 使用
CLUSTER NODES
命令检查指定节点的状态和集群信息:redis-cli -p 16379 -a 123456 cluster nodes
确认节点是否已经属于一个集群。
-
清空节点: 如果需要,使用
FLUSHALL
命令清空所有数据库中的键:redis-cli -p 16379 -a 123456 flushall
注意:这将删除所有数据,确保在执行此操作之前已经备份了重要数据。
-
检查集群配置: 确保所有节点的配置文件(
redis.conf
)已正确设置为集群模式,并且具有相同的cluster-config-file
路径。 -
重新初始化集群: 如果节点之前是集群的一部分,并且您已清空了节点,您可能需要使用
redis-cli --cluster reset
命令重置集群状态:redis-cli -p 16379 -a 123456 cluster reset
-
重新创建集群: 在清空并重置节点后,再次尝试创建集群:
redis-cli --cluster create -a 123456 10.22.12.34:16379 10.22.12.34:16380 10.22.12.34:16381 --cluster-replicas 0
-
检查端口和密码: 确保您使用的端口号和密码与Redis配置中的设置相匹配。
-
检查网络连接: 确保所有节点之间的网络连接正常,并且没有防火墙或网络安全设置阻止节点之间的通信。
-
使用安全的密码管理: 尽管警告信息指出使用
-a
选项可能不安全,但如果您在安全的环境中操作,这通常不是问题。或者,您可以使用--askpass
选项在执行时输入密码。 -
检查Redis版本: 确保您使用的Redis版本支持集群模式。
(2)如果--cluster-replicas 为1,即每个主节点有 1个从节点。我们只配置了三个主节点,当执行该命令:redis-cli --cluster create -a 123456 10.22.12.34:16379 10.22.12.34:16380 10.22.12.34:16381 --cluster-replicas 1 ,会报如下错误信息
"*** ERROR: Invalid configuration for cluster creation. Redis Cluster requires at least 3 master nodes. This is not possible with 3 nodes and 1 replicas per node. At least 6 nodes are required."" 指出当前尝试创建的 Redis 集群配置无效,因为 Redis 集群至少需要 3 个主节点,而根据指定的副本数量,总共至少需要 6 个节点。
解释:
- 主节点:在 Redis 集群中,主节点是负责处理写操作的节点。
- 从节点:从节点是主节点的副本,用于提供读取操作的负载均衡和数据冗余。
Redis 集群的最小配置要求是 3 个主节点,因为集群需要多数派(即超过一半的主节点)来保证写操作的持久性和集群的稳定性。如果每个主节点只有一个从节点,那么至少需要 3 个主节点加上 3 个从节点,共 6 个节点。
解决方法:改成每个主节点有0个从节点
--cluster-replicas 1改成--cluster-replicas 0
即:redis-cli --cluster create -a 123456 10.22.12.34:16379 10.22.12.34:16380 10.22.12.34:16381 --cluster-replicas 0
三、测试验证-创建 Redis 集群成功后,您需要进行一系列测试来验证集群的功能和性能。以下是一些常见的测试和验证步骤:
1. **基本功能测试**:
- 使用 `redis-cli` 连接到集群并执行一些基本的 SET 和 GET 操作,以确保键值对可以正确地存储和检索。
2. **数据分片验证**:
- 由于 Redis 集群将数据分布在不同的节点上,您需要验证数据是否按照预期分片并存储在正确的节点上。
3. **读写操作**:
- 在不同的节点上执行写入和读取操作,以确保集群能够处理读写请求。
4. **故障转移测试**:
- 模拟主节点故障,以验证从节点能否成功提升为主节点并接管主节点的槽。
5. **网络分区测试**:
- 模拟网络分区情况,以验证集群的稳定性和自动恢复能力。
6. **性能测试**:
- 使用压力测试工具(如 `redis-benchmark`)来测试集群的性能,包括吞吐量和延迟。
7. **监控和日志检查**:
- 检查 Redis 集群的监控指标和日志文件,以确保没有错误或警告。
8. **自动化测试**:
- 如果可能,编写自动化测试脚本来执行上述测试,并验证集群的行为是否符合预期。
9. **使用客户端库**:
- 使用支持 Redis 集群的客户端库在应用程序中进行测试,以确保应用程序能够正确地与集群交互。
10. **安全性检查**:
- 验证密码保护、网络安全设置和访问控制列表(ACL)是否按预期工作。
### 示例测试命令:
```sh
# 连接到集群并设置键值对
redis-cli -a 123456 -c set mykey "myvalue"
# 从集群中获取键值
redis-cli -a 123456 -c get mykey
# 检查集群信息
redis-cli -a 123456 cluster info
# 检查集群节点状态
redis-cli -a 123456 cluster nodes
```
**注意**:
- 使用 `-a` 选项提供密码,如果集群配置了密码保护。
- 使用 `-c` 选项启用集群模式,这允许 `redis-cli` 在集群中自动重定向命令到正确的节点。
通过这些测试,您可以验证 Redis 集群是否正常工作,并确保其满足您的应用程序需求。如果在测试过程中发现问题,您可能需要回顾集群配置或寻求专业帮助。