Redis基础学习(2)

Redis高可用的方案持久化、主从复制(及读写分离)、哨兵和集群。

 

主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点,后者称为从节点;数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

 主从复制的作用是:读写分离,可以由主节点提供写服务,由从节点提供读服务这样来扩展主节点的读能⼒,分担主节点读压⼒ 、容灾恢复,⼀旦主节点宕机,从节点作为主节点的备份可以随时顶上来、主从复制还是哨兵和集群能够实施的基础

 主从复制同步数据的方式:

主从刚连接的时候,进⾏全量同步、全同步结束后,进⾏增量同步

全量复制:

用于初次复制或其他无法进行部分复制的情况,将主节点中的所有数据都发送给从节点主服务器收到全量复制的命令后执行bgsave开启⼀个后台进程⽤于将redis中的

数据⽣成⼀个rdb⽂件 ,主服务器会缓存所有接收到的来⾃客户端的写命令,当后台进程bgsave执行完成后,会将该rdb⽂件传递给从服务器从服务器会将rdb⽂件保存在磁盘并通过读取该⽂件将数据加载到内存 ,之后主服务器会将在此期间缓存的命令通过redis传输协议发送给从服务器然后从服务器将这些命令依次作⽤于⾃⼰本地的数据集上最终达到数据的⼀致性。

增量复制:

从服务器初始化后开始正常⼯作时主服务器发⽣的写操作同步到从服务器的过程。主服务器每执⾏⼀个写命令就会向从服务器发送相同的写命令,从服务器接收并执⾏收到的写命令

特点:

主从复制对于 主/从 redis服务器来说是⾮阻塞的,所以同步期间都可以正常处理外界请求

⼀个主redis可以含有多个从redis,每个从redis可以接收来⾃其他从redis服务器的连接

从节点不会让key过期,⽽是主节点的key过期删除后,成为del命令传输到从节点进⾏删除

哨兵(sentinel

主从复制虽然提高了数据的高可用性,但是存在的问题是遇到故障时不能自动恢复,比如一个主从服务中,一个服务器宕机了,那就得手动的将一台从服务器转换成主服务,这段时间内服务就得关闭,造成一段时间内服务不能够使用,影响了用户体验。而哨兵就能解决故障恢复无法自动化的问题。

哨兵通过发送命令给多个节点,等待Redis服务器响应,监控运⾏的多个Redis实例的运⾏情况当哨兵监测到主服务宕机,会⾃动选取其中一台从服务器切换成主服务,通知其它的从服务器并修改配置⽂件。

哨兵的三个作用:

监控((Monitoring):监控主从节点是否正常运行及其运行情况

通知:(Notification): 当哨兵监测到某个节点出现问题时,哨兵会通过API向其他应用程序发送通知

自动转移故障(Automatic failover):当检测到主节点宕机后,断开与宕机主节点连接的所有从节点,在从节点中选取一个作为主节点,然后将其他的从节点连接到这个最新主节点的上。当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址, 使得集群可以使⽤新主服务器代替失效服务器

注意哨兵也是一台 Redis 服务器,只是不对外提供任何服务

哨兵相关配置

sentinel auth-pass masterName password  

sentinel auth-pass定义服务的密码

 sentinel monitor {masterName} {masterIp} {masterPort} {quorum}

masterName指定了主节点名称,masterIp和masterPort指定了主节点地址,quorum是判断主节点客观下线的哨兵数量阈值:当判定主节点下线的哨兵数量达到quorum时,对主节点进行客观下线

 sentinel down-after-milliseconds {masterName} {time}

sentinel down-after-milliseconds与主观下线的判断有关:哨兵使用ping命令对其他节点进行心跳检测,如果其他节点超过down-after-milliseconds配置的时间没有回复,哨兵就会将其进行主观下线。down-after-milliseconds的默认值是30000,即30s;可以根据不同的网络环境和应用要求来调整:值越大,对主观下线的判定会越宽松,好处是误判的可能性小,坏处是故障发现和故障转移的时间变长,客户端等待的时间也会变长。

 sentinel failover-timeout {masterName} {time}

sentinel failover-timeout与故障转移超时的判断有关,但是该参数不是用来判断整个故障转移阶段的超时,而是其几个子阶段的超时,例如如果主节点晋升从节点时间超过timeout,或从节点向新的主节点发起复制操作的时间(不包括复制数据的时间)超过timeout,都会导致故障转移超时失败。failover-timeout的默认值是180000;如果超时,则下一次该值会变为原来的2倍。

sentinel哨兵核心流程:

Sentinel会每秒Ping一下监测节点是否能够正常运行,超过时间不响应,则认为主观下线。Sentinel 在给定的时间范围内,从其他 Sentinel 那 ⾥接收到了⾜够数量的主服务器下线报告,那么 Sentinel 就会将主服务器的状态从主观下线改变 为客观下线。之后投票选择主节点,如果没有⾜够的节点同意master下线,则状态会被移除。

主观下线:⼀个服务器没有在 down-after-milliseconds 选项所 指定的时间内, 对向它发送 PING 命令的 Sentinel 返回⼀个有效回复(valid reply)哨兵节点就会将其进行主观下线。

客观下线:哨兵节点在对主节点进行主观下线后,会通过sentinel is-master-down-by-addr命令询问其他哨兵节点该主节点的状态;如果判断主节点下线的哨兵数量达到一定数值,则对该主节点进行客观下线。

集群(Cluster)

前面我们用Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis的数据根据一定的规则分配到多台机器。

集群(Cluster)

Cluster模式是Redis3.0开始推出,由多个节点群组成的分布式服务集群,Redis的数据分布在这些节点中。集群不需要Sentinel哨兵也可以完成故障自动迁移。 使用集群时需要将redis配置文件中的cluster-enabled 配置打开。 采⽤⽆中⼼结构,每个节点保存数据和整个集群状态, 各个节点会互相通信,采⽤gossip协议交换节点元数据信息,每个节点都和其他所有节点连接 。一个集群⾄少需要6个节点才可以保证⾼可⽤,即3主3从。

原理:

redis cluster集群采⽤数据分⽚中的哈希槽来进⾏数据存储与读取的,Cluster会预分好16384个槽,每个节点负责其中的一部分槽位。当需要在 Redis 集群中放置⼀个数据时,Cluster默认会根据 CRC16算法CRC16(key) mod 16384 的值,决定将⼀个key放到哪个槽位中。

常见的配置:

cluster-enabled yes:开启集群模式(cluster);

cluster-config-file:该参数指定了集群配置文件的位置记录集群节点信息。以集群模式启动时,会首先寻找是否有集群配置文件,如果有则使用文件中的配置启动,如果没有,则初始化配置并将配置保存到文件中

cluster-node-timeout time:节点连接超时时间

cluster-announce-ip ip:集群节点的ip,当前节点的ip

cluster-announce-port port:集群节点映射端⼝

若有不对之处还希望指正为谢!@~@

引用:《Redis设计与实现》、《Redis实战》 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值