一句话就是master以写为主,Slave以读为主,当master数据变化时,自动将新的数据异步同步到其它slave数据库
它主要实现了下面这些特性:
master如果配置了requirepas
参数,需要密码登陆,那么slave就要配置masterauth
来设置校验密码,否则的话master会拒绝slave的请求
关于主从复制的重要命令如下:
命令 | 作用 |
---|---|
info replication | 可以参考复制节点的主从关系和配置信息 |
replicaof 主库ip 主裤端口 | 一般写入进redis.conf配置文件内(配置从数据库从属某个主数据库,长久的) |
salvoes 主库ip 主库端口 | 每次于master断开连接之后,都需要重新连接,除非你写入配置文件,在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止与原主数据库的同步关系转而和新的主数据库同步,重新认大哥(配置从数据库从属某个主数据库,临时性的) |
slave of no one | 使当前数据库停止与其他数据库同步,转成主数据库,自立为王 |
采用的环境使用一个master两个slave。
准备三个centos 7 实例,这里可以在原有的机器上复制,我这里将三个虚拟机分别取名为master,slave1和slave2。基本信息如下:
名称 | ip地址 | 端口 |
---|---|---|
master | 192.168.31.250 | 6379 |
slave1 | 192.168.31.251 | 6380 |
slave2 | 192.168.31.252 | 6381 |
修改从库的配置文件(改从库不改主库的原则)
vim /usr/local/redis_new/redis.conf
前面从机和主机是都需要配置的,下面的配置就是从机需要配置,主机不需要配置的
至此主机和从机都配置好了,下面开始测试
首先启动master后两台slave启动(注意从机启动一定要指定端口)
从日志中可以看到关系建立成功了
我们也可以从从机日志中分析
我们使用命令也可以查看连接状态
info replication
主机上执行该命令
从机上执行该命令
至此主从关系已经配置完毕了,下面测试一下主机写数据的情况。
首先我在主机上删除原来库中的所有数据,会发现两个从机的数据也被删除了。
在主机上写入一个值,观察从机的变化
可以发现两个从机都可以拿到这个数据。
关键问题:
- 从机只能读数据而不能写数据
- 启动的晚的从机,也会同步到该从机启动之前主机操作的数据
- 主机宕机后,从机并不会成为主机,从机数据可以正常使用,它会一直等待主机重启
前面介绍的slave1和slave2都是master的直接相连的从机,但如果与master直接连接的重机过大,mater的负担会变得很大,这样就衍生出了另一个模式,如下图。
上一个slave可以是下一个slave的master,slave同样也可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个master,可以有效减轻master的写压力。此时中途更换转向的那个机器会清除之前的数据,重新建立连接拷贝最新的数据。
可以发现slave2的主机已经变为了salve1
但注意此时slave 2还是不能写数据,因为此时slave1还是master的从,它只是充当一个中间桥梁的作用。
slaveof no one
然后当前redis服务独立出来成为自己的master。
缺点: