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
相关推荐
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川1 天前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo1 天前
查看 Tomcat 的堆内存参数
java·tomcat
那个失眠的夜1 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis