一、主从复制是什么
主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。
二、主从复制能干什么
1、读写分离,性能扩展
主服务器负责写,从服务器负责读。
当应用需要进行读操作时,直接到从服务器中读取数据;当应用需要进行写操作时,将数据写入主服务器中,再复制到从服务器中。
2、容灾快速恢复
如果一台从服务器宕机,可以再从其他从服务器中读取;如果一台主服务器宕机,可以做成集群模式,集群中的每一个部分都是一主多从的配置。
三、复制原理
Slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步(全量复制);在此之后,每次master更新的数据会主动地写入slave中(增量复制)。
全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
简而言之,从机连接上主机之后,主动请求数据同步;主机将所有数据同步到rdb中,将rdb文件发送给从机。在此之后的每次主机数据更新,都由主机主动地更新到从机中。
四、常用的三种策略
1、一主二仆
从机宕机后,再次重启会变为其他主机,需要手动将其假如到当前主机中变为从机;主机宕机后,从机还为从机,在主机重启后还是主机的从机。
成为某个主机的从机的命令:
slaveof <ip><port>
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master。
类似于主机下管理着从机小组长,从机小组长下面又管理着从机。
优点: 可以有效减轻master的写压力,去中心化降低风险。
缺点:一个从机宕机,后面的slave都没法备份;主机宕机,从机还是从机,无法写数据。
3、反客为主
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
将从机变为主机的命令:
slaveof no one
那么能否自动使从机变为主机呢?
五、哨兵模式
1、哨兵模式是什么
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
2、怎么设置哨兵
sentinel monitor mymaster 127.0.0.1 6379 1
其中mymaster为监控对象起的服务器名称;127.0.0.1和6379为监控的主机IP和端口号;1 为至少有多少个哨兵同意迁移的数量。
3、哨兵的作用:故障恢复
当主机宕机时,哨兵从从机中挑选一台作为主机。选出主机后,哨兵向所有从服务发送slaveof的臣服命令,使所有的从机归顺主机。当主机重启后,也必须臣服与新主,哨兵也会向其发送slaveof命令。
再说一下从机变为主机的挑选原则:优先级小的为主机;优先级相同的,偏移量大的为主机;优先级和偏移量相同的,runid小的为主机。解释一下优先级、偏移量和runid三个概念:优先级是Redis配置文件中配置的值,默认为100,值越小优先级越高;偏移量是指从机获取原主机数据的完整度,获得数据比较全的偏移量较高;每一个Redis实例启动后都会有的一个40位runid
总结起来,sentinel就像托孤大臣一样,扶植新主,统领群臣朝拜,即使旧主归来也要俯首。