redis cluster 部署

部署一个3主3从3分片的redis集群。

1.创建目录结构
复制代码
mkdir -p /data/redis-cluster
cd /data/redis-cluster

for port in 7001 7002 7003 7004 7005 7006; do
    mkdir -p ${port}/data
    mkdir -p ${port}/logs
done
2.为每个端口创建配置文件
language 复制代码
cat > /data/redis-cluster/7001/redis.conf << 'EOF'
port 7001
bind 0.0.0.0
daemonize yes
pidfile /data/redis-cluster/7001/redis.pid
logfile "/data/redis-cluster/7001/logs/redis.log"
dir /data/redis-cluster/7001/data
dbfilename dump-7001.rdb

appendonly yes
appendfilename "appendonly-7001.aof"

cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
EOF

# 7002
cat > /data/redis-cluster/7002/redis.conf << 'EOF'
port 7002
bind 0.0.0.0
daemonize yes
pidfile /data/redis-cluster/7002/redis.pid
logfile "/data/redis-cluster/7002/logs/redis.log"
dir /data/redis-cluster/7002/data
dbfilename dump-7002.rdb

appendonly yes
appendfilename "appendonly-7002.aof"

cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
EOF

# 7003
cat > /data/redis-cluster/7003/redis.conf << 'EOF'
port 7003
bind 0.0.0.0
daemonize yes
pidfile /data/redis-cluster/7003/redis.pid
logfile "/data/redis-cluster/7003/logs/redis.log"
dir /data/redis-cluster/7003/data
dbfilename dump-7003.rdb

appendonly yes
appendfilename "appendonly-7003.aof"

cluster-enabled yes
cluster-config-file nodes-7003.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
EOF

# 7004
cat > /data/redis-cluster/7004/redis.conf << 'EOF'
port 7004
bind 0.0.0.0
daemonize yes
pidfile /data/redis-cluster/7004/redis.pid
logfile "/data/redis-cluster/7004/logs/redis.log"
dir /data/redis-cluster/7004/data
dbfilename dump-7004.rdb

appendonly yes
appendfilename "appendonly-7004.aof"

cluster-enabled yes
cluster-config-file nodes-7004.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
EOF

# 7005
cat > /data/redis-cluster/7005/redis.conf << 'EOF'
port 7005
bind 0.0.0.0
daemonize yes
pidfile /data/redis-cluster/7005/redis.pid
logfile "/data/redis-cluster/7005/logs/redis.log"
dir /data/redis-cluster/7005/data
dbfilename dump-7005.rdb

appendonly yes
appendfilename "appendonly-7005.aof"

cluster-enabled yes
cluster-config-file nodes-7005.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
EOF

# 7006
cat > /data/redis-cluster/7006/redis.conf << 'EOF'
port 7006
bind 0.0.0.0
daemonize yes
pidfile /data/redis-cluster/7006/redis.pid
logfile "/data/redis-cluster/7006/logs/redis.log"
dir /data/redis-cluster/7006/data
dbfilename dump-7006.rdb

appendonly yes
appendfilename "appendonly-7006.aof"

cluster-enabled yes
cluster-config-file nodes-7006.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
EOF
3.启动所有Redis节点
复制代码
cd /data/redis-cluster

redis-server 7001/redis.conf
redis-server 7002/redis.conf
redis-server 7003/redis.conf
redis-server 7004/redis.conf
redis-server 7005/redis.conf
redis-server 7006/redis.conf
4.检查是否启动成功
复制代码
测试每个端口是否响应
for port in 7001 7002 7003 7004 7005 7006; do
    echo -n "Port ${port}: "
    redis-cli -p ${port} ping
done
5.创建集群
复制代码
redis-cli --cluster create \
  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 \
  127.0.0.1:7006 \
  --cluster-replicas 1
6.查看集群节点信息
复制代码
查看集群节点信息
redis-cli -p 7001 cluster nodes

查看集群信息
redis-cli -p 7001 cluster info
7.模拟集群高可用

1.这个实验,写一条数据,显示写入到7001分片中,将7001分片宕机,集群将7005升级为主库,且数据未丢失。

2.将7001库重启后,7001作为7005的从库重新加入到集群,执行cluster failover 可以将7001重新升级未主库。

language 复制代码
6dfec6857f4903125e79103d2cdb03d9677c23e9 127.0.0.1:7006@17006 slave 3cc972bca5ba316ba186fce0d00e403b7786b8d5 0 1768890474417 2 connected
925ba9e7cdb8c1919e89872e60f8597594831ffa 127.0.0.1:7004@17004 slave 58320d54773f0a5b54666f932d0fb37d745e1212 0 1768890476000 3 connected
3cc972bca5ba316ba186fce0d00e403b7786b8d5 127.0.0.1:7002@17002 myself,master - 0 0 2 connected 5461-10922
58320d54773f0a5b54666f932d0fb37d745e1212 127.0.0.1:7003@17003 master - 0 1768890476425 3 connected 10923-16383
6745c9aa35c4ce24fa2475c000078800d2771e0d 127.0.0.1:7001@17001 master - 0 1768890476000 1 connected 0-5460
54f8b28b9e3719ec27099094df4fdc1a12f44183 127.0.0.1:7005@17005 slave 6745c9aa35c4ce24fa2475c000078800d2771e0d 0 1768890477428 1 connected

#插入一条值
redis-cli -p 7002 -c 
127.0.0.1:7002> 
127.0.0.1:7002> set test1 123
-> Redirected to slot [4768] located at 127.0.0.1:7001
OK

