目录
一、Redis主从复制
二、Reids哨兵模式
三、Redis集群
(一)概念
是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点
(二)作用
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
(三)缺点
故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
(四)优点
主从复制,主机会自动将数据同步到从机,实现了读写分离
从服务器提供只读操作,主服务器提供读读写操作
从服务器同样可以接受其他从服务器的连接和同步请求,这样可以有效的分载主服务器的同步压力
主服务器是以非阻塞的方式为从服务器提供服务,所以在主从同步期间,客户端依然可以提交查询或修改请求
从服务器也是以非阻塞的方式完成数据同步的,在同步期间,如果有客户端提供查询请求,Redis则返回同步之前的数据
(五)搭建并验证
修改主服务器配置文件
修改从服务器配置文件
启动主与从服务
验证:
这样主从复制就配置好了
(一)概念
是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。依托于主从模式
(二)作用
监控:哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
通知(提醒):哨兵可以将故障转移的结果发送给客户端。
(三)缺点
写操作无法负载均衡
存储能力受到单机的限制
哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
(四)优点
(五)搭建
复制哨兵文件 分别监听主从 (一主二从即可)
修改文件
6379
6380
6381
启动服务
redis-sentinel 配置文件路径
(六) 验证
查看哨兵日志
cat /var/log/redis/sentinel.log
停止master后,slave会通过选举产生新的master
查看是否生成新的主服务器 cat /var/log/redis/sentinel.log
主服务器从端口6379变为6380
如果此时将原来的master6379上线,6381还会是master吗?
答案是不会
哨兵配置文件会自动修改监听的master节点地址为新的master节点地址
(一)概念
Redis3.0版本以上开始支持cluster,采用的是hashslot(hash槽),可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散到群集的多台机器上。
(二)原理
Redis Cluster是一个无中心的结构,每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。
(三)架构细节
1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、节点的失效(fail)在群集中超过半数的主(master)节点检测失效时才生效。
3、客户端与 redis 节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。
4、redis-cluster 把所有的物理节点映射到【0-16383】slot 上,cluster 负责维护 node<->slot<->key。
(四)选举过程
选举过程是群集中所有master参与,如果半数以上master节点与当前 master 节点通信超时(cluster—node—timeout),认为当前 master 节点挂掉。以下两种情况为整个群集不可用(cluster_state:fail),当群集不可用时,所有对群集的操作都不可用,收到((error)CLUSTEFDOWN The cluster is down)错误。
如果群集任意 master挂掉,且当前 master 没有 slave,则群集进入 fail状态,也可以理解成群集的slot映射【0 ~16383】不完整时进入fail状态。
如果群集中超过半数的master挂掉,无论是否有slave,群集都进入 fail状态。
默认情况下,每个群集的节点都使用两个TCP端口.一个是6379,一个是16379;6379服务于客户端的连接,16379 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个端口。
(五)搭建分布式集群
三台虚拟机(192.168.115.3;192.168.115.4;192.168.115.5)都yum安装Redis
开始配置
修改配置文件redis1_6379.conf与redis2_6380.conf
redis1_6379.conf
创建目录
第二台
修改配置文件redis3_6379.conf与redis4_6380.conf
redis3_6379.conf
redis4_6380.conf
创建目录
启动服务
第三台
修改配置文件redis5_6379.conf与redis6_6380.conf
redis5_6379.conf
redis6_6380.conf
创建目录
启动服务
构建集群
搭建好服务选择一台机子做集群将其他节点加入集群
这里选择第一台
分配slot
建立主从关系
验证是否成功