一、redis的持久化
redis的持久化有两种方式,默认是RDB:
- RDB模式:在某段时间内有多少次写指令就将数据持久化到rdb文件,若发生宕机,则从上次备份到现在的数据都丢失。宕机后重启会重新加载旧的数据。RDB模式会单独fork一个子进程来持久化,主进程不会进行任何IO操作。
- AOF模式:会把每次执行的命令从缓存持久化到aof文件中,默认的配置是每秒持久化一次。宕机后重启加载硬盘中的数据。
RDB默认的配置:
save 900 1 # 900s内有1次修改,就持久化
save 300 10 # 300s内10次
save 60 10000 # 60s内10000次
dbfilename dump.rdb # 文件
AOF默认配置:
appendonly no # 把这个改为yes,才会开启持久化
appendfilename "appendonly.aof" # 文件
# appendfsync always # 每次操作都会立即写入aof文件,效率最低
appendfsync everysec # 每秒持久化一次,默认配置
# appendfsync no # 不主动进行同步操作,默认30s一次
二、redis主从复制(避免单点故障)
一主多从,异步复制
Redis主从复制可以根据是否是全量分为全量同步和增量同步。
全量同步:
Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:
- - 从服务器连接主服务器,发送SYNC命令;
- - 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
- - 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
- - 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
- - 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
- - 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
增量同步:
Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。
主从复制的配置:
配置特别简单,只需要在从服务器的配置文件redis.conf写入主服务器的ip和端口即可
# slaveof <masterip> <masterport>
主服务器ip 主服务器端口
三、哨兵机制
有了主从复制以后,虽然能解决单点故障,但是宕机后需要自己人为的去重新设置主服务器,如果要对主服务器进行监控,就需要用到’“哨兵”机制。
哨兵机制是一个分布式的系统,用于监控redis系统的运行状态
主要功能
- 监控所有节点数据库是否正常运行(启动多个哨兵)
- master出现故障时,可以自动通过投票机制,从slave节点选出新的master。
一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健。此时,不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会相互监控。在这里,建议大家哨兵至少部署3个,并且使用奇数个哨兵。
Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
a、监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
b、提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
c、自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
工作原理
每个哨兵会定时向其他哨兵、master、slave发送消息,以确定其是否存活。若对方在指定时间内未回复消息,则暂时认为对方已挂;若哨兵群中的多数哨兵都报告某个master没有响应,系统才会认为该master已宕机,然后通过投票机制选出一个新的master(slaveif no ont)
哨兵机制的部署搭建:
参考以下两篇搭建即可: