Redis学习--------分片集群、散列插槽、集群伸缩、故障转移

1. 分片集群搭建

	ip						port     	role
192.168.127.101				8001		master
192.168.127.101				8002		master
192.168.127.101				8003		master
192.168.127.101				9001		slave
192.168.127.101				9002		slave
192.168.127.101				9003		slave

配置文件Redis.conf

port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /tmp/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /tmp/6379
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 192.168.150.101
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /tmp/6379/run.log

操作指令

mkdir 8001 8002 8003 9001 9002 9003
cp redis.conf 8001/
cp redis.conf 8002/
cp redis.conf 8003/
cp redis.conf 9001/
cp redis.conf 9002/
cp redis.conf 9003/
#修改配置文件中的端口号

#启动
redis-server ./8001/redis.conf
redis-server ./8002/redis.conf
redis-server ./8003/redis.conf
redis-server ./9001/redis.conf
redis-server ./9002/redis.conf
redis-server ./9003/redis.conf\

#构建redis 集群
redis-cli --cluster create --cluster-replicas 1 192.168.127.101:8001 192.168.127.101:8002 192.168.127.101:8003 192.168.127.101:9001 192.168.127.101:9002 192.168.127.101:9003
  • redis-cli --cluster或者./redis-trib.rb:代表集群操作命令
  • create:代表是创建集群
  • –replicas 1或者–cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master

在这里插入图片描述测试:
在这里插入图片描述注意:集群操作时,需要给redis-cli加上-c参数才可以:
在这里插入图片描述

2. 散列插槽

在构建redis集群时,会生成16384(0-16383)个插槽(slot),这些插槽会被分成几部分存储在每个master节点上,每个master之间存储的slot块是不重复的。
在这里插入图片描述
当我们在集群中进行存取数据时,首先根据key中是否包含{ },如果包含{ },会把{}内的内容进行某种hash运算得到一个数值,然后在和16384进行取余,就会得到这个key所在的slot块。如果key中不包含{ },就会把整个key的值进行某种hash运算得到一个数值,然后进行和16384进行取余,得到所对应的slot块。

set a 100 

get a

set num 200

get num

set {a}bc 100

get {a}bc

set {num}a 300

get {num}a

如果slot不在本台机器,redis会自动路由到对应slot块的机器上
在这里插入图片描述

3. 集群伸缩

由于分片集群中数据是和slot块进行绑定的,而不是和机器强相关的。我们只需操作slot块,就可以实现redis集群的伸缩。

# 查看集群命令
redis-cli --cluster help   
Cluster Manager Commands:
# 构建集群 cluster-replicas集群中每个主节点下的从节点个数
  create         host1:port1 ... hostN:portN
                 --cluster-replicas <arg>
  check          host:port
                 --cluster-search-multiple-owners
  info           host:port
  fix            host:port
                 --cluster-search-multiple-owners
                 --cluster-fix-with-unreachable-masters
# 移动slot块,host:port接收slot块的机器,--cluster-from + 节点id --cluster-to + 节点id   --cluster-slots + 移动slot的个数
  reshard        host:port
                 --cluster-from <arg>
                 --cluster-to <arg>
                 --cluster-slots <arg>
                 --cluster-yes
                 --cluster-timeout <arg>
                 --cluster-pipeline <arg>
                 --cluster-replace
  rebalance      host:port
                 --cluster-weight <node1=w1...nodeN=wN>
                 --cluster-use-empty-masters
                 --cluster-timeout <arg>
                 --cluster-simulate
                 --cluster-pipeline <arg>
                 --cluster-threshold <arg>
                 --cluster-replace
  # 向集群内新增节点,默认为master节点,可以设置--cluster-slave和--cluster-master-id + master节点id 设置为某个master的从节点
  add-node       new_host:new_port existing_host:existing_port
                 --cluster-slave
                 --cluster-master-id <arg>
 # 删除集群中的节点
  del-node       host:port node_id
  call           host:port command arg arg .. arg
                 --cluster-only-masters
                 --cluster-only-replicas
  set-timeout    host:port milliseconds
  import         host:port
                 --cluster-from <arg>
                 --cluster-from-user <arg>
                 --cluster-from-pass <arg>
                 --cluster-from-askpass
                 --cluster-copy
                 --cluster-replace
  backup         host:port backup_directory

练习:向搭建的集群中新增一个master节点(192.168.127.101:8004),并且把0-3000的slot块分给这个master节点

mkdir 8004 
cp redis.conf 8004/
vi 8004/redis.conf
#启动节点
redis-server 8004/redis.conf

