☰
Current Page
Main Menu
Home
Home
Editing
Redis-Cluster三主三从集群部署文档
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# Redis Cluster 三主三从集群部署文档 ## 1. 集群架构概述 Redis Cluster 采用**无中心架构**,通过分片(Sharding)将数据分布到多个节点,每个分片由一个主节点(Master)和至少一个从节点(Slave)组成,实现高可用和负载均衡。本例部署**3个主节点 + 3个从节点**,共6个节点,保障集群的高可用性和数据冗余。 **关键特性**: - 数据分片:使用哈希槽(Hash Slot)机制,将数据划分为16384个槽,分配给不同主节点。 - 故障自动转移:当主节点宕机时,其对应的从节点会自动晋升为主节点。 - 客户端重定向:客户端可访问任意节点,若 key 不属于当前节点,会返回重定向信息。 ## 2. 环境准备与节点规划 ### 2.1 服务器与端口规划 | 节点类型 | IP地址 | 端口范围 | 示例端口 | |----------|--------|----------|----------| | 3主3从 | 192.168.184.122 | 16379–16384 | 16379(主)、16382(从)| **注意**: - 若跨服务器部署,需确保网络互通,并开放**节点端口**(如16379)和**集群总线端口**(节点端口 + 10000,如26379)。 - 集群总线用于节点间通信、故障检测和故障转移,需在防火墙中放行。 ### 2.2 依赖安装 确保所有节点已安装相同版本的 Redis(建议 5.0 及以上版本)。 ```bash # 安装编译工具 yum install -y gcc tcl # 下载并编译 Redis(以 7.0.4 为例) wget https://download.redis.io/releases/redis-7.0.4.tar.gz tar -xzf redis-7.0.4.tar.gz cd redis-7.0.4 && make && make install ``` ## 3. 节点配置 每个节点需独立配置,以下以端口 `16379` 为例,其他节点需修改 `port`、文件路径及端口相关参数。 ### 3.1 配置文件示例(redis-16379.conf) ```ini # 网络绑定地址(改为实际内网 IP 或 0.0.0.0 允许所有连接) bind 0.0.0.0 # 监听端口 port 16379 # 后台运行模式 daemonize yes # 启用集群模式 cluster-enabled yes # 集群节点配置文件(自动生成,保存集群状态) cluster-config-file "node01/nodes.conf" # 节点超时时间(毫秒) cluster-node-timeout 15000 # 进程 ID 存储路径 pidfile "node01/redis.pid" # 日志级别 loglevel warning # 日志文件路径 logfile "node01/redis.log" # 数据持久化目录 dir "node01" # 关闭 AOF 持久化(根据需求可改为 yes) appendonly no # 实例访问密码 requirepass snest123 # 主节点密码(用于从节点同步认证) masterauth snest123 ``` ### 3.2 目录结构准备 为每个节点创建数据、日志、配置文件目录: ```bash # 以节点 16379 为例 mkdir -p node01 ``` ### 3.3 启动所有节点 ```bash # 逐个启动节点 redis-server redis-16379.conf redis-server redis-16380.conf ... # 其他节点同理 # 验证进程是否启动 ps -ef | grep redis-server ``` ## 4. 创建集群 使用 `redis-cli --cluster create` 命令自动分配槽和主从关系。 ```bash redis-cli -p 16379 --cluster create \ 192.168.184.122:16379 192.168.184.122:16380 192.168.184.122:16381 \ 192.168.184.122:16382 192.168.184.122:16383 192.168.184.122:16384 \ --cluster-replicas 1 -a snest123 ``` **参数说明**: - `--cluster-replicas 1`:每个主节点配置1个从节点。 - `-a snest123`:使用密码认证。 **输出示例**: ``` >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 主节点0 分配槽信息 Master[1] -> Slots 5461 - 10922 主节点1 分配槽信息 Master[2] -> Slots 10923 - 16383 主节点2 分配槽信息 Adding replica 192.168.184.122:16383 to 192.168.184.122:16379 Adding replica 192.168.184.122:16384 to 192.168.184.122:16380 Adding replica 192.168.184.122:16382 to 192.168.184.122:16381 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: a2bb98c2eb817466caac4f32e31b9945ffb32e64 192.168.184.122:16379 slots:[0-5460] (5461 slots) master M: 588eb4717da5a33c6cc6302c76862af49ec9cea8 192.168.184.122:16380 slots:[5461-10922],[11228] (5462 slots) master M: 2e57e54f805625b9f3785ce313dcb08f02c7b4bd 192.168.184.122:16381 slots:[10923-16383] (5461 slots) master S: f75d2cd89d65f2c2e733bbe154bf7cdcc6c21163 192.168.184.122:16382 slave信息 replicates a2bb98c2eb817466caac4f32e31b9945ffb32e64 S: e8a85ee21c18b4511d69f2262397951b083301ab 192.168.184.122:16383 replicates 588eb4717da5a33c6cc6302c76862af49ec9cea8 S: 0fda6e296d09b16de637dc23f90642c89665f4cc 192.168.184.122:16384 replicates 2e57e54f805625b9f3785ce313dcb08f02c7b4bd Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node 58816:M 04 Nov 2025 10:07:56.326 * configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH 60985:M 04 Nov 2025 10:07:56.327 * configEpoch set to 2 via CLUSTER SET-CONFIG-EPOCH 61519:M 04 Nov 2025 10:07:56.327 * configEpoch set to 3 via CLUSTER SET-CONFIG-EPOCH 44101:M 04 Nov 2025 10:07:56.328 * configEpoch set to 4 via CLUSTER SET-CONFIG-EPOCH 45300:M 04 Nov 2025 10:07:56.329 * configEpoch set to 5 via CLUSTER SET-CONFIG-EPOCH 48035:M 04 Nov 2025 10:07:56.329 * configEpoch set to 6 via CLUSTER SET-CONFIG-EPOCH >>> Sending CLUSTER MEET messages to join the cluster ``` 输入 `yes` 确认配置后,集群自动完成节点握手和槽分配。 ## 5. 集群验证 ### 5.1 检查节点状态 ```bash # 查看节点列表和角色 redis-cli -p 16379 -a snest123 cluster nodes 2c485565af665ad70c0f7a75030263543d4a92ef 192.168.184.122:16382@26382,,shard-id=375d91dfb257fcdb791e533932aee1e8db37691c slave c6c396d94430d113454b4d2ffb760e06ed2c016c 0 1762226356828 2 connected c6c396d94430d113454b4d2ffb760e06ed2c016c 192.168.184.122:16380@26380,,shard-id=375d91dfb257fcdb791e533932aee1e8db37691c master - 0 1762226356000 2 connected 5461-10922 ae772e2508ce4c7ce111d8f380c04afdc2cbca62 192.168.184.122:16379@26379,,shard-id=bdcffed9f55bd814b0c8ac7eda43c26f34a933fb myself,master - 0 1762226355000 1 connected 0-5460 f9e124c4519f56208824db695547bbe7b99896dd 192.168.184.122:16383@26383,,shard-id=9896905ec818477b8b2d657d6cf2c1fbf571f9ad slave 2d358d3756882e035476753c6d52e36103968b20 0 1762226356526 3 connected 9afdcb87be5b4e485562411d65b9c32a83e504f0 192.168.184.122:16384@26384,,shard-id=bdcffed9f55bd814b0c8ac7eda43c26f34a933fb slave ae772e2508ce4c7ce111d8f380c04afdc2cbca62 0 1762226356526 1 connected 2d358d3756882e035476753c6d52e36103968b20 192.168.184.122:16381@26381,,shard-id=9896905ec818477b8b2d657d6cf2c1fbf571f9ad master - 0 1762226355823 3 connected 10923-16383 --- redis-cli -p 16379 cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:6756 cluster_stats_messages_pong_sent:6687 cluster_stats_messages_sent:13443 cluster_stats_messages_ping_received:6682 cluster_stats_messages_pong_received:6756 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:13443 total_cluster_links_buffer_limit_exceeded: ``` ### 5.2 检查集群健康度 ```bash redis-cli -p 16379 -a snest123 cluster info ``` **关键指标**: - `cluster_state:ok`:集群状态正常。 - `cluster_slots_assigned:16384`:所有槽已分配。 - `cluster_known_nodes:6`:识别到6个节点。 ### 5.3 数据读写测试 ```bash # 连接集群(-c 参数启用集群模式) redis-cli -c -p 16380 -a snest123 127.0.0.1:16380> set key1 value1 -> Redirected to slot [9189] located at 192.168.184.122:16380 OK 192.168.184.122:16380> get key1 "value1" ``` ## 6. 关键注意事项 1. **密钥哈希标签**: 若需确保多个 key 分配到同一槽(如 Lua 脚本、事务、pipeline等),需使用哈希标签(例如 `{user1000}.profile` 和 `{user1000}.history` 会被分配到同一槽)。 2. **客户端兼容性**: 客户端需支持集群模式(如 Jedis、Lettuce),并能处理 `MOVED/ASK` 重定向错误。 3. **备份与监控**: - 定期持久化 RDB/AOF 数据。 - 监控集群状态:`cluster info`、节点延迟、内存使用。 4. **故障模拟测试**: 可手动关闭主节点,验证从节点是否自动晋升(通过 `cluster nodes` 观察角色变化)。 ## 7. 常见问题 - **集群创建失败**:检查防火墙、密码一致性、总线端口是否开放。 - **节点无法加入集群**:确认所有节点已启动,且 `cluster-config-file` 可写入。 - **槽未完全分配**:执行 `redis-cli --cluster fix <host:port> -a <password>` 修复。
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel