1.基本概述
主从复制就是master以写为主,Slave以读为主,而当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。

2.配置方式
三边网络相互ping通且注意防火墙配置
先创建一个目录存放持久化文件
mkdir /myredis/dirfiles
修改配置文件
vim redis.conf
允许后台启动,daemonize no改为 daemonize yes

允许连接,所以关闭保护模式,改为 protected-mode no

注释掉bind 127.0.0.1只能本机访问,或改成本机IP地址,否则影响远程IP连接

取消注释,requirepass 后接你自己设置的密码

更改持久化目录

为便于区分,不同主机使用不同端口,改为对应端口即可。



pid目录,为便于区分,不同主机使用不同端口,命名加上对应端口

日志目录,为便于区分,不同主机使用不同端口,命名加上对应端口,需要创建该目录
mkdir /myredis/log

RDB配置文件,为便于区分,不同主机使用不同端口,命名加上对应端口

从机访问主机的通行密码masterauth和主机地址replicaof,只需要配置从机即可

保存并退出即可
各个主机开启
redis-server /myredis/redis6379.conf
登入
redis-cli -a 123456 -p 6379



查看从机的日志,可以看到连接上了主机了
vim /myredis/log/6380.log

主从关系查看
info replication
主机查看

从机查看

3.注意事项
所以节点都为空



在主节点
set k1 v1

可以看到从节点也可以获取,数据同步
get k1


而从机不能写入数据,不能对只读副本进行写操作。

主机宕机后,从机会检测到master处于down状态

这时master重启后,依旧作为master节点

而从机就会检测到master处于up状态,重新同步数据。

将从机节点上加入master的配置删除掉,那么主机就检测不到从节点了


从机节点上没有加入master的配置,重启后作为master节点

从节点手动加入master节点
slaveof 8.134.133.76 6379


不过从机重启后就失效了
上一个slave可以是下一个slave的master, slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主master的写压力
我们将6381加入6380

查看6380的主从关系,发现多了一个连接slave,当然都不能有写操作。

停止同步,自己变成master
slaveof no one

4.总结
注意:
- master启动后,slave数据库对master的同步是全部数据,就算slave数据库宕机再重启,在这期间master写入的数据,在slave数据库重启后,依旧会写入slave数据库。
- slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除
- master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来, master节点执行RDB持久化完后,master将rdb快昭文件和所有缓存的命今发送到所有slave以完成一次完全同步
- 从机下线后,重启后master会检查backlog里面的offset, master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传。
- 由干所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重, Slave机器数量的增加也会使这个问题更加严重。
master对slave监控频率。



