Redis集群模式安装部署

一、准备工作

  1. 安装依赖和 Redis 源码
    集群模式和单机模式类似,先安装编译环境和 Redis:

    sudo apt-get update
    sudo apt-get install build-essential
    wget https://download.redis.io/releases/redis-7.2.4.tar.gz
    tar -zxvf redis-7.2.4.tar.gz
    cd redis-7.2.4
    make
    make install
    
  2. 安装 Ruby(用于 redis-trib.rb 工具,Redis 5.x 以后推荐用 redis-cli)

    sudo apt-get install ruby
    sudo gem install redis
    

二、准备多个 Redis 实例

  1. 创建多个实例目录
    以 6 节点为例(3主3从),每个节点一个目录:

    mkdir -p ~/redis-cluster/{7000,7001,7002,7003,7004,7005}
    
  2. 复制配置文件到各实例目录

    for port in {7000..7005}; do
      cp redis-7.2.4/redis.conf ~/redis-cluster/$port/
    done
    
  3. 修改每个配置文件
    主要修改如下参数(以7000为例):

    port 7000
    cluster-enabled yes
    cluster-config-file nodes-7000.conf
    cluster-node-timeout 5000
    appendonly yes
    daemonize yes
    bind 0.0.0.0
    
    • 端口号每个实例不同(7000~7005)
    • cluster-enabled yes 开启集群
    • cluster-config-file 节点配置文件
    • appendonly yes 开启持久化
    • daemonize yes 后台运行

三、启动所有 Redis 实例

for port in {7000..7005}; do
  redis-server ~/redis-cluster/$port/redis.conf
done

四、创建集群

方式一:使用 redis-cli(推荐)

redis-cli --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
  • --cluster-replicas 1 表示每个主节点有一个从节点

方式二:使用 redis-trib.rb(旧版)

ruby redis-trib.rb create --replicas 1 \
  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

五、验证集群状态

  1. 连接集群节点

    redis-cli -c -p 7000
    
  2. 查看集群状态

    cluster info
    cluster nodes
    

六、常见部署建议

  • 生产环境建议每个节点单独服务器或虚拟机,端口可自定义
  • 建议配置密码(requirepass、masterauth)和防火墙安全策略
  • 节点数建议至少3主3从,保证高可用
  • 集群节点间网络需互通

七、集群管理常用命令

  • 查看槽分布
    redis-cli -c -p 7000 cluster slots
    
  • 手动分配槽(如有需要)
    redis-cli -c -p 7000 cluster addslots {0..5460}
    
  • 添加/删除节点、迁移槽等请参考官方文档

