前提准备:三台云服务器(吐血消费,点赞回血)也可以使用虚拟机创建三台,但是我搞了一天也连接不上,要是又可以连接上的大家可以教我一下,也可以参考一下或者大家可以参考一下这个大佬的配置:如何配置虚拟机
官网解释:
一句话解释:master以写为主,slave以读为主;就是当master数据变化的时候,自动将新的数据异步同步到其他slave数据库
配置文件修改
我们使用vim redis.conf 在视图模式使用:set number 就可显示行数
开启daemonize yes
注释掉bind 127.0.0.1
protected-mode no
指定端口
指定当前工作目录:dir
pid文件名字:pidfile
log文件名字:logfile
密码设置:requirepass
dump.rdb名字
aof文件:appendfilename
从机访问主机的通行密码masterauth,必须
常用三招
一主二仆
配置文件固定写死
我们按照上述配置文件,修改一下我们的文件
先master后slave依次启动
此时我们可以看见,每个redis服务器都执行keys *的时候,都可以把所有元素都打印一下
我们可以通过日志查看一下主从关系
主机日志:使用vim 6379.log
从机日志:
1、从机可以执行写命令吗?
此时我们可以看到,我们使用从机设置的时候,报错了!!!
2、slave是从头开始复制还是从切入点开始复制?
master启动,写到k3
slave1跟着master同时启动,跟着写到k3
slave2写到k3后才启动,那之前的是否也可以复制?
此时我们可以发现,slave2把所有内容都同步了,结论:首次一锅端,后续跟随,master写,slave跟
3、主机shutdown后情况如何?从机是上位还是原地待命
从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来,当主机回来后,青山依旧在!!!
4、某台从机down后,amster继续,从机重启后能否跟上大部队?
由此我们可以知道,无论是那个从机down机了,重连之后都会从主机复制所有内容
命令操作手动指定
刚刚我们是吧主从关系写到配置文件中,这样只要一开机,就会自动连接主机,现在我们要实现手动连接
1、从机停机去掉配置文件中的配置项,三台都是主机的状态,各不从属
2、使用info replication查看主从关系
预设的从机上执行 slaveof 主机ip 端口号
此时我们可以看见执行该命令的机器变成从机
如果从机重启的话关系还在呢
很显然,我们重启之后这种主从关系就消失了
薪火相传
关于上述的一主二从的关系是比较鸡肋的,因为多个从机连接一个master会增加master的压力;所以我们要实现一种方法:
上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主master的写压力
反客为主
使当前数据库停止与其他数据库的同步,转为master
复制的工作原理和工作流程
slave启动,同步初始
slave启动成功连接到master后会发送一个sync命令、
slave首次全新连接master,一次完全同步(全量复制)将会被自动执行,slave自身原有数据将会master数据覆盖清除
首次连接,全量复制
master节点收到sync命令后,会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接受到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将RDB快照文件和所有缓存的命令发送到slave,已完成一次完全同步
slave服务器在收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
心跳持续,保持通信
master发出PING包的周期,默认是10秒
进入平稳,增量复制
Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步
从机下线,重连续传
Master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传
复制缺点
复制延时,信号衰减
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重
master挂了怎么办
默认情况下,不会在slave节点中自动重选一个master,那么都要人工干预呢?无人值守变成刚需,那么我们请静等下集:哨兵!!!