Redis主从复制

 Redis的复制(Master/Slave)

是什么:
行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,
自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主

 

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

 

 

 

能干吗:
读写分离
容灾恢复

 

 常用3招

a.一主二仆
b.薪火相传
c.反客为主

 

 

 一主二仆

一个Master两个Slave
日志查看:主机日志,备机日志, info replication
主从问题演示

 

 测试:修改配置文件实现三个端口同时开启服务

INFO replication

 

SLAVEOF 127.0.0.1 6379
从机执行备份

 

在从主机同步之后的从机
在获取主机新建的数据,依然能得到
从机从头到尾复制备份

 

INFO replication

此时出现的问题
主机和两个从机同时执行下面的命令
set k5 v5
此时只有主机可以写,从机报错

 

 

主机出问题:

从机何去何从
从机依然存在,坚守岗位,但是连接状态改变
从机的数据依然存在

 

主机重新上线
从机依然可以获取到最新的主机的数据
从机会一直待命等待主机的回来

 

 

 从机出现问题:

假设80从机死了
81可以获取最新的数据

 

每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
info replication
SLAVEOF 127.0.0.1 6379

 

 

 薪火相传

上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,
那么该slave作为了链条中下一个的master,可以有效减轻master的写压力
 
中途变更转向:会清除之前的数据,重新建立拷贝最新的
 
slaveof 新主库IP 新主库端口
 
现在就是:
79  -->  80 --> 81

 

 

反客为主

SLAVEOF no one
使当前数据库停止与其他数据库的同步,转成主数据库
 
测试的前提是回到一主二仆
 
此时主机死了

 

此时80上位
81继而连接81

 

此时79主机回来
依然是主机但是和80 81已经不是一个体系

 

复制原理
 
slave启动成功连接到master后会发送一个sync命令
 
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
 
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
 
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
 
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
 
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
 
 
 
 
 
哨兵模式
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
 
一组sentinel能同时监控多个Master
 

 

1.调整结构,6379带着80、81
2.自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错-----》touch sentinel.conf
3.配置哨兵,填写内容
    a.sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
    b.面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机
4.启动哨兵
    a.redis-sentinel /myredis/sentinel.conf
    b.上述目录依照各自的实际情况配置,可能目录不同
 

此时79关机
哨兵检测到79问题
此时让81充当主机
此时80 81自称一套体系
 

此时79重新上线
此时79成为slave成为81的从机

 

复制的缺点
复制延时:
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,
当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
 
posted @ 2018-12-03 17:29  MrChengs  阅读(276)  评论(0编辑  收藏  举报