Redis - 主从复制、读写分离

主从复制

    Redis通过配置主从复制,主(master)进行写操作,从(slave)进行读操作,实现读写分离,这样配置可以减轻redis的压力,同时可以解决单点故障问题。

实现原理

     slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件(RDB)到slave,以完成一次完全同步(全量复制),之后的对数据进行的操作将会通过master发送同样的命令到slave实现同步(增量复制)。
  1. 全量复制:slave服务在接收到数据库文件(RDB)数据后,将其存盘并加载到内存中。
  2. 增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步

    整个过程中master以写为主,slave以读为主(不能进行写、修改操作),slave会实时向master发送命令(生命探测),询问其是否出错。如果得不到回应将会采用相应的措施(使用命令、哨兵模式),注master的出错不影响slaver的运行。

具体配置

    这里用一个台Linux服务器模拟集群,配置三个配置文件,即启动三个redis服务端,port分别为6379(master)、6380、6381.

    如下是配置三个redis端口号及日志文件等

    修改master日志文件,为了更好观察:

    配置slave6380,6381同理:

    启动主机、从机并通过info replication命令查看查看相关信息

可以看到主现在的角色是master

两个从因为还没有配置主从复制,所以现在的角色也是master

    配置主从复制:方式1、通过命令  2、通过配置文件:


通过执行命令slave 127.0.0.1 6379 ,让当前redis服务器跟从相应的master,可以看到6380当前以为slave。6381同理。

    执行操作进行测试:


    这是我master中之前存储了的key


    看,在slave成功连接到master之后,这些数据都同步到了slave,即做一次全同步,全量复制。


    我在master中添加了一个key1


       两个slave都同步了这个命令(增量复制),增加了key1。 接下来用slave进行写操作


     报错了,说明slave只能进行读操作。

     还可以用配置文件的方式配置slave,效果相同,比命令更方便:

        

这就是redis的主从复制读写分离了,当然单点出现了故障也可以配置相应的策略,master宕机后,slave可以通过命令上位成为master但原master恢复后这个当了master的slave不会自动恢复到原来的样子了,就有两个master。另外可以通过配置哨兵模式,投票上位,这种方式master恢复后,会自动成为已经上位的master的slave,保证了只有一个master。

猜你喜欢

转载自blog.csdn.net/b9x__/article/details/80605140