目次
Redis 主从复制
Redis 主从复制简介
Redis 主从复制的作用
Redis 主从复制流程
搭建Redis 主从复制
master节点
slave 节点
验证
哨兵
故障转移机制
摆设哨兵
Redis集群
作用
数据分区
高可用
Redis集群
Redis 高可用实现的方式有恒久化、主从复制、哨兵、集群,与恒久化差别,另外三种方式都是属于集群,之前已经分析相识过两种恒久化模式了,现在相识另外几种方式
Redis 主从复制
Redis 主从复制简介
主从复制是哨兵和集群的基础,他们都是创建在主从复制的基础上实现高可用的。
主从复制将一台Redis 服务器的数据,复制到其他的 Redis 服务器来实现多机备份以及对于读操纵的负载均衡和简单的故障规复
和MySQL主从复制差不多,一台master 多台 slave ,数据是单向的,只能由主节点到从节点
Redis 主从复制的作用
数据冗余:主从复制实现了数据的热备份,是恒久化之外的一种数据冗余方式。
故障规复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障规复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,共同读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
Redis 主从复制流程
1.启动 Slave 历程和发送 sync 下令:
当 Redis 从节点(Slave)启动并连接到主节点(Master)时,它会发送 SYNC 下令来请求数据同步。这是主从复制过程的开始
2.主节点处理同步请求:
主节点吸收到 SYNC 请求后,会启动一个背景历程来实行数据快照操纵。这一步称为RDB 快照,它会将当前的内存数据保存到磁盘上的 RDB 文件中。在举行 RDB 快照的同时,主节点还会记录所有写操纵到 AOF 文件(Append-Only File),如果启用了 AOF 恒久化策略的话。
3.发送数据文件到从节点:
主节点完成数据快照后,会将 RDB 文件发送给从节点。吸收数据文件的从节点会先将数据写入磁盘,然后再加载到内存中。同时,主节点会将之后的所有写操纵通过增量同步(增量日记)的方式发送给从节点,这些操纵会被应用到从节点上,以保持主从节点的数据一致性。
4.处理多个从节点的同步请求:
如果主节点同时吸收到多个从节点的同步请求,它会启动一个背景历程来处理数据快照,并将 RDB 文件发送给所有的从节点。为了保证所有的从节点在同步时的一致性,主节点会在背景同时处理所有从节点的请求。
5.从节点故障规复:
如果从节点出现故障并重新启动,它会重新连接主节点,并发起一个新的同步请求。主节点会按照上述流程重新向从节点发送数据快照和后续的增量操纵。在发送过程中,主节点会将所有后续的写操纵通过增量同步的方式分发给所有的从节点,以保证数据的一致性。
搭建Redis 主从复制
至少三台机器,一台master,两台slave
安装步骤省略,三台机器都默认安装 Redis
master节点
编辑Redis配置文件
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护历程
logfile /var/log/redis_6379.log #172行,指定日记文件目次
dir /var/lib/redis/6379 #264行,指定工作目次
appendonly yes #700行,开启AOF恒久化功能
重启 Redis
/etc/init.d/redis_6379 restart
slave 节点
同样编辑Redis配置文件,两台slave 节点一样
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护历程
logfile /var/log/redis_6379.log #172行,指定日记文件目次
dir /var/lib/redis/6379 #264行,指定工作目次
replicaof 172.16.233.101 6379 #288行,指定要同步的Master节点IP和端口
appendonly yes #700行,开启AOF恒久化功能
重启Redis
/etc/init.d/redis_6379 restart
验证
在Master节点上看日记:
tail -f /var/log/redis_6379.log
同步成功
哨兵
哨兵用于监控Redis主从复制集群中的主节点和从节点,并在主节点发生故障时举行故障转移,将一个从节点提升为新的主节点,即主从切换,主从切换就是,当服务器宕机后,将一台从机切换为主机,一般情况这需要人工干预,不光费时费力而且还会造成一段时间内服务不可用。以是,为相识决主从复制的缺点,就有了哨兵机制,哨兵机制自动举行主从切换 。哨兵模式通过多个哨兵实例协同工作,确保Redis集群的高可用性和数据一致性。
以是,哨兵的核心功能就是在主从复制的基础上,设置了监控机制,引入了主节点的自动故障转移,并会转发关照
故障转移机制
那么哨兵是如何发现故障的呢?
哨兵体系由多个哨兵节点构成,主节点和从节点都称为数据节点,由哨兵节点定期向主节点以及其他哨兵节点发送心跳报文,如果主节点在肯定时间内未回复,大概回复了错误内容,那么这个哨兵节点就会主观认为主节点宕机了,如果超过半数的哨兵主观的认为主节点宕机了,那么这个主节点就被确定为客观宕机了
当确定主节点宕机后,哨兵节点会通过选举机制,选举出一个哨兵节点作为leader,来负责处理主节点的故障转移关照,因此,哨兵的集群中至少得有三个哨兵节点
其中leader哨兵节点实行故障转移的过程分为几步
首先将一个从节点升级为新的主节点,让其他从节点指向新的主节点
如果原来的主节点规复了,它依然不会再次变成主节点,而是指向新的主节点
最后关照客户端主节点更换
然后是选举机制,首先没故意跳的哨兵会过滤掉,然后根据配置文件中优先级的高低,选举出leader,大概根据复制偏移量的大小来选举
摆设哨兵
所有哨兵节点都需举行操纵
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no #17行,关闭掩护模式
port 26379 #21行,Redis哨兵默认的监听端口
daemonize yes #26行,指定sentinel为背景启动
logfile "/var/log/sentinel.log" #36行,指定日记存放路径
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
sentinel monitor mymaster 172.16.233.101 2 #84行,该哨兵节点指定监控这个节点2是至少
需要2个哨兵节点同意才能举行故障转移
sentinel down-after-milliseconds mymaster 30000 #113行,判断服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为180000(180秒)
启动哨兵模式
先启动master ,在启动slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
查看哨兵信息
redis-cli -p 26379 info Sentinel
Redis集群
集群都是大同小异的,由多个节点构成,差别的是Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只举行主节点数据和状态信息的复制。
作用
数据分区
这是 Redis 集群最核心的功能。通过将数据分散存储到多个节点上,办理了 Redis 单机内存的限定问题,从而大大增加了存储容量。这种分区使得 Redis 集群不光能够扩展数据存储量,还能提高体系的性能和响应本领。因为每个主节点可以独立处理读写请求,整体集群的处理本领成倍提升。
高可用
Redis 集群通过主从复制机制以及自动故障转移功能,实现高可用性。当集群中恣意节点发生故障时,其他节点可以接管工作,保证集群的连续运行。这个机制雷同于 Redis 哨兵(Sentinel),能够自动检测并处理主节点的故障,使得体系对外服务不会中断。
Redis集群
和其他集群差别的是,Redis 集群定义了哈希槽。哈希槽是 Redis 集群用来实现数据分片的基本单位,Redis 集群统共定义了 16384 个哈希槽(0-16383),每个节点负责一部分哈希槽,也就是说,每个节点上会存储若干个哈希槽中的键值数据。根据盘算得出哈希编号,那个key属于哪个哈希槽,通过这个值,会根据哈希槽和节点的对应关系,直接找到负责该哈希槽的节点
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点构成,在节点B失败后,集群选举B1位为的主节点继承服务。当B和B1都失败后,集群将不可用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |