老张最近可愁坏了,他们电商平台的促销活动马上要开始了,可现有的单机Redis根本扛不住预计的流量冲击,上周测试环境就因为Redis挂了导致整个下单流程瘫痪,把运维团队折腾得够呛,技术总监直接拍板:"必须上Redis集群,要分布式、要高可用!"
想象一下,你经营着一家火爆的火锅店(单机Redis),平时生意不错,突然有一天搞五折活动(大促流量),门口排队的顾客(请求)把整条街都堵死了,这时候最好的办法是什么?开分店啊!(集群)
Redis集群主要解决三个问题:
建议至少准备6台服务器(3主3从),配置:
每台服务器都要执行:
# 安装依赖 sudo yum install -y gcc make # 下载解压 wget http://download.redis.io/releases/redis-6.2.6.tar.gz tar xzf redis-6.2.6.tar.gz cd redis-6.2.6 # 编译安装 make sudo make install
以其中一台服务器为例,创建集群配置文件:
mkdir /etc/redis-cluster cat > /etc/redis-cluster/7000.conf <<EOF port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes daemonize yes logfile "/var/log/redis/7000.log" dir /var/lib/redis/7000 EOF # 创建数据目录 mkdir -p /var/lib/redis/7000
其他服务器同理,端口可以改为7001、7002等。
每台服务器执行:
redis-server /etc/redis-cluster/7000.conf
检查是否启动成功:
ps aux | grep redis netstat -tulnp | grep 7000
任选一台服务器执行:
redis-cli --cluster create \ 192.168.1.1:7000 192.168.1.2:7000 \ 192.168.1.3:7000 192.168.1.4:7000 \ 192.168.1.5:7000 192.168.1.6:7000 \ --cluster-replicas 1
这个命令会自动把6个节点配置成3主3从的集群。--cluster-replicas 1
表示每个主节点有1个从节点。
redis-cli -c -p 7000 cluster nodes
正常会看到类似这样的输出,包含所有节点信息以及它们的主从关系。
Redis集群采用哈希槽(hash slot)分片,总共16384个槽位,均匀分布在各个主节点,你可以通过这个命令查看槽位分布:
redis-cli -p 7000 cluster slots
当主节点宕机时,对应的从节点会自动升级为主节点,恢复后的原主节点会变成新主节点的从节点。
增加新节点:
# 添加新主节点 redis-cli --cluster add-node 新节点IP:端口 现有集群任意节点IP:端口 # 重新分配槽位 redis-cli --cluster reshard 现有集群任意节点IP:端口
cluster info
redis-cli --cluster check 节点IP:端口
cluster failover
网络问题:集群节点之间必须能互相通信,防火墙要放行集群总线端口(客户端端口+10000)
内存规划:主从节点不要部署在同一物理机,避免整机宕机导致数据丢失
客户端兼容:使用支持集群模式的客户端,比如JedisCluster、Lettuce等
批量操作:跨slot的multi-key操作可能不被支持,需要特殊处理
cluster-node-timeout
老张的团队按照这个方案搭建集群后,在压测中轻松扛住了10倍于平时的流量,最重要的是,在模拟单节点故障的测试中,服务完全无感知,故障节点在30秒内就完成了自动切换,技术总监终于能睡个安稳觉了!
Redis集群不是银弹,它解决了单点问题,但也带来了运维复杂度,建议从小规模开始,逐步积累经验,遇到问题时,多查官方文档,多看看Redis的日志输出,大多数问题都能找到答案。
本文由 濯子 于2025-08-01发表在【云服务器提供商】,文中图片由(濯子)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/504662.html
发表评论