Redis主从复制

Redis主从复制

什么是主从复制?

主从复制就是主服务器中的数据会自动同步到从服务器中,主服务器中可以写数据也可以读数据但是从服务器里面只能读数据,这也被称为是读写分离。

概念:主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

只要在公司中,主从复制就是必须要使用的,因为在真实的项目中不可能单机使用Redis!

环境配置:只配置从库,不配置主库

单台Redis最大使用内存不应该超过20G

配置Redis的集群环境

什么是redis的集群环境?

集群环境就是有一个同时打开多个服务器的环境,这多个服务器都是不同的,每个服务器都是用一个特定的redis.conf配置文件打开的。

配置redis的集群环境时每个redis的配置文件中需要修改什么东西?

配置多个redis的配置文件,如下图:

在这里插入图片描述

然后根据不同的redis的配置文件开启多个redis服务器,配置redis的集群环境的时候,redis的配置文件中需要更改的内容如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据不同的redis配置文件启动redis服务器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

搭建好Redis的集群环境之后就可以配置Redis的主从复制了,我们配置的是一主二从

a.info replication命令

使用info replication命令可以查看当前redis服务器的主从信息,可以查看当前redis服务器是主机还是从机,如下:

127.0.0.1:6379> info replication		#查看当前库的信息
# Replication
role:master	#角色 master主机
connected_slaves:0	#没有从机
master_replid:2e09d52014f798c757e29a32f832d0f99aae688f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 

b.哪个redis服务器是主节点?

默认情况下,每台Redis服务器都是主节点,如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

c.给从机redis服务器认主机也即是给从机认老大

我们一般情况下只用配置从机就好了!

认老大!一主(79)二从(80,81)如下图:

给从机认老大的命令:slaveof 老大(redis服务器)的主机地址 老大(redis服务器)的端口号,执行此命令时注意主机地址一定要写成是127.0.0.1不能写成182.92.210.39,否则的话是找不到主机中端口号是6379的redis服务器的,如下图:

在这里插入图片描述

在这里插入图片描述

上面的这两张图都是给以redis80.conf配置文件开启的redis服务器认端口号是6379的redis服务器为老大,但是第一张图片中老大的主机地址是182.92.210.39发现虽然执行也成功了,端口号为6380的redis服务器也从主机变成了从机,但是它认的老大并不是我以为的本地的6379为端口号的redis服务器,因为master_link_status的值是down,就代表以6379为端口号的redis服务器并没有开启,但其实我们是已经开启的,后来我把182.92.210.39这个主机地址改成了127.0.0.1本机地址,然后发现master_link_status的值变成了up,这个时候就表示以redis80.conf这个配置文件开启的redis服务器就已经成功的认端口号是6379的redis服务器为老大了。

下面的这张图片是给以redis81.conf配置文件开启的redis服务认端口号是6379的redis服务器为老大,原理和上面的相同,注意要把主机地址182.92.210.39改成是127.0.0.1

在这里插入图片描述

d.从机认完老大后查看老大redis服务器的信息

给端口号是6380和端口号是6381的redis服务器都认端口号是6379的redis服务器为老大之后,去端口号是6379的redis服务器中查看当前redis服务器的信息,如下图:

在这里插入图片描述

e.从机如果是使用命令认的老大那么这个老大只是暂时的

真实的主从配置应该是在配置文件中配置,这样的话是永久的,我们这里使用的是命令slaveof host port,这只是暂时的,从机重启之后就会变成主机,如下图:

在这里插入图片描述

所以我们可以通过配置文件来给从机认老大。

z.通过配置文件给从机认老大

需要给主机设置认证密码,从机也设置认证密码,然后从机的配置文件里面还需要其他配置,需要配置主机认证和主机ip还有主机端口。

主机配置文件中需要配置的信息如下图:

在这里插入图片描述

从机配置文件中需要配置的信息如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试主从配置是否成功,如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

f.主机写从机读,读写分离

主机可以写,从机不能写只能读!主机中的所有信息和数据都会自动被我们的从机保存。

在这里插入图片描述

在这里插入图片描述

从机里面只能读数据,不能写数据,如下图:

在这里插入图片描述

g.要点说明

1.主机断开连接,从机依旧连接到主机,但是没有写操作,主机回来之后,从机依旧可以获取主机中的数据。

2.如果是使用命令行来配置的主从,这个时候如果从机重启了,就会变回主机,但是如果使用的是配置文件配置的主从信息,即便从机重启,回来后从机仍是从机不会变成主机。

3.假如有三个redis服务器,分别是6379端口号的redis服务器,6380端口号的redis服务器,6381端口号的redis服务器,其中6380端口号的redis服务器认的6379端口号的服务器为老大,而6381端口号的redis服务器认得6380端口号的服务器为老大,那么6380虽然有一个小弟,但是他也有一个老大,只要一个redis服务器有老大,那么这个redis服务器就是从服务器,从服务器只能读不能写,所以上面的三个服务器只有6379端口号的redis服务器是主服务器,其它的都是从服务器,这个时候也可以完成主从复制,即6379端口号的redis服务器中的数据会复制到6380端口号的服务器,而6380端口号的服务器中的数据会复制到6381端口号的服务器中。

h.主从复制原理

主从复制的意思就是主服务器里面的数据会被同步到从服务器里。

同步
当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器首先要执行同步操作,即将从服务器的数据库状态更新至主服务器当前所处的数据库状态。

     同步过程步骤如下:

从服务器向主服务器发送SYNC命令。
收到SYNC命令的主服务器执行BGSAVE命令,在后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令。
当主服务器的BGSAVE命令执行完毕,主服务器将生成的RDB文件发送给从服务器,从服务器接收并加载这个RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE命令是的数据库状态。
主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器当前所处的状态。

大概意思就是在从服务器向主服务器发送slaveof命令之后,主服务器会通过rdb持久化,生成一个rdb文件,然后发给从服务器,这样从服务器中的东西就和主服务器一样了。

工作中使用的主从复制的方式

上面介绍的主从复制的方式工作中不会使用,因为如果老大的redis主服务器shutdown断开之后,从服务器就没有老大了,工作中不会使用这种主从复制的方式,工作中使用的主从复制的方式是在主服务器断开之后,会从所有的从服务器选出一个老大出来,就像古惑仔电影演的那样,当老大死了之后,老大下面的小弟会重新推选出一个老大出来,这也叫做谋权篡位,如下图:

在这里插入图片描述

使用命令slaveof no one进行谋权篡位,那么从机重启之后仍会变成从机而不是主机,如下图:

在这里插入图片描述

假设从机在谋权篡位之后没有重启,那么这个从机就从从机变成了主机,那么其它的所有的从机都可以手动的来连接到这个主机,使用slaveof host port命令,如下图:

在这里插入图片描述

在这里插入图片描述

这种主从复制的方式也不太方便,因为老大死后,还需要有人手动的谋权篡位,并且其它的从机还需要手动的认它做老大,我们能不能让这一切都自动发生呢?也即是老大死后,新的老大会自动产生,并且其它的所有从机都会自动认它做老大?答案是能的,请参照下节哨兵模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值