#添加节点到集群中
redis-cli --cluster add-node 192.168.127.101:8004 192.168.127.101:8001
#查看集群节点信息
redis-cli -p 8001 cluster nodes
#节点信息
#408ea1f10e9ebf9f3a73476b2665d10f3a5b9f63 192.168.127.101:9001@19001 slave 6e87ff294285323ddd93e2efbca612293b784f52 0 1653238473477 3 connected
#d1ddf38af632537f6d39fce455bbd593d13c12ad 192.168.127.101:8004@18004 master - 0 1653238473073 7 connected 
#c3d36ae04031340b86c767998632d0fdecfc19c8 192.168.127.101:9002@19002 slave 8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d 0 1653238473980 1 connected
#abe75cb0770fca55dfc2fd5a308f9636f62ba907 192.168.127.101:8002@18002 master - 0 1653238473000 2 connected 5461-10922
#d70d692a366a93f501ff991442866529d87f380e 192.168.127.101:9003@19003 slave abe75cb0770fca55dfc2fd5a308f9636f62ba907 0 1653238473000 2 connected
#8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d 192.168.127.101:8001@18001 myself,master - 0 1653238473000 1 connected 0-5460
#6e87ff294285323ddd93e2efbca612293b784f52 192.168.127.101:8003@18003 master - 0 1653238474484 3 connected 10923-16383

#分配0-3000 slot块
redis-cli --cluster reshard 192.168.127.101:8004 --cluster-from 8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d --cluster-to d1ddf38af632537f6d39fce455bbd593d13c12ad --cluster-slots 3000 --cluster-yes


#查看集群节点信息
redis-cli -p 8001 cluster nodes

#408ea1f10e9ebf9f3a73476b2665d10f3a5b9f63 192.168.127.101:9001@19001 slave 6e87ff294285323ddd93e2efbca612293b784f52 0 1653238578316 3 connected
#d1ddf38af632537f6d39fce455bbd593d13c12ad 192.168.127.101:8004@18004 master - 0 1653238580333 7 connected 0-2999
#c3d36ae04031340b86c767998632d0fdecfc19c8 192.168.127.101:9002@19002 slave 8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d 0 1653238579324 1 connected
#abe75cb0770fca55dfc2fd5a308f9636f62ba907 192.168.127.101:8002@18002 master - 0 1653238579828 2 connected 5461-10922
#d70d692a366a93f501ff991442866529d87f380e 192.168.127.101:9003@19003 slave abe75cb0770fca55dfc2fd5a308f9636f62ba907 0 1653238580000 2 connected
#8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d 192.168.127.101:8001@18001 myself,master - 0 1653238580000 1 connected 3000-5460
#6e87ff294285323ddd93e2efbca612293b784f52 192.168.127.101:8003@18003 master - 0 1653238579000 3 connected 10923-16383


测试节点:
在这里插入图片描述

练习:把新添加的master节点删除掉

# 1. 首先把待删除节点上的slot块进行移除
redis-cli --cluster reshard 192.168.127.101:8001 --cluster-from d1ddf38af632537f6d39fce455bbd593d13c12ad  --cluster-to 8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d  --cluster-slots 3000 --cluster-yes

#查看节点信息
redis-cli -p 8001 cluster nodes

#408ea1f10e9ebf9f3a73476b2665d10f3a5b9f63 192.168.127.101:9001@19001 slave 6e87ff294285323ddd93e2efbca612293b784f52 0 1653238921020 3 connected
#d1ddf38af632537f6d39fce455bbd593d13c12ad 192.168.127.101:8004@18004 master - 0 1653238920013 7 connected
#c3d36ae04031340b86c767998632d0fdecfc19c8 192.168.127.101:9002@19002 slave 8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d 0 1653238919509 8 connected
#abe75cb0770fca55dfc2fd5a308f9636f62ba907 192.168.127.101:8002@18002 master - 0 1653238920000 2 connected 5461-10922
#d70d692a366a93f501ff991442866529d87f380e 192.168.127.101:9003@19003 slave abe75cb0770fca55dfc2fd5a308f9636f62ba907 0 1653238920517 2 connected
#8bb4c6f2de60d75837a0763aa6b3f6ee33ea349d 192.168.127.101:8001@18001 myself,master - 0 1653238918000 8 connected 0-5460
#6e87ff294285323ddd93e2efbca612293b784f52 192.168.127.101:8003@18003 master - 0 1653238920517 3 connected 10923-16383

#删除节点
redis-cli --cluster del-node 192.168.127.101:8004 d1ddf38af632537f6d39fce455bbd593d13c12ad

测试:
在这里插入图片描述

4. 故障转移

#在slave节点上执行此命令。会把slave变为 master节点
 CLUSTER FAILOVER [FORCE|TAKEOVER]
     Promote current replica node to being a master

参数说明:

  1. 缺省。默认会按照下图的顺序进行执行
  2. FORCE。会省去和master节点offset比对和同步的过程
  3. TAKEOVER。直接接管,直接成为master,向集群进行广播。
    执行流程:
    在这里插入图片描述
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值