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
相关推荐
草履虫建模8 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
qq_2975746711 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚11 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学11 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang2015092811 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚11 小时前
Java入门17——异常
java·开发语言
缘空如是11 小时前
基础工具包之JSON 工厂类
java·json·json切换
追逐梦想的张小年12 小时前
JUC编程04
java·idea
好家伙VCC12 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
南极星100512 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言