"这需求下周就要上线,测试环境还没申请到服务器资源..." 作为开发者的你,是否也遇到过这种尴尬?最近我在开发一个需要Redis集群支持的项目时,就碰到了测试资源紧张的情况,运维同事说集群服务器要等3天才能批下来,而我的功能联调明天就要开始。
别慌!其实在单机环境下,我们完全可以模拟出一个Redis集群来应急,今天我就手把手带你用一台笔记本或开发机,快速搭建一个"麻雀虽小五脏俱全"的Redis集群环境。
Redis集群是Redis提供的分布式解决方案,它通过分片(Sharding)将数据分散存储在多个节点上,每个节点负责一部分数据槽(slot),在单机模拟时,我们会用不同端口来区分不同节点。
你需要准备:
如果你的机器上还没有Redis,先安装它:
# Ubuntu/Debian sudo apt update sudo apt install redis-server -y # CentOS/RHEL sudo yum install epel-release sudo yum install redis -y # MacOS brew install redis
安装完成后,确认版本:
redis-server --version
我们将创建6个节点(3主3从)来组成集群:
mkdir -p ~/redis-cluster cd ~/redis-cluster for port in {7000..7005}; do mkdir ${port} done
为每个端口创建配置文件,以7000端口为例:
cat > 7000/redis.conf <<EOF port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes daemonize yes pidfile /var/run/redis_7000.pid logfile "7000/redis.log" dir ./7000/ EOF
重复这个步骤,为7001-7005端口创建对应的配置文件,记得替换所有端口号。
for port in {7000..7005}; do redis-server ${port}/redis.conf done
检查是否全部启动成功:
ps aux | grep redis-server
你应该能看到6个redis-server进程。
现在使用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
表示每个主节点有1个从节点。
执行后会显示分配方案,输入yes
确认:
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[OK] Perfect anti-affinity obtained!
Can I set the above configuration? (type 'yes' to accept): yes
redis-cli -p 7000 cluster nodes
正常输出应该类似这样:
a1b2c3... 127.0.0.1:7000@17000 myself,master - 0 1620000000000 1 connected 0-5460
d4e5f6... 127.0.0.1:7001@17001 master - 0 1620000000000 2 connected 5461-10922
g7h8i9... 127.0.0.1:7002@17002 master - 0 1620000000000 3 connected 10923-16383
j1k2l3... 127.0.0.1:7003@17003 slave g7h8i9... 0 1620000000000 3 connected
m4n5o6... 127.0.0.1:7004@17004 slave a1b2c3... 0 1620000000000 1 connected
p7q8r9... 127.0.0.1:7005@17005 slave d4e5f6... 0 1620000000000 2 connected
# 连接到任意节点 redis-cli -c -p 7000 # 设置几个键值 127.0.0.1:7000> set name "DevOps" -> Redirected to slot [5798] located at 127.0.0.1:7001 OK 127.0.0.1:7001> set age 30 -> Redirected to slot [741] located at 127.0.0.1:7000 OK 127.0.0.1:7000> set city "Beijing" -> Redirected to slot [1314] located at 127.0.0.1:7000 OK
注意观察重定向提示,这说明集群在正常工作。
让我们模拟主节点宕机:
# 找出一个主节点的进程ID ps aux | grep redis-server | grep 7000 # 杀死该进程 kill -9 <PID>
等待约15秒后,检查集群状态:
redis-cli -p 7001 cluster nodes
你会发现原来的从节点(7003/7004/7005中的一个)已经提升为主节点。
虽然单机集群适合开发和测试,但要注意:
检查集群健康状态:
redis-cli --cluster check 127.0.0.1:7000
重新平衡集群:
redis-cli --cluster rebalance 127.0.0.1:7000
添加新节点:
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
测试完成后,优雅地关闭集群:
for port in {7000..7005}; do redis-cli -p ${port} shutdown done
通过这种方式,我们在一台机器上成功模拟了Redis集群的所有关键特性,虽然这不能替代真正的分布式部署,但对于开发测试、学习Redis集群原理来说,是一个非常实用的方案,下次当你遇到资源紧张的情况,不妨试试这个方法,让你的开发工作不再被环境所限制。
当项目进入测试或生产阶段时,一定要部署到真正的多机环境中去,单机集群只是我们开发路上的临时驿站,不是最终目的地。
本文由 位济 于2025-08-02发表在【云服务器提供商】,文中图片由(位济)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/517658.html
发表评论