Redis复制(Replication)和哨兵机制(Sentinel)
发布日期:2021-07-30 03:26:32 浏览次数:3 分类:技术文章

本文共 2284 字,大约阅读时间需要 7 分钟。

Redis复制简介

    Redis支持主从复制配置,当主服务器(Master)的数据更新后会根据配置文件中的配置把数据复制到从服务器(Slave),一个Master可以有多个Slave,Master负责写操作,而Slave主要负责读操作。通过Redis的主从复制可以做到读写分离跟容灾备份。

Redis主从复制的使用

    下面将以一个主服务器以及两个从服务器来进行主从复制的实例介绍。

主从复制的配置

    首先创建两个Slave的文件夹以便跟Master区分开,并分别复制一份配置文件redis.conf到各自的文件中:

   

    接着在两个Slave的配置文件redis.conf进行修改:

  1. 在配置文件中NETWORK修改redis的端口号为6380以及6381。
  2. 在配置文件中GENERAL修改redis的pid为redis_6380.pid以及redis_6381.pid。
  3. 在配置文件中GENERAL修改redis的logfile为6380_log以及6381_log
  4. 在配置文件中SNAPSHOTTING修改redis的dbfilename为dump6380.rdb以及dump6381.rdb。

   

    开启6379,6380,6381三个Redis进程,并且通过info replication可以看到当前三个进程都是独立的,它们都是Master:

    通过指令slaveof把6380以及6381设置为Slave,而6379是它们的Master:

主从复制的使用

     Slave在初次复制的时候会进行全量复制把Master的数据复制到Slave。从上图可以看到在slaveof之前主服务器添加了1,2两组数据。此时再6380以及6381就可以直接使用。

    默认情况下Slave是只读模式的,也就是说6380以及6381两台从服务器只能负责读的操作,一旦有写入的行为就会报错。但是可以修改配置文件中slave-read-only来改变它的行为或者通过运行时调用CONFIG SET来随时开启或者关闭。

    当Master因为网络或者其他原因shutdown之后,Slave会进行等待。一旦Master重新恢复工作之后,Slave就继续正常工作。

    正如前面所说的,当Master挂掉的时候,Slave就会进入等待状态,而如果Master一直无法重启的话那么Slave就会一直等待。这时可以通过命令slaveof no one来让其中一台Slave成为Master(6380)继续工作。如果没有指定的话(例如6381)就一直等待,直到Master恢复。

    如果一个Slave断开连接后再重新启动的话,那么它就会断开跟Master的连接。只能重新通过slaveof主服务器来进行数据的复制。

    上述的主从复制都是一个Master对应多个Slave。所有的写操作都是在Master而当Slave数量变多的时候会存在复制延迟的问题。因此可以通过类似于链表的形式,把上一个Slave变成下一个Slave的Master,这样就可以减轻主服务器的压力。

主从复制的原理

  1. Slave成功启动后会发送一个PSYNC(代替旧的协议SYNC)命令。
  2. Master开启一个后台保存进程生成一个rdb文件。同时开始缓冲之后的所有新的写入命令。
  3. 当rdb生成后会发送给Slave,Slave把它保存到磁盘上然后加载到内存中。
  4. Master接着把这段时间内缓冲的命令发送给Slave。

    在上述的过程中可以分为两个概念。全量复制以及增量复制:

  • 全量复制:全量复制就是执行上述的全部过程,一般当Slave首次连接到Master的时候会执行一次全量复制。
  • 增量复制:当Slave成功连接Master后,Master把缓冲的命令发送给Slave就是一次增量复制。

Redis的哨兵机制(Sentinel)

    前文介绍的Redis的主从复制可以知道在主服务器宕机或者因为各种原因挂掉的情况下,从服务器要嘛进入等待状态,要嘛通过手动的方式来让它变成一个主服务器,这个过程就需要人工的干预。而Redis提供了哨兵机制它可以在Master挂掉的时候通过投票把从服务器Slave自动变成主服务器Master,而旧的主服务器就会变成新的主服务器的从服务器。

  哨兵机制的配置:

sentinel monitor mymaster 127.0.0.1 6379 2 //表示监视的主服务器是127.0.0.1 端口号是6379 ,2表示至少要有两个Sentinel同意才能确认这个主服务器失效sentinel down-after-milliseconds mymaster 60000 //每个Sentinel都会定期的发送PING命令给监视的服务器,如果好过60000毫秒服务器仍没有应答就确认服务器短线sentinel failover-timeout mymaster 180000sentinel parallel-syncs mymaster 1//在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长

    上面是Redis文件夹下Sentinel.conf的最少配置。通过命令redis-sebtinel sentinel.conf 来开启哨兵。当前可以看到6379下面有两个从服务器6380以及6381。

    当把6379服务器关闭掉之后,Sentinel会发现主服务器已经失效紧接着通过投票产生一个新的主服务器。可以看到6380变成了新的主服务器,而旧的主服务器则变成了它的从服务器。

 

 

转载地址:https://blog.csdn.net/u010890358/article/details/80881430 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JavaEE之JMS规范
下一篇:Redis持久化(persistence)

发表评论

最新留言

很好
[***.229.124.182]2024年04月25日 13时51分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章