八、常见问题排查

  • 节点无法加入集群:检查端口防火墙、bind地址、cluster-enabled配置
  • 集群不健康:使用 cluster info 查看状态,排查主从同步、网络
  • 客户端连接报 MOVED/ASK 错误:需使用支持集群的客户端(如 redis-cli -c

九、集群运维管理

1. 集群节点管理

添加节点:

假设你要新增一个节点(如7006),步骤如下:

  1. 新建配置和目录,启动新节点(参考前面步骤)。
  2. 加入集群:
    redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
    
    第一个参数是新节点,第二个是集群中的任意节点。

删除节点:

  1. 查看节点ID:
    redis-cli -c -p 7000 cluster nodes
    
  2. 删除节点(如节点ID为abcdef123456):
    redis-cli --cluster del-node 127.0.0.1:7000 abcdef123456
    

2. 集群扩容与缩容

扩容:

  1. 新增节点并启动;
  2. 使用 add-node 命令加入集群;
  3. 重新分配槽,将部分槽迁移到新节点:
    redis-cli --cluster reshard 127.0.0.1:7000
    
    按提示选择要迁移的槽数、目标节点等。

缩容:

  1. 将节点上的槽迁移到其他节点;
  2. 使用 del-node 命令移除节点。

3. 故障处理与主从切换

  • 集群模式下,主节点故障后,集群会自动提升从节点为主节点,实现高可用。
  • 可通过 cluster failover 命令手动触发主从切换。

十、安全加固

1. 配置访问密码

在每个实例的 redis.conf 中添加:

requirepass yourpassword
masterauth yourpassword

2. 关闭危险命令

可通过 rename-command 禁用或重命名部分高危命令:

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

3. 网络安全

  • 只监听内网地址(bind参数)。
  • 配置防火墙,仅允许可信IP访问集群端口(7000~7005等)。
  • 禁止公网直接访问。

十一、集群常见问题排查

1. 节点间无法通信

  • 检查防火墙和安全组端口(默认 7000~7005 及端口+10000用于集群总线通信)。
  • 检查 bind 地址和网络配置。

2. 集群状态不健康

  • 使用 cluster info 查看状态。
  • 检查主从节点同步情况。
  • 检查是否有节点下线或丢失槽。

3. 客户端连接报错

  • 报 MOVED 或 ASK 错误,需使用支持集群的客户端(如 redis-cli -c,或者使用 JedisCluster、LettuceCluster 等)。

4. 数据分片不均衡

  • 可通过 reshard 命令重新分配槽。

十二、集群持久化与备份

  • 推荐开启 appendonly yes(AOF日志),保障数据安全。
  • 可以定期备份各节点的数据文件(如 dump.rdb、appendonly.aof)。

十三、集群升级与迁移

  • 升级前建议先备份数据。
  • 按官方文档逐节点升级,避免集群不可用。
  • 集群迁移可通过 reshard 工具迁移槽和数据。

十四、Redis 集群原理简介

1. 数据分片(Slot机制)

  • Redis 集群将所有数据分为 16384 个槽(slot)
  • 每个主节点负责一部分槽,客户端根据 key 的哈希值映射到相应的槽,然后定位到对应的主节点。
  • 当集群扩容/缩容时,通过槽迁移实现数据迁移。

2. 节点角色

  • 主节点(Master):负责读写和分片。
  • 从节点(Slave):负责备份主节点,实现高可用。

3. 集群总线

  • 节点间通过集群总线(端口号+10000)进行通信,维护分布式状态和故障检测。

十五、主从故障自动切换(Failover)

  • 集群模式下,每个主节点建议配置至少一个从节点
  • 当主节点不可用时,集群会自动选举一个从节点升级为主节点,保证分片的高可用。
  • 故障检测和自动切换由集群协议完成,无需人工干预。

十六、扩容/缩容实操示例

1. 扩容(增加主节点)

假设原有集群有3主3从,新增1主1从:

步骤:

  1. 新建两个节点目录(如7006、7007),配置端口、cluster-enabled等参数。
  2. 启动新节点:
    redis-server ~/redis-cluster/7006/redis.conf
    redis-server ~/redis-cluster/7007/redis.conf
    
  3. 将新主节点加入集群:
    redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
    
  4. 将新从节点设置为新主节点的从节点:
    • 查新主节点ID:
      redis-cli -c -p 7006 cluster nodes
      
    • 设置主从关系:
      redis-cli -c -p 7007 cluster replicate <7006主节点ID>
      
  5. 重新分配槽(迁移部分槽到新主节点):
    redis-cli --cluster reshard 127.0.0.1:7000
    
    按提示选择迁移槽数和目标节点。

2. 缩容(删除主节点)

步骤:

  1. 将要删除节点的槽迁移到其他主节点(reshard命令)。
  2. 删除节点:
    redis-cli --cluster del-node 127.0.0.1:7000 <要删除的节点ID>
    
  3. 停止并清理该节点服务。

十七、客户端连接方式

1. 使用 redis-cli

  • 集群模式需加 -c 参数:
    redis-cli -c -p 7000
    

2. Java 客户端

  • 推荐使用 JedisCluster 或 LettuceCluster。

  • 示例(Jedis):

    Set<HostAndPort> nodes = new HashSet<>();
    nodes.add(new HostAndPort("127.0.0.1", 7000));
    nodes.add(new HostAndPort("127.0.0.1", 7001));
    // ...添加全部主节点
    JedisCluster cluster = new JedisCluster(nodes, password);
    cluster.set("key", "value");
    

3. Python 客户端

  • 使用 redis-py-cluster:

    from rediscluster import RedisCluster
    startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]
    rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True, password="yourpassword")
    rc.set("key", "value")
    