#数据插入到7001的分片中,将7001 shutdown
redis-cli -p 7001 shutdown

#查看集群信息
redis-cli -p 7002 cluster nodes
6dfec6857f4903125e79103d2cdb03d9677c23e9 127.0.0.1:7006@17006 slave 3cc972bca5ba316ba186fce0d00e403b7786b8d5 0 1768891024515 2 connected
925ba9e7cdb8c1919e89872e60f8597594831ffa 127.0.0.1:7004@17004 slave 58320d54773f0a5b54666f932d0fb37d745e1212 0 1768891023000 3 connected
3cc972bca5ba316ba186fce0d00e403b7786b8d5 127.0.0.1:7002@17002 myself,master - 0 0 2 connected 5461-10922
58320d54773f0a5b54666f932d0fb37d745e1212 127.0.0.1:7003@17003 master - 0 1768891024000 3 connected 10923-16383
6745c9aa35c4ce24fa2475c000078800d2771e0d 127.0.0.1:7001@17001 master,fail - 1768890943144 1768890937121 1 disconnected
54f8b28b9e3719ec27099094df4fdc1a12f44183 127.0.0.1:7005@17005 master - 0 1768891025519 7 connected 0-5460

#显示7001宕机,7005作为7001的从库,升为主库

[root@iv-ye4xdz3ncwwh2ypb2dr5 ~]# redis-cli -p 7002 
127.0.0.1:7002> keys *
1) "name"
2) "counter"
3) "test"
127.0.0.1:7002> exit
[root@iv-ye4xdz3ncwwh2ypb2dr5 ~]# redis-cli -p 7005
127.0.0.1:7005> keys *
1) "test1"
127.0.0.1:7005> 

#test1在7005存在


#将7001库拉起来,redis-server 7001/redis.conf ,可以看到7001又作为7005的从库加入到集群中

[root@iv-ye4xdz3ncwwh2ypb2dr5 redis-cluster]# redis-cli -p 7002 cluster nodes
6dfec6857f4903125e79103d2cdb03d9677c23e9 127.0.0.1:7006@17006 slave 3cc972bca5ba316ba186fce0d00e403b7786b8d5 0 1768891151035 2 connected
925ba9e7cdb8c1919e89872e60f8597594831ffa 127.0.0.1:7004@17004 slave 58320d54773f0a5b54666f932d0fb37d745e1212 0 1768891153000 3 connected
3cc972bca5ba316ba186fce0d00e403b7786b8d5 127.0.0.1:7002@17002 myself,master - 0 0 2 connected 5461-10922
58320d54773f0a5b54666f932d0fb37d745e1212 127.0.0.1:7003@17003 master - 0 1768891152039 3 connected 10923-16383
6745c9aa35c4ce24fa2475c000078800d2771e0d 127.0.0.1:7001@17001 slave 54f8b28b9e3719ec27099094df4fdc1a12f44183 0 1768891153042 7 connected
54f8b28b9e3719ec27099094df4fdc1a12f44183 127.0.0.1:7005@17005 master - 0 1768891154046 7 connected 0-5460
[root@iv-ye4xdz3ncwwh2ypb2dr5 redis-cluster]# redis-cli -p 7001

#执行cluster failover 重新将7001升为主库。
127.0.0.1:7001> cluster failover
OK
127.0.0.1:7001> exit
[root@iv-ye4xdz3ncwwh2ypb2dr5 redis-cluster]# redis-cli -p 7002 cluster nodes
6dfec6857f4903125e79103d2cdb03d9677c23e9 127.0.0.1:7006@17006 slave 3cc972bca5ba316ba186fce0d00e403b7786b8d5 0 1768891295000 2 connected
925ba9e7cdb8c1919e89872e60f8597594831ffa 127.0.0.1:7004@17004 slave 58320d54773f0a5b54666f932d0fb37d745e1212 0 1768891297560 3 connected
3cc972bca5ba316ba186fce0d00e403b7786b8d5 127.0.0.1:7002@17002 myself,master - 0 0 2 connected 5461-10922
58320d54773f0a5b54666f932d0fb37d745e1212 127.0.0.1:7003@17003 master - 0 1768891298564 3 connected 10923-16383
6745c9aa35c4ce24fa2475c000078800d2771e0d 127.0.0.1:7001@17001 master - 0 1768891297000 8 connected 0-5460
54f8b28b9e3719ec27099094df4fdc1a12f44183 127.0.0.1:7005@17005 slave 6745c9aa35c4ce24fa2475c000078800d2771e0d 0 1768891296000 8 connected
相关推荐
重生之后端学习2 小时前
19. 删除链表的倒数第 N 个结点
java·数据结构·算法·leetcode·职场和发展
s_daqing2 小时前
ubuntu(arm)安装redis
linux·redis·ubuntu
qq_12498707532 小时前
基于小程序中医食谱推荐系统的设计(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·小程序·毕业设计·计算机毕业设计
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-阅卷评分模块时序图
java·人工智能·spring boot
wangmengxxw2 小时前
SpringAi-Advisor续
redis·springai·advisor
linweidong2 小时前
C++大型系统中如何组织头文件和依赖树?
java·c++·架构
鹿角片ljp2 小时前
力扣14.最长公共前缀-纵向扫描法
java·算法·leetcode
pengweizhong3 小时前
Dynamic‑SQL2 查询篇:MyBatis 增强利器,让 SQL 像写 Java 一样丝滑
java·sql·教程
Remember_9933 小时前
【数据结构】深入理解优先级队列与堆:从原理到应用
java·数据结构·算法·spring·leetcode·maven·哈希算法