前提准备:三台云服务器(吐血消费,点赞回血)也可以使用虚拟机创建三台,但是我搞了一天也连接不上,要是又可以连接上的大家可以教我一下,也可以参考一下或者大家可以参考一下这个大佬的配置:如何配置虚拟机
官网解释:
一句话解释: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
从机日志:
此时我们可以看到,我们使用从机设置的时候,报错了!!!
master启动,写到k3
slave1跟着master同时启动,跟着写到k3
slave2写到k3后才启动,那之前的是否也可以复制?
此时我们可以发现,slave2把所有内容都同步了,结论:首次一锅端,后续跟随,master写,slave跟
从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来,当主机回来后,青山依旧在!!!
由此我们可以知道,无论是那个从机down机了,重连之后都会从主机复制所有内容
刚刚我们是吧主从关系写到配置文件中,这样只要一开机,就会自动连接主机,现在我们要实现手动连接
此时我们可以看见执行该命令的机器变成从机
很显然,我们重启之后这种主从关系就消失了
关于上述的一主二从的关系是比较鸡肋的,因为多个从机连接一个master会增加master的压力;所以我们要实现一种方法:
上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主master的写压力
使当前数据库停止与其他数据库的同步,转为master
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机器数量的增加也会使这个问题更加严重
????????????????????????????????????????????????????????????????????????????????????
默认情况下,不会在slave节点中自动重选一个master,那么都要人工干预呢?无人值守变成刚需,那么我们请静等下集:哨兵!!!