当前位置: 首页 > news >正文

Redis集群——redis cluster(去中心化)

目录

一、集群介绍 

二、配置集群

 1. 环境说明

 2. 在redis主机中做如下配置

 3. 将文件复制到另外两台主机依次启动

 4. 查看

 5. 创建集群

 6. 查看集群状态

 7. 测试

三、故障转移

 1. 模拟master宕机

 2. 再次启动master1,发现master1变成了从

四、集群扩容

 1. 向现有集群中添加两个节点,这两个节点做一主一从

 2. 添加主节点

 3. 添加从节点

 4. 查看插槽分配情况

五、集群缩容


一、集群介绍 

  • Redis 集群的优势:

    • 自动分割数据到不同的节点上。

    • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

二、配置集群

 1. 环境说明

主机说明主机IP端口
master1192.168.248.206379
slave1192.168.248.206380
master2192.168.248.216379
slave2192.168.248.216380
master3192.168.248.226379
slave3192.168.248.226380

 2. 在redis主机中做如下配置

#修改如下配置
[root@master1 ~]# vim /etc/redis/redis.conf
添加如下内容:
port 6379   # 修改端口号
pidfile /var/run/redis_6379.pid  # 修改pid文件名
dir /var/lib/redis  		# 持久化文件存放目录
dbfilename dump_6379.rdb   	# 修改持久化文件名
bind 0.0.0.0  	 # 绑定地址
daemonize yes		# 让redis后台运行
protected-mode no	# 关闭保护模式
logfile /var/log/redis/redis_6379.log  # 指定日志
cluster-enabled yes  # 开启集群功能
cluster-config-file nodes-6379.conf   #设定节点配置文件名,不需要我们创建,由redis自己维护
cluster-node-timeout 10000   # 节点心跳失败的超时时间,超过该时间(毫秒),集群自动进行主从切换# 启动第一个redis实例
[root@master1 ~]# systemctl restart redis
[root@master1 ~]# ss -lntup | grep redis
tcp  LISTEN 0   511          0.0.0.0:6379       0.0.0.0:*    users:(("redis-server",pid=28535,fd=6))# 在该主机上启动另外一个6380端口的实例
[root@master1 ~]# cp /etc/redis/redis.conf /etc/redis/redis-6380.conf
[root@master1 ~]# vim /etc/redis/redis-6380.conf
添加如下内容:
bind 0.0.0.0
protected-mode no
port 6380
daemonize no
pidfile /var/run/redis_6380.pid
logfile /var/log/redis/redis_6380.log
dbfilename dump_6380.rdb
dir /var/lib/redis
cluster-enabled yes
cluster-config-file nodes-6380.conf
cluster-node-timeout 15000[root@master1 ~]# redis-server  /etc/redis/redis-6380.conf# 使用命令启动6380实例并将其放在后台
[root@master1 ~]# redis-server  /etc/redis/redis-6380.conf  &
[1] 28610# 查看是否有两个redis实例
[root@master1 ~]# ss -lntup | grep redis
tcp   LISTEN 0      511          0.0.0.0:6379       0.0.0.0:*    users:(("redis-server",pid=28535,fd=6))
tcp   LISTEN 0      511          0.0.0.0:6380       0.0.0.0:*    users:(("redis-server",pid=28610,fd=6))

 3. 将文件复制到另外两台主机依次启动

[root@master1 ~]# scp /etc/redis/redis.conf /etc/redis/redis-6380.conf  root@192.168.248.21:/etc/redis
root@192.168.248.21's password:
redis.conf                  100%   92KB  44.0MB/s   00:00
redis-6380.conf             100%   92KB  59.7MB/s   00:00[root@master1 ~]# scp /etc/redis/redis.conf /etc/redis/redis-6380.conf  root@192.168.248.22:/etc/redis#master2上操作---------------------------------------------------------
[root@master2 ~]# systemctl restart redis
[root@master2 ~]# redis-server /etc/redis/redis-6380.conf  &
[root@master2 ~]# ss -lntup | grep  redis
tcp   LISTEN 0      511          0.0.0.0:6380       0.0.0.0:*    users:(("redis-server",pid=28344,fd=6))
tcp   LISTEN 0      511          0.0.0.0:6379       0.0.0.0:*    users:(("redis-server",pid=28339,fd=6))#master3上操作---------------------------------------------------------
[root@master3 ~]# systemctl restart redis
[root@master3 ~]# redis-server /etc/redis/redis-6380.conf  &
[root@master3 ~]# ss -lntup | grep redis

 4. 查看

