02、Redis 集群安装

02、Redis 集群安装

Redis 集群 是一种分布式运行 Redis 的方式,能够将数据自动分片到多个 Redis 节点 上。Redis 集群 提供一定程度的可用性,即便部分节点发生故障或无法与集群中的其他节点通信,集群仍能继续运行。如果大多数主节点不可用时,集群也无法正常工作。

1、集群端口

Redis 集群 中,每个节点需要开放两个端口:一个用于与客户端通信的 Redis 服务端口(例如 6379),另一个是用于集群内部通信的 集群总线端口。默认情况下,集群总线端口 是通过将服务端口 加上 10000 来确定的。也可以通过在 redis.conf 配置文件中的 cluster-port 选项来进行自定义设置。

在安装集群之前,必须确保每个节点的 服务端口集群总线端口 能够被集群中的所有其他节点访问。

关闭防火墙或开放端口:

关闭防火墙
systemctl stop firewalld.service

开放端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent

重新加载规则
firewall-cmd --reload

2、数据分片

Redis 集群 的数据分片方式不同于一致性哈希,而是采用一种基于哈希槽的分片机制。在这种机制中,每个键都映射到一个特定的哈希槽。Redis 集群 总共有 16384 个哈希槽。要计算某个给定键所对应的哈希槽,只需对该键进行 CRC16 哈希计算,然后对 16384 取模即可得到所在的槽位。

Redis 集群 中,每个节点负责一部分哈希槽。例如,假设有一个由 3 个节点组成的集群,其中:

  • 节点 A 负责哈希槽 0 到 5500
  • 节点 B 负责哈希槽 5501 到 11000
  • 节点 C 负责哈希槽 11001 到 16383

Redis 集群 支持多个键的操作,要求在单个命令或 Lua 脚本中涉及的所有键都位于同一个哈希槽。实际情况中多个键在同一个哈希槽的可能性不大,那么为了解决这个问题,Redis 提供了 哈希标签 特性,允许强制将多个键分配到同一个哈希槽。哈希标签 的核心原理是:如果一个键包含 {} 花括号包围的子字符串,那么只有花括号内的内容会用于计算哈希。例如,键 "user:{123}:profile" 和 "user:{123}:account" 会被分配到同一个哈希槽,因为 哈希标签 是相同的。

3、集群安装

Redis 集群 的最小配置需要至少3个主节点。为了确保更高的可用性和容错性,建议使用6节点集群,其中包含3个主节点和3个副本节点。

官方安装文档:
https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/#create-a-redis-cluster

3.1、创建6个节点

安装同 01、Redis 安装。假设安装目录为:/app/redis/,在目录下创建 6个节点目录并配置参数。

cd /app/redis/

mkdir 7000 7001 7002 7003 7004 7005

复制配置文件到 7000 节点目录中

cp /app/redis/redis-6.2.14/redis.conf ./7000/

编辑 7000 目录的配置文件以下内容:

# 后台进程启动
daemonize yes

# 关闭安全模式
protected‐mode no

# 注释 bind
# bind 127.0.0.1 -::1

# 端口
port 7000

# pidfile
pidfile /var/run/redis_7000.pid

# logfile
logfile /app/redis/7000/redis7000.log

# 数据目录
dir /app/redis/7000/

# 设置密码
requirepass 123456

# 开启AOF配置
appendonly yes
appendfilename "appendonly7000.aof"

# 启用集群配置
cluster-enabled yes
cluster-config-file nodes-7000.conf

# 设置master节点密码
masterauth 123456

替换掉其他目录的配置项

cp /app/redis/7000/redis.conf ./7001/
cp /app/redis/7000/redis.conf ./7002/
cp /app/redis/7000/redis.conf ./7003/
cp /app/redis/7000/redis.conf ./7004/
cp /app/redis/7000/redis.conf ./7005/

sed -i 's/7000/7001/g' ./7001/redis.conf
sed -i 's/7000/7002/g' ./7002/redis.conf
sed -i 's/7000/7003/g' ./7003/redis.conf
sed -i 's/7000/7004/g' ./7004/redis.conf
sed -i 's/7000/7005/g' ./7005/redis.conf

启动所有的节点

./bin/redis-server 7000/redis.conf
./bin/redis-server 7001/redis.conf
./bin/redis-server 7002/redis.conf
./bin/redis-server 7003/redis.conf
./bin/redis-server 7004/redis.conf
./bin/redis-server 7005/redis.conf

3.2、创建集群

执行以下命令创建集群:

./bin/redis-cli -a 123456 --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
  • -a 指定 redis 密码,也就是在 redis.conf 中配置的密码。
  • --cluster-replicas 1 每个主节点创建 1 个副本。

执行后创建1个副本节点的集群,6个节点也就是3主3从,输出分配的槽位信息如下图

image

输入 yes 确认,集群创建成功,将看到输出内容:[OK] All 16384 slots covered.,如下图:

image

连接查看集群节点信息

./bin/redis-cli -c -h 127.0.0.1 -p 7000 -a 123456

cluster nodes

image

posted @   半夜起来撸代码  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示