当前位置:首页 > 问答 > 正文

Redis集群 单机部署:单机环境下如何实现Redis集群搭建与配置

Redis集群 | 单机部署:单机环境下如何实现Redis集群搭建与配置

场景引入:当开发遇上资源限制

"这需求下周就要上线,测试环境还没申请到服务器资源..." 作为开发者的你,是否也遇到过这种尴尬?最近我在开发一个需要Redis集群支持的项目时,就碰到了测试资源紧张的情况,运维同事说集群服务器要等3天才能批下来,而我的功能联调明天就要开始。

别慌!其实在单机环境下,我们完全可以模拟出一个Redis集群来应急,今天我就手把手带你用一台笔记本或开发机,快速搭建一个"麻雀虽小五脏俱全"的Redis集群环境。

准备工作:认识Redis集群

Redis集群是Redis提供的分布式解决方案,它通过分片(Sharding)将数据分散存储在多个节点上,每个节点负责一部分数据槽(slot),在单机模拟时,我们会用不同端口来区分不同节点。

你需要准备:

  • 一台Linux/Windows/Mac电脑(本文以Linux为例)
  • Redis 5.0+版本(建议用最新稳定版)
  • 基本的命令行操作能力

单机部署Redis集群详细步骤

安装Redis

如果你的机器上还没有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端口创建对应的配置文件,记得替换所有端口号。

Redis集群 单机部署:单机环境下如何实现Redis集群搭建与配置

启动所有节点

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

正常输出应该类似这样:

Redis集群 单机部署:单机环境下如何实现Redis集群搭建与配置

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中的一个)已经提升为主节点。

生产环境注意事项

虽然单机集群适合开发和测试,但要注意:

  1. 性能限制:所有节点共享同一台机器的CPU、内存和IO资源
  2. 不是高可用:单机宕机会导致整个集群不可用
  3. 仅用于开发:不要用这种方式部署生产环境

常用管理命令

  1. 检查集群健康状态:

    Redis集群 单机部署:单机环境下如何实现Redis集群搭建与配置

    redis-cli --cluster check 127.0.0.1:7000
  2. 重新平衡集群:

    redis-cli --cluster rebalance 127.0.0.1:7000
  3. 添加新节点:

    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集群原理来说,是一个非常实用的方案,下次当你遇到资源紧张的情况,不妨试试这个方法,让你的开发工作不再被环境所限制。

当项目进入测试或生产阶段时,一定要部署到真正的多机环境中去,单机集群只是我们开发路上的临时驿站,不是最终目的地。

发表评论