#使用如下命令在所有主机上都可以看到所有实例生成的rdb文件和nodes文件
# ls /var/lib/redis/
dump_6380.rdb  dump.rdb  nodes-6379.conf  nodes-6380.conf

 5. 创建集群

[root@master1 ~]# redis-cli --cluster create --cluster-replicas 1 192.168.248.20:6379 192.168.248.21:6379 192.168.248.22:6379  192.168.248.20:6380  192.168.248.21:6380 192.168.248.22:6380Can I set the above configuration? (type 'yes' to accept):   # 输入yes# 最后成功输出如下
>>> Performing Cluster Check (using node 192.168.248.20:6379)
M: 8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380slots: (0 slots) slavereplicates 8f4d528e62fd077c7cc2196a69714485dc3eaeb3
S: 927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380slots: (0 slots) slavereplicates f390cccd86cc2235265c0c252e0d1dbe7d9cbae5
M: 7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380slots: (0 slots) slavereplicates 7253027625f1cd27301d8f07a39f5b1ac81e6878
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 6. 查看集群状态

[root@master1 ~]# redis-cli -p 6379 cluster nodes
0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380@16380 slave 8f4d528e62fd077c7cc2196a69714485dc3eaeb3 0 1756823172000 1 connected
8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379@16379 myself,master - 0 1756823170000 1 connected 0-5460
927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380@16380 slave f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 0 1756823172983 3 connected
7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379@16379 master - 0 1756823173000 2 connected 5461-10922
f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379@16379 master - 0 1756823171000 3 connected 10923-16383
7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380@16380 slave 7253027625f1cd27301d8f07a39f5b1ac81e6878 0 1756823173991 2 connected

 7. 测试

# 连接集群存储数据
[root@master1 ~]# redis-cli  -p 6379
127.0.0.1:6379> set cluster 3
(error) MOVED 14041 192.168.248.22:6379  #结果报错
###########说明#########
#在集群环境下,由于 redis-cli 每次录入、查询键值时,Redis 都会计算出该 key 对应的插槽值,并交给对应插槽所在的节点进行处理。如果不是该客户端对应服务器的插槽 Redis 会报错,并告知应前往的 Redis 实例地址和端口。
##########说明结束#######加上-c表示启用集群模式
[root@master1 ~]# redis-cli -p 6379 -c
127.0.0.1:6379> set cluster 3
-> Redirected to slot [14041] located at 192.168.248.22:6379
OK192.168.248.22:6379> get cluster
"3"# 查看集群信息
192.168.248.22:6379> cluster nodes
7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380@16380 slave 7253027625f1cd27301d8f07a39f5b1ac81e6878 0 1756823333286 2 connected
927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380@16380 slave f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 0 1756823336304 3 connected
8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379@16379 master - 0 1756823335000 1 connected 0-5460
7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379@16379 master - 0 1756823335298 2 connected 5461-10922
0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380@16380 slave 8f4d528e62fd077c7cc2196a69714485dc3eaeb3 0 1756823334000 1 connected
f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379@16379 myself,master - 0 1756823334000 3 connected 10923-16383

三、故障转移

 1. 模拟master宕机

#模拟master1宕机
[root@master1 ~]# redis-cli -p 6379
127.0.0.1:6379> shutdown[root@master1 ~]# redis-cli  -p 6380
127.0.0.1:6380> CLUSTER nodes
7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380@16380 slave 7253027625f1cd27301d8f07a39f5b1ac81e6878 0 1756823642000 2 connected
7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379@16379 master - 0 1756823644738 2 connected 5461-10922
8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379@16379 master,fail - 1756823612519 1756823608490 1 disconnected
f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379@16379 master - 0 1756823643731 3 connected 10923-16383
927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380@16380 myself,slave f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 0 1756823642000 3 connected
0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380@16380 master - 0 1756823642000 7 connected 0-5460  #可以看到master切换到了192.168.248.21:6380

 2. 再次启动master1,发现master1变成了从