4. 其他语言

  • 参考各自语言的 Redis 集群客户端,如 Node.js 的 ioredis、Go 的 go-redis。

十八、常见集群维护脚本

  • 官方 redis-cli 支持大部分集群管理操作。
  • 可用 shell 脚本批量启动/停止节点。
  • 可用 redis-cli --cluster 命令批量迁移槽、添加/删除节点等。

十九、更多参考与建议

  • 官方推荐至少3主3从,保证高可用和分片均衡。
  • 生产环境建议不同节点部署在不同物理/虚拟机上,防止单点故障。
  • 定期备份各节点数据,监控集群健康状态。
  • 详细参数和故障处理请查阅 Redis Cluster 官方文档

二十、Redis 集群高可用保障

1. 多主多从架构

  • 最少建议 3主3从,每个主节点有至少一个从节点。
  • 主节点负责分片数据,从节点实时同步主节点数据,主节点故障时自动提升从节点为主节点。

2. 自动故障转移

  • Redis 集群协议会自动检测主节点失效(通过投票机制),并自动提升从节点。
  • 故障转移无需人工干预,保证服务连续性。

3. 数据一致性

  • 集群模式下,写操作只保证主节点数据一致性,从节点异步同步。
  • 可通过客户端实现“读写分离”,即读从节点、写主节点。

二十一、监控与运维

1. 监控指标

  • 集群状态cluster infocluster nodes
  • 主从同步延迟、丢失槽数、节点下线数
  • 内存使用率、慢查询、连接数等

2. 监控工具

  • 推荐使用 Prometheus + Grafana,结合 redis_exporter
  • 也可使用开源监控系统如 Zabbix、Datadog 等。

3. 告警设置

  • 关键指标(如节点下线、主从切换、内存超限)需设置告警,及时通知运维人员。

二十二、集群扩展最佳实践

1. 扩容建议

  • 新增节点时,务必均衡分配槽,避免数据倾斜。
  • 每次扩容建议只迁移部分槽,避免影响性能。

2. 缩容建议

  • 迁移槽后再删除节点,确保数据完整性。
  • 删除节点前,建议先将其所有槽迁移到其他节点。

3. 动态扩展

  • Redis 集群支持在线扩容和缩容,业务无感知,适合高并发场景。

二十三、常见场景说明

1. 跨机房部署

  • 集群节点建议部署在同一机房或同一内网,避免网络延迟影响主从同步和故障检测。
  • 跨机房部署需关注网络可靠性和延迟。

2. 灾备方案

  • 可定期备份 RDB/AOF 文件到异地,或使用第三方同步工具实现异地灾备。

3. 读写分离

  • 业务层可将读请求路由到从节点,减轻主节点压力。
  • 需注意读从节点可能存在数据延迟。

二十四、生产环境注意事项

1. 配置优化

  • 关闭危险命令(如 FLUSHALL、FLUSHDB)。
  • 设置密码和防火墙,禁止公网访问。
  • 合理配置 maxmemory、maxclients 等参数。

2. 资源规划

  • 内存需比数据量多预留30%以上,防止 OOM。
  • 集群节点建议单独物理机或高性能虚拟机。

3. 灾难恢复

  • 定期备份,测试恢复流程。
  • 建议预案主节点全部故障或集群分裂场景。

4. 版本管理

  • 生产环境建议使用稳定版,及时关注安全补丁和升级通知。

二十五、常见问题与解决方案

问题解决方法
节点频繁下线检查网络延迟、端口防火墙、机器性能
槽分布不均使用 reshard 命令重新分配槽
主从同步延迟大检查带宽、磁盘IO、主节点压力
客户端报 MOVED/ASK使用支持集群的客户端,或升级驱动版本
数据丢失检查持久化设置,定期备份,避免单节点无从节点

二十六、实用脚本示例

1. 批量启动/停止所有节点

for port in {7000..7005}; do
  redis-server ~/redis-cluster/$port/redis.conf
done

for port in {7000..7005}; do
  redis-cli -p $port shutdown
done

2. 查看所有节点状态

for port in {7000..7005}; do
  echo "Node $port:"
  redis-cli -c -p $port cluster info
done
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩火燎猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值