主从复制,宕机,哨兵
- 1. 主从复制概念
- 2. 主从复制的好处
- 3. 主从复制设置
- 3.1 在master的redis.conf中设置
- 3.2 主从复制 slave的配置
- 3.3 测试主从复制
- 4. 主从复制的原理过程
- 5. ==主从复制出现宕机==
- 6. 哨兵
- 6.1 ==哨兵的工作流程==
1. 主从复制概念
- 可以用多个redis.server来组成一个集群,让其中一个作为主服务器,其他作为从服务器,从服务器会自动从主服务器上同步数据,可以分布一些读的操作。主服务器master的RDB备份的工作可以交给从服务器slave。
- master:可以关闭rdb快照,开启aof(写操作)
- slave:声明一个slave-of;某一个slave打开rdb的快照功能,配置是否只读slave-read-only;可以选配置密码;
- 每次slave断开后,再次连接master时全部的dump出来的rdb再aof,即同步的过程需要重新再来一次,多个slave不要一下全部启动
2. 主从复制的好处
- 避免redis单点故障
- 构建读写分离结构,满足读多写少的应用场景
3. 主从复制设置
- 拿port的端口号为6379 6380来测试
- 其中6379为master 6380位slave
3.1 在master的redis.conf中设置
port 6379
pidfile /var/run/redis_6379.pid
- rdb关闭 rdb的备份工作交给slave,开启aof
-# replicaof <masterip> <masterport>
logfile "/data/logs/redis.master.log"
3.2 主从复制 slave的配置
port 6380
pidfile /var/run/redis_6380.pid
replicaof 127.0.0.1 6379
replica-read-only yes
logfile "/data/logs/redis.slave1.log"
3.3 测试主从复制
- 要先打开master的redis1服务
./bin/redis-server redis.conf
- 打开slave的redis服务器
./bin/redis-server redis6380.conf
- 新建会话窗口1
./bin/redis-cli -p 6379
- 新建会话窗口2
./bin/redis-cli -p 6380
- 在会话1
info replication
可以查看角色信息 - 在会话窗口2
info replication
查看slave的角色信息,说明配置成功 - 只能在master中设置信息,slave中只能读取信息不能写
- mster写的信息,在slave中可以显示出来 说明主从复制备份成功。
4. 主从复制的原理过程
- 当从库与主库建立MS的关系之后,从库向主数据库发送同步sync命令
- 当主库接收到从库的sync命令之后会保存快照数据(rdb持久化过程),并将期间接受到的命令缓存起来
- 当快照完成后,主redis会将快照文件和所有缓存的写命令发送给从redis
- 从redis接受后,会载入快照文件并且执行收到得缓存命令
- 主redis每当接受到
写的命令
时就会将命令发送给redis,从而保证了数据的一致性。
5. 主从复制出现宕机
- 从redis宕机
a) 在redis中从库重新启动后会自动加入到主从架构中去,自动完成同步数据
b)如果从库在断开期间,主库变化不大,从库再次启动,主从断线后redis2.8以后是增量复制(会有记录上一次执行到的地方,中断后以及现在的地方,就复制中间的差的那一截儿) - 主redis宕机
a)首先要在从数据库中设置slave no one 的命令,断开主从的关系,并且提升为主库继续服务(断开主从关系,以为主句宕机,再次启动时数据清空了,如果主从关系还在,会把从库的数据也弄丢,所以要先断开主从的关系)
b)将主库重新启动后,作为执行slave命令,将它设置为现在主库的从库(就是在原来主库宕机后,从从库中选举出来的新的主库),此时通过主从复制,原来主库丢失的数据又回来了。(但是人来操作很麻烦,故而有了哨兵)
6. 哨兵
- 哨兵的作用是对redis的系统的运行情况的监控,它是一个独立的进程
功能
- 监控主数据库和从数据库是否正常运行
- 主数据库出现故障后自动将选举leader,选举出新的主数据库,并把之前的主数据库作为新主数据库的从数据库。
- 当时单个哨兵也容易出现单个哨兵单点故障,所以一般多个哨兵;多个哨兵每个哨兵不仅要监控主从数据库,哨兵之间也要相互做监控。
6.1 哨兵的工作流程
- master宕机时,哨兵监测到master宕机
- 开始恢复故障
- 通过投票选举出哨兵的leader
- 再从从库中选举一个从库作为主库
- 发送slaveof no one命令
- 等待升级为master
- 故障恢复完成
- 将之前的主库变成现在的从库