[root@master1 ~]# systemctl start redis
[root@master1 ~]# redis-cli -p 6379
127.0.0.1:6379> CLUSTER NODES
f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379@16379 master - 0 1756824031133 3 connected 10923-16383
927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380@16380 slave f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 0 1756824029000 3 connected
7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379@16379 master - 0 1756824031000 2 connected 5461-10922
0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380@16380 master - 0 1756824028115 7 connected 0-5460
8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379@16379 myself,slave 0602ced305da0a38f6f23ab8df50f64a369224de 0 1756824028000 7 connected
7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380@16380 slave 7253027625f1cd27301d8f07a39f5b1ac81e6878 0 1756824029120 2 connected

四、集群扩容

 1. 向现有集群中添加两个节点,这两个节点做一主一从

  • 主节点的端口号为 6381

  • 从节点的端口号为 6382

[root@master1 ~]# cp /etc/redis/redis.conf /etc/redis/redis-6381.conf
[root@master1 ~]# cp /etc/redis/redis.conf /etc/redis/redis-6382.conf
[root@master1 ~]# sed -i 's/6379/6381/ ' /etc/redis/redis-6381.conf
[root@master1 ~]# sed -i 's/6379/6382/ ' /etc/redis/redis-6382.conf# 启动实例
[root@master1 ~]# redis-server  /etc/redis/redis-6381.conf &
[2] 28795[root@master1 ~]# redis-server  /etc/redis/redis-6382.conf &
[3] 28800[root@master1 ~]# ss -lntup | grep redis
tcp   LISTEN 0      511          0.0.0.0:6379       0.0.0.0:*    users:(("redis-server",pid=28747,fd=6))
tcp   LISTEN 0      511          0.0.0.0:6382       0.0.0.0:*    users:(("redis-server",pid=28800,fd=6))
tcp   LISTEN 0      511          0.0.0.0:6380       0.0.0.0:*    users:(("redis-server",pid=28610,fd=6))
tcp   LISTEN 0      511          0.0.0.0:6381       0.0.0.0:*    users:(("redis-server",pid=28795,fd=6))

 2. 添加主节点

[root@master1 ~]# redis-cli  --cluster add-node  192.168.248.20:6381 192.168.248.20:6379

 3. 添加从节点

# 需要先查看6381节点的ID值
[root@master1 ~]# redis-cli  -p 6381
127.0.0.1:6381> CLUSTER nodes
7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379@16379 master - 0 1756826748000 2 connected 5461-10922
3fb85117061c248a338ac7dfc3b460bc31e1a6d2 192.168.248.20:6381@16381 myself,master - 0 1756826746000 0 connected
927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380@16380 slave,fail - 1756826736987 0 0 disconnected
7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380@16380 slave 7253027625f1cd27301d8f07a39f5b1ac81e6878 0 1756826746000 2 connected
0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380@16380 master - 0 1756826745000 9 connected 0-5460 10923-11022
8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379@16379 slave 0602ced305da0a38f6f23ab8df50f64a369224de 0 1756826747559 9 connected
f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379@16379 master - 0 1756826748567 3 connected 11023-16383# 将192.168.248.20:6382作为拥有此ID的58788a001a65b6838de4f414d9c9a7604fea8fc0的slave身份加入192.168.248.20:6379所在集群
[root@master1 ~]# redis-cli  --cluster add-node  192.168.248.20:6382 192.168.168.20:6379 --cluster-slave --cluster-master-id 3fb85117061c248a338ac7dfc3b460bc31e1a6d2# 分配100个插槽
[root@master1 ~]# redis-cli --cluster reshard  192.168.248.20:6379 --cluster-from  f390cccd86cc2235265c0c252e0d1dbe7d9cbae5  --cluster-to 3fb85117061c248a338ac7dfc3b460bc31e1a6d2  --cluster-slots 100  --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace

 4. 查看插槽分配情况

