Redis 分片集群搭建

主从集群的缺点

  • 所有的写操作都是在 Master 上完成,然后同步到 Slaver 上,所以一定会有一些延迟,当系统很繁忙或网络不通畅的时候,延迟问题会更加严重,Slaver 机器数量的增加也会加重这个问题
  • 海量数据存储时主从集群无法分片储存数据,单机数据量过大会导致内存不足
  • 高并发写的情况中单个 Master 可能无法承受导致宕机

分片集群介绍

  • redis3.0 后采用了无中心化集群配置
  • 分片集群是结合主从集群使用的,每个分片都是一个主从集群
  • 各个 Master 之间通过 ping 监测彼此的健康状态

分片集群环境搭建

  1. 删除 /myredis 中所有的 rdb 文件
  2. 修改 redis.conf 文件中的 bind 为本机真实 ip 地址
  3. 修改 redis6379.conf 文件
include /myredis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
  1. 按照上面的格式创建出 redis6380.conf 、redis6381.conf 、redis6389.conf 、redis6390.conf 、redis6391.conf

  2. 根据上面的六个配置文件启动六个 redis 服务

  3. 执行 redis-cli --cluster create --cluster-replicas 1 192.168.255.128:6379 192.168.255.128:6380 192.168.255.128:6381 192.168.255.128:6389 192.168.255.128:6390 192.168.255.128:6391 命令构建集群(–cluster-replicas 1 表示使用 1 模式,即最简单的模式构建集群,一台主机、一台从机,正好三组)

  4. 连接到集群中任意一个 redis-server :redis-cli -c -h 192.168.255.128 -p 6379 ( -c 表示进入集群节点,而不是单独的 redis-server )

  5. 执行 cluster nodes 命令查看节点间的关系,能查看到即代表集群环境搭建成功

集群节点分配原则

  • 一个集群至少要有三个主节点
  • –cluster-replicas 表示我们希望为集群中的每个主节点分配一个从节点
  • 分配原则上尽量保证每个主节点分别运行在不同的 ip 地址上,每组从节点和主节点也运行在不同的 ip 地址上

什么是 slots

  • 集群构建完毕后,提示信息中有这样一行:[OK] All 16384 slots covered
  • slots 表示插槽,一个 redis 集群中包含 0-16383 共 16384 个插槽,每个主节点都会分配到一个插槽范围。当我们向集群中插入 key-value 时,会自动根据 key 计算出一个值,结合主节点的插槽范围确定该 key-value 应该插入到哪个主节点中。这样就完成了负载均衡

向集群中插入和获取数据

  • 每次向任意节点插入、查询 key-value 时,redis 都会根据 key 计算出该命令应该送往的插槽,如果不在当前连接的 redis-server 插槽范围中,redis 会给出提示,并自动连接到对应的节点执行命令
  • 一次插入多个 key-value 时,直接插入是不行的,因为多个 key 计算出的插槽大概率不会在一个插槽范围内,如下
192.168.255.128:6381> mset name lucy age 19 address beijing
(error) CROSSSLOT Keys in request don't hash to the same slot
  • 所以在插入多个 key-value 时需要借助组的概念
192.168.255.128:6381> mset name{user} lucy age{user} 19 address{user} beijing
-> Redirected to slot [5474] located at 192.168.255.128:6380
OK
192.168.255.128:6380>
192.168.255.128:6380> get name{user}
"lucy"	

故障恢复特点

  • 如果主节点挂掉,从节点会自动升为主节点
  • 主节点恢复后,成为从节点
  • 如果某一组分片都挂掉,而 cluster-require-full-coverage 为 yes ,那么整个集群都会挂掉
  • 如果某一组分片都挂掉,而 cluster-require-full-coverage 为 no ,那么集群中其他节点会正常工作,但归属于挂掉的主节点的插槽完全无法读写

RedisTemplate 的分片集群模式

spring:
  redis:
  	cluster:
  	  nodes: # 这里就直接配置节点 IP 和端口即可
  	  	- 192.168.255.128:6379
  	  	- 192.168.255.128:6380
  	  	- 192.168.255.128:6381
  	  	- 192.168.255.128:6389
  	  	- 192.168.255.128:6390
  	  	- 192.168.255.128:6391
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值