看完!还不懂Redis的高可用实现方案来打我。

如果只有一台redis的话,这台redis挂掉了怎么办,难道只能等待他修好吗?这样会对用户的访问造成很大的印象,所以redis的高可用也很关键。下面就是redis高可用的两种实现方案

Redis的哨兵机制

1.什么是哨兵

Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是 Redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作。

2.哨兵机制详解
2.1 哨兵监控

当我们启动哨兵之后,哨兵会检测我们的所有redis节点,我们的哨兵也不只是一个,可以是多个做成一个哨兵集群,同时检测redis集群。
在这里插入图片描述

2.2 故障转移触发条件

当我们的master因为一些原因掉线之后,哨兵检测到就会开始故障转移工作,但不是有一个哨兵检测到master宕机就可以进行故障转移,如果只有一个哨兵检测到master宕机被称为主观下线,并不会达成故障转移的条件,多个哨兵都检测到master异常被称为客观下线。只有是客观下线状态才会触发故障转移,多少个哨兵检测到Mastr异常才算作客观下线在配置文件中可以配置,配置项名称叫做quorun
在这里插入图片描述

2.3 选举leader

当满足客观下线状态后就开始了故障转移工作,故障转移工作是由哨兵来操作的,这个时候哨兵们会进行一个选举,票数最多的人会来执行故障转移工作,这个哨兵会在其他从节点中选择一个作为master,再由这个master去同步数据到从节点,同时同步从节点个数可以配置,配置项为:sentinel parallel-syncs mymaster 1,该配置项是几,就会有几个从节点一起同步。当同步完成后,哨兵就会继续监控这个redis集群.
在这里插入图片描述

2.4 原master恢复

当原master从故障中恢复之后,会再次加入整个redis集群中,但是这个时候原master只能当做从节点了,如果新master故障之后,原master会和其他的master在一起竞争。
在这里插入图片描述

3.redis哨兵方式的配置

在redis的安装目录下有一个叫sentinel.conf的配置文件,哨兵方式的配置都在这个下面
在这里插入图片描述
修改配置文件:
1.protected-mode是否开启公网保护

yes 开启保护,只有配置的ip可以访问
no 不开启,所以ip都可以访问

在这里插入图片描述
2.port 哨兵的端口号
在这里插入图片描述
3.daemonize 是否后台启动

yes 开启
no 不开启

在这里插入图片描述
4.pidfile 进程的pid
在这里插入图片描述
5.logfile 哨兵日志存储位置
在这里插入图片描述
6.dir 工作目录
在这里插入图片描述
7.sentinel monitor :哨兵核心配置

# ‘mymaster’ 哨兵名称
# ‘127.0.0.1’ 监控的redis master ip
#   ‘6379’redis的端口
# ‘2’表示几台哨兵监听不到msater,才标记master为宕机状态
sentinel monitor mymaster 127.0.0.1 6379 2

在这里插入图片描述
8.sentinel auth-pass redis的密码
在这里插入图片描述
9.sentinel down-after-milliseconds 设定宕机多少毫秒后失效
在这里插入图片描述
启动哨兵:redis-sentinel sentinel.conf
在这里插入图片描述
启动后如果在ps-ef |grep redis 中存在哨兵进程,则为启动成功

4.哨兵信息检查
# 查看哨兵下的master节点信息 sentinel master mymaster 
# 查看哨兵下的slaves节点信息 sentinel slaves mymaster 
# 查看哨兵下的哨兵节点信息 sentinel sentinels mymaster

Redis的集群

1.什么是Redis集群

主从复制以及哨兵,他们可以提高读的并发,但是单个master容量有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave成为集群。
redis-cluster:他可以支撑多个master-slave,支持海量数据,实现高可用与高并发。

2.Redis集群配置

1.修改redis配置文件,所有的配置项都在REDIS CLUSTER这个下面
在这里插入图片描述

# 开启集群模式 
cluster-enabled yes 
# 每一个节点需要有一个配置文件,每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行 
cluster-config-file nodes-201.conf 
# 超时时间,超时则认为master宕机,随后主备切换 
cluster-node-timeout 5000 
# 开启AOF 
appendonly yes

2.启动redis
3.创建集群

##### # 注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意 
# 注意2:以下为新版的redis构建方式 ##### 
# 创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4,2和5,3和6分别对应为主从关系,这也是最经典用的最多的集群模式 
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1

4.检查集群信息
redis-cli --cluster check 192.168.25.64:6380

3.slot槽节点

在redis集群中数据都是存放的槽节点中,槽节点是所有redis主节点平均分配,每个数据进来之后会经过hash算法之后存放到不同的槽中,而不同的槽又在不同的redis主节点上,所以数据就会存放到不同的redis节点中,比如集群中有三个redis节点,三个节点会均分所有的槽节点,当一个key进来以后,通过hash假如分配到了5000这个槽中,5000这个槽假假如在A节点中,那么这个数据就会存放到A节点上

总结

哨兵模式:其实也是一种集群,他能够提高读请求的并发,但是容错方面可能会有一些问题,比如master同步数据给slave的时候,这其实是异步复制吧,这个时候master挂了,那么slave上的数据就没有master新,数据同步需要时间的,1-2秒的数据会丢失。master恢复并转换成slave后,新数据则丢失。
集群模式:

  • 每个节点知道彼此之间的关系,也会知道自己的角色,当然他们也会知道自己存在与一个集群环境中,他们彼此之间可以交互和通信,比如ping pong。那么这些关系都会保存到某个配置文件中,每个节点都有,这个我们在搭建的时候会做配置的。
  • 客户端要和集群建立连接的话,只需要和其中一个建立关系就行。
  • 某个节点挂了,也是通过超过半数的节点来进行的检测,客观下线后主从切换,和我们之前在哨兵模式中提到的是一个道理。
  • Redis中存在很多的插槽,又可以称之为槽节点,用于存储数据。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章