[root@master1 ~]# redis-cli  -p 6379
127.0.0.1:6379> cluster nodes
f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379@16379 master - 0 1756826878000 3 connected 11123-16383
f79eb26655656b3191950247d9ce8283b586df02 :0@0 slave,fail,noaddr f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 1756824736388 1756824732000 3 disconnected
7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379@16379 master - 0 1756826878686 2 connected 5461-10922
8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379@16379 myself,slave 0602ced305da0a38f6f23ab8df50f64a369224de 0 1756826874000 9 connected
0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380@16380 master - 0 1756826876674 9 connected 0-5460 10923-11022
7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380@16380 slave 7253027625f1cd27301d8f07a39f5b1ac81e6878 0 1756826877679 2 connected
3fb85117061c248a338ac7dfc3b460bc31e1a6d2 192.168.248.20:6381@16381 master - 0 1756826877000 10 connected 11023-11122
927063718ba6abb3c83ef0b911befa9ae6c94212 192.168.248.20:6380@16380 slave,fail f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 1756826621093 1756826616000 3 disconnected
58788a001a65b6838de4f414d9c9a7604fea8fc0 :0@0 slave,fail,noaddr f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 1756826685491 1756826681462 3 disconnected
db877460361b3755502fa8f0cea523b99e9da032 192.168.248.20:6382@16382 slave 3fb85117061c248a338ac7dfc3b460bc31e1a6d2 0 1756826879691 10 connected
58ac035622449df76131952055b58736ded0e642 :0@0 slave,fail,noaddr 0602ced305da0a38f6f23ab8df50f64a369224de 1756826682470 1756826676431 9 disconnected

五、集群缩容

  • 添加节点时:先添加node节点到集群,然后分配槽位

  • 删除节点时:先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。

#查看要被迁移的节点上有多少插槽
[root@master1 ~]# redis-cli --cluster check 192.168.248.20:6379
Could not connect to Redis at 192.168.248.20:6380: Connection refused
192.168.248.22:6379 (f390cccd...) -> 1 keys | 5261 slots | 0 slaves.
192.168.248.21:6379 (72530276...) -> 0 keys | 5462 slots | 1 slaves.
192.168.248.21:6380 (0602ced3...) -> 0 keys | 5561 slots | 1 slaves.
192.168.248.20:6381 (3fb85117...) -> 0 keys | 100 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.>>> Performing Cluster Check (using node 192.168.248.20:6379)
S: 8f4d528e62fd077c7cc2196a69714485dc3eaeb3 192.168.248.20:6379slots: (0 slots) slavereplicates 0602ced305da0a38f6f23ab8df50f64a369224de
M: f390cccd86cc2235265c0c252e0d1dbe7d9cbae5 192.168.248.22:6379slots:[11123-16383] (5261 slots) master
M: 7253027625f1cd27301d8f07a39f5b1ac81e6878 192.168.248.21:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: 0602ced305da0a38f6f23ab8df50f64a369224de 192.168.248.21:6380slots:[0-5460],[10923-11022] (5561 slots) master1 additional replica(s)
S: 7d63ba6faee1a6291bfc7c4f3c976b05f3fbe18a 192.168.248.22:6380slots: (0 slots) slavereplicates 7253027625f1cd27301d8f07a39f5b1ac81e6878
M: 3fb85117061c248a338ac7dfc3b460bc31e1a6d2 192.168.248.20:6381    slots:[11023-11122] (100 slots) master  # 查看到6381上面的插槽编号,计算出数量1 additional replica(s) 
S: db877460361b3755502fa8f0cea523b99e9da032 192.168.248.20:6382slots: (0 slots) slavereplicates 3fb85117061c248a338ac7dfc3b460bc31e1a6d2[root@master1 ~]# redis-cli --cluster reshard  192.168.248.20:6379 --cluster-from 3fb85117061c248a338ac7dfc3b460bc31e1a6d2 --cluster-to 0602ced305da0a38f6f23ab8df50f64a369224de  --cluster-slots 100
Do you want to proceed with the proposed reshard plan (yes/no)? #输入yes
  • 删除从节点
