-
第十七章 【高级篇】Redis6.X高可用之Cluster集群和分片
第1集 Redis6.X节点高可用之Cluster集群介绍
简介: Redis6.X节点高可用之Cluster集群介绍
-
背景
- Sentinel解决了主从架构故障自动迁移的问题
- 但是Master主节点的写能力和存储能力依旧受限
- 使用Redis的集群cluster就是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器
-
什么是集群Cluster
- 是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理
- 容易和分布式弄混,分布式系统简单的可以认为就一个庞大的系统,进行拆分度多个小系统
-
例子:小滴课堂-老王,去银行存钱
-
Anna小姐姐是窗口一的工作人员,包括取号、开户、存钱、挂失、对公业务等等
-
问题一
- Anna小姐姐事情很多导致效率低,就找几个人,每个人负责不同的事情,客户根据需求进行选择,这个就是分布式。
-
问题二
- 老帆是负责存钱的,只有一个窗口导致排长队,集群的话就可以搞多个窗口,同时对外提供服务
-
-
Redis集群模式介绍
- Cluster模式是Redis3.0开始推出
- 采用无中心结构,每个节点保存数据和整个集群状态, 每个节点都和其他所有节点连接
- 官方要求:至少6个节点才可以保证高可用,即3主3从;扩展性强、更好做到高可用
- 各个节点会互相通信,采用gossip协议交换节点元数据信息
- 数据分散存储到各个节点上
第2集 Redis6.X节点高可用之Cluster数据分片和虚拟哈希槽介绍
简介: Redis6.X节点高可用之Cluster数据分片和虚拟哈希槽介绍
-
背景
- 主节点的写能力和存储能力受限
- 单台机器无法满足需求,因此把数据分散存储到多个机器
- 类似案例:mysql分库分表
-
常见的数据分区算法
-
哈希取模
- 对选择的 partitioning key 计算其哈希值,得到的哈希值就是对应的分区
-
范围分片
- 通过确定分区键是否在某个范围内来选择分区
-
一致性Hash分区
-
redis cluster集群没有采用一致性哈希方案,而是采用【数据分片】中的哈希槽来进行数据存储与读取的
-
-
什么是Redis的哈希槽 slot
-
Redis集群预分好16384个槽,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中
-
-
大体流程
-
假设主节点的数量为3,将16384个槽位按照【用户自己的规则】去分配这3个节点,每个节点复制一部分槽位
- 节点1的槽位区间范围为0-5460
- 节点2的槽位区间范围为5461-10922
- 节点3的槽位区间范围为10923-16383
- 注意:从节点是没有槽位的,只有主节点才有
-
存储查找
- 对要存储查找的键进行crc16哈希运算,得到一个值,并取模16384,判断这个值在哪个节点的范围区间
- 假设crc16("test_key")%16384=3000,就是节点一
- crc16算法不是简单的hash算法,是一种校验算法
-
-
使用哈希槽的好处就在于可以方便的添加或移除节点。
- 当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;
- 当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了
第3集 Redis6.X节点高可用之Cluster集群环境准备
简介: Redis6.X节点高可用之Cluster集群环境准备
-
说明
- 旧版本的需要使用ruby语言进行构建,新版5之后直接用redis-cli即可
- 6个节点,三主双从,主从节点会自动分配,不是人工指定
- 主节点故障后,从节点会替换主节点
-
注意点:
- 把之前的rdb、aof文件删除
-
节点(网络安全组开放端口)
- 6381、6382
- 6383、6384
- 6385、6386
- 配置
bind 0.0.0.0
port 6381
daemonize yes
requirepass "123456"
logfile "/usr/local/redis/log/redis1.log"
dbfilename "xdclass1.rdb"
dir "/usr/local/redis/data"
appendonly yes
appendfilename "appendonly1.aof"
masterauth "123456"
#是否开启集群
cluster-enabled yes
# 生成的node文件,记录集群节点信息,默认为nodes.conf,防止冲突,改为nodes-6381.conf
cluster-config-file nodes-6381.conf
#节点连接超时时间
cluster-node-timeout 20000
#集群节点的ip,当前节点的ip
cluster-announce-ip 172.18.172.109
#集群节点映射端口
cluster-announce-port 6381
#集群节点总线端口,节点之间互相通信,常规端口+1万
cluster-announce-bus-port 16381
bind 0.0.0.0
port 6386
daemonize yes
requirepass "123456"
logfile "/usr/local/redis/log/redis6.log"
dbfilename "xdclass6.rdb"
dir "/usr/local/redis/data"
appendonly yes
appendfilename "appendonly6.aof"
masterauth "123456"
cluster-enabled yes
cluster-config-file nodes-6386.conf
cluster-node-timeout 20000
cluster-announce-ip 172.18.172.109
cluster-announce-port 6386
cluster-announce-bus-port 16386
第4集 Redis6.X节点高可用之Cluster集群三主三从搭建实战
简介: Redis6.X节点高可用之Cluster集群三主三从搭建实战
- 启动6个节点
./redis-server ../conf/cluster/redis1.conf
./redis-server ../conf/cluster/redis2.conf
./redis-server ../conf/cluster/redis3.conf
./redis-server ../conf/cluster/redis4.conf
./redis-server ../conf/cluster/redis5.conf
./redis-server ../conf/cluster/redis6.conf
-
加入集群(其中一个节点执行即可)
- --cluster 构建集群全部节点信息
- --cluster-replicas 1 主从节点的比例,1表示1主1从的方式
./redis-cli -a 123456 --cluster create 172.18.172.109:6381 172.18.172.109:6382 172.18.172.109:6383 172.18.172.109:6384 172.18.172.109:6385 172.18.172.109:6386 --cluster-replicas 1
- 检查状态信息(其中一个节点执行即可)
./redis-cli -a 123456 --cluster check 172.18.172.109:6381
第5集 Redis6.X节点高可用之Cluster集群读写命令实战
简介: Redis6.X节点高可用之Cluster集群读写命令
- 集群状态
./redis-cli -c -a 123456 -p 6379
#集群信息
cluster info
#节点信息
cluster nodes
-
测试集群读写命令set/get
- key哈希运算计算槽位置
- 槽在当前节点的话直接插入/读取,否则自动转向到对应的节点
-
操作都是主节点操作,从节点只是备份
-
流程解析
-
启动应用
-
加入集群
-
从节点请求复制主节点(主从复制一样)
- 先全量
- 再增量
-
第6集 Redis6.X节点高可用之Cluster集群整合SpringBoot2.X
简介: Redis6.X节点高可用之Cluster集群整合SpringBoot2.X
-
不在同个网络,所以集群改为阿里云公网ip地址才可以访问
- 公司开发部署都会用同个网络
- 配置文件修改
#对外的ip
cluster-announce-ip 8.129.113.233
#对外端口
cluster-announce-port
#集群桥接端口
cluster-announce-bus-por
-
动态修改配置
- config set cluster-announce-ip 8.129.113.233
-
连接池添加 (之前添加)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
- 配置文件(注释Sentinel相关配置)
cluster:
#命名的最多转发次数
max-redirects: 3
nodes: 8.129.113.233:6381,8.129.113.233:6382,8.129.113.233:6383,8.129.113.233:6384,8.129.113.233:6385,8.129.113.233:6386
第7集 Redis6.X高可用之Cluster集群故障自动转移实战和总结
简介: Redis6.X节点高可用之Cluster集群故障自动转移实战
- 集群里面有故障怎么办, 我们就来操作一遍
-
流程
- kill掉主节点
- 从节点成为新的master节点
-
命令
./redis-cli -c -a 123456 -p 6381
#集群信息
cluster info
#节点信息
cluster nodes
来源:https://www.cnblogs.com/Xd17324217006/p/15396638.html
-
高可用架构总结
- 主从模式:读写分离,备份,一个Master可以有多个Slaves
- 哨兵sentinel:监控,自动转移,哨兵发现主服务器挂了后,就会从slave中重新选举一个主服务器
- 集群: 为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,提高并发量。
- 来源:https://www.cnblogs.com/Xd17324217006/p/15396638.html