redis学习(四)--- 复制和哨兵模式

前言:

       尽管 Redis 的性能很好,但是有时候依旧满足不了应用的需要,比如过多的用户进入主页,导致 Redis 被频繁访问,此时就存在大量的读操作。显然单靠一台 Redis 服务器是完全不够用的 当主服务器不能正常工作的时候,我们希望从服务器代替原来的主服务器,作为灾备,以保证系统可以继续正常的工作 。因此更多的时候我们希望可以读/写分离。读/写分离的前提是读操作远远比写操作频繁得多如果数据都存放在多台服务器上那么久可以从多台服务器中读取数据,从而消除了单台服务器的压力

一、主从同步的概念

互联网系统一般是以主从架构为基础的,主从架构设计的思路大概是:

  • 在多台数据服务器中,只有一台主服务器,而主服务器只负责写入数据,不负责让外部程序读取数据
  • 存在多台从服务器,从服务器不写入数据,只负责同步主服务器的数据,并让外部程序读取数据
  • 主服务器在写入数据后,即刻将写入数据的命令发送给从服务器,从而使得主从数据同步
  • 应用程序可以随机读取某一台从服务器 的数据, 这样就分摊了读数据的压力。
  • 当从服务器不能工作的时候,整个系统将不受影响: 当主服务器不能工作的时候,可以方便地从从服务器中选举一台来当主服务器 。

二、Redis主从同步配置

对 Redis 进行主从同步的配置分为主机与从机,主机是一台,而从机可以是多台 .

主服务器
      首先,明确主机。当你能确定哪台机子是主机的时候,关键的两个配置是 dir和dbfilename 选项, 当然必须保证这两个文件是可写的。对于 Redis 的 默认配置而言, dir 的默认值为“./”,而对于 dbfilename 的默认值为“ dump.rbd ”。换句话说,默认采用 Redis当前目录的 dump.rbd 文件进行同步。

从服务器

     其次 , 在明确了从机之后,进行进一步配置所要关注的只有 slaveof这个配置选项,它的配置格式是 :slaveof server port

    其中 server 代表主机,port代表端口。当从机 Redis 服务重启 时,就会同步对应主机的数据了。当不想让从机继续复制主机的数据时,可以在从机的 Redis 命令客户端发送slaveof no one 命令,这样从机就不会再接收主服务器的数据更新了。又或者原来主服务器已经无法工作了,而你可能需要去复制新的主机,这个时候执行 slaveof sever port 就能让从机复制另外一台主机的数据了。

三、Redis主从同步的过程

       如图所示:

                   

(1)无论如何要先保证主服务器的开启,开启主服务器后,从服务器通过命令或重启配置项可以同步到主服务器。
(2)当从服务器启动时,读取同步的配置,根据配置决定是否使用当前数据响应客户端,然后发送 SYNC 命令。当主服务器接收到同步命令的时候,就会执行 bgsave 命令备份数据,但是主服务器并不会拒绝客户端的读/写,而是将来自客户端的写命令写入缓冲区 。从服务器未收到主服务器备份的快照文件的时候,会根据其配置决定使用现有数据响应客户端或者拒绝。
(3)当 bgsave 命令被主服务器执行完后,开始向从服务器发送备份文件,这个时候从服务器就会丢弃所有现有的数据,开始载入发送的快照文件。
(4)当主服务器发送完备份文件后,从服务器就会执行这些写入命令。此时就会把bgsave 执行之后的缓存区内的写命令也发送给从服务器,从服务完成备份文件解析,就开始像往常一样,接收命令,等待命令写入。
(5)缓冲区的命令发送完成后,当主服务器执行一条写命令后,就同时往从服务器发送同步写入命令,从服务器就和主服务器保持一致了。而此时当从服务器完成主服务器发送的缓冲区命令后,就开始等待主服务器的命令了。

    在主服务器同步到从服务器的过程中,需要备份文件,所以在配置的时候一般需要预留 一些内存空间给主服务器,用以腾出空间执行备份命令。 一般来说主服务器使用50%~65%的内存空间 ,剩下的为主从复制留下可用的内存空间。
 

缺点:  

       主从切换技术的方法是: 当主服务器右机后,需要手动把一台从服务器切换为主从服务器,这就需要人工干预,既费时费力,汪会造成一段时间内服务不可用,更多的时候,我们优先考虑Redis的哨兵模式。

四、哨兵模式

          Redis 可以存在多台服务器,并且实现主从复制的功能。哨兵模式是一种特殊的模式,首先 Redis 提供哨兵的命令,哨兵是一个独立 的进程,作为进程会独立运行。原理是哨兵通过发送命令, 等待 Redis 服务器响应,从而监控运行的多个 Redis 实例。

哨兵有两个作用

  • 通过发送命令,让 Redis 服务器返回监测其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到 master宕机, 会自动将 slave 切换成 master,然后通过发布订阅模式通知到其他的从服务器,修改配置文件,让它们切换主机 。

 只是现实中一个哨兵进程对 Redis 服务器进行监控,也可能出现问题,为了处理这个问题,还可以使用多个哨兵的监控,而各个哨兵之间还会相互监控,这样就变为了多个哨兵模式。多个哨兵不仅监控各个 Redis 服务器,而且哨兵之间互相监控 ,看看哨兵们是否还“活 ” 着。

论述一下故障切换( failover)的过程:

     假设主服务器岩机,哨兵 1 先监测到这个结果,当时系统并不会马上进行 failover 操作 ,而仅仅是哨兵1 主观地认为主机己经不可用,这个现象被称为主观下线。当后面的哨兵监测也监测到主服务器不可用 , 并且有一定数量的哨兵认为主服务器不可用,那么哨兵之间就会形成一次投票,投票的结果由一个哨兵发起,进行 failover 操作,在 failover 操作的过程中切换成功后,就会通过发布订阅方式,让各个哨兵把自己监控的服务器实现切换主机 , 这个过程被称为客观下线。这样对于客户端而言, 一切都是透明的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值