# 先删除从节点,如果先删除主节点,从会故障转移
[root@master1 ~]# redis-cli --cluster del-node 192.168.248.20:6379 db877460361b3755502fa8f0cea523b99e9da032[root@master1 ~]# redis-cli --cluster del-node 192.168.248.20:6379 3fb85117061c248a338ac7dfc3b460bc31e1a6d2

文章转载自:

http://8G0wWP6m.LxjxL.cn
http://T8OB8BoT.LxjxL.cn
http://RujrPtOV.LxjxL.cn
http://g1airLx7.LxjxL.cn
http://lxAVOE9j.LxjxL.cn
http://vY7m321G.LxjxL.cn
http://De3dmuQb.LxjxL.cn
http://dBu6ge9s.LxjxL.cn
http://2TuIOj7A.LxjxL.cn
http://R5OH8Eli.LxjxL.cn
http://Zy5aQLE4.LxjxL.cn
http://ibV4CSBy.LxjxL.cn
http://3KmPH5qG.LxjxL.cn
http://gnJ3SrhH.LxjxL.cn
http://ESHjUYvn.LxjxL.cn
http://WEhYFvML.LxjxL.cn
http://cQK7dPOH.LxjxL.cn
http://jjseddsS.LxjxL.cn
http://qPQ8lkoG.LxjxL.cn
http://mcan4DU9.LxjxL.cn
http://G9WXi4Y9.LxjxL.cn
http://XJLdUwOn.LxjxL.cn
http://OacovKPs.LxjxL.cn
http://N2KJOsvT.LxjxL.cn
http://xOzfrAMM.LxjxL.cn
http://OCe06nLf.LxjxL.cn
http://L4eKbhpN.LxjxL.cn
http://fzCbLZ1K.LxjxL.cn
http://OCrKbDLr.LxjxL.cn
http://2Eg25wMw.LxjxL.cn
http://www.dtcms.com/a/373332.html

相关文章:

  • HCIE安全为什么是T0级别的选项?
  • IDEA开启并配置Services窗口(一个项目开启多个项目运行窗口并且显示端口)
  • Sourcetree使用
  • 【Docker】Docker安装
  • 个人日记系统00
  • 20.42 QLoRA微调实战:四层提示工程让批量数据生成错误率跌破0.5%
  • S32K3平台eMIOS 应用说明
  • iOS 开发入门指南-HelloWorld
  • HCIE数通/云计算真机实验机架展示
  • 【.Net技术栈梳理】04-核心框架与运行时(线程处理)
  • 量化金融|基于算法和模型的预测研究综述
  • HarmonyOS 数据处理性能优化:算法 + 异步 + 分布式实战
  • 1304. 和为零的 N 个不同整数
  • Java 集合Collection—List
  • leetcode9(跳跃游戏)
  • 在UnionTech OS Server 20 (统信UOS服务器版) 上离线安装PostgreSQL (pgsql) 数据库
  • Azure Logic App 与 Azure Function 对比分析
  • 房屋安全鉴定注意事项
  • 【Go】:mac 环境下GoFrame安装开发工具 gf-cli——gf_darwin_arm64
  • 知识竞赛活动舞台道具全面指南
  • Linux《进程信号(下)》
  • 力扣.1054距离相等的条形码力扣767.重构字符串力扣47.全排列II力扣980.不同路径III力扣509.斐波那契数列(记忆化搜索)
  • 区块链:重构企业数字化的信任核心与创新动力
  • 【系统架构设计师(22)】面向服务的软件架构风格
  • Google Play账户与App突遭封禁?紧急应对与快速重构上架策略
  • 操作系统进程/线程的状态与转换
  • 保姆级教程 | travis-Linux版本安装编译
  • 【HarmonyOS 6】Install Failed: error: failed to install bundle.code:9568322
  • STM32精准控制水流
  • Failed to connect to github.com port 